1 macro_rules! test_average { 2 ($I:ident, $U:ident) => { 3 mod $I { 4 mod ceil { 5 use num_integer::Average; 6 7 #[test] 8 fn same_sign() { 9 assert_eq!((14 as $I).average_ceil(&16), 15 as $I); 10 assert_eq!((14 as $I).average_ceil(&17), 16 as $I); 11 12 let max = std::$I::MAX; 13 assert_eq!((max - 3).average_ceil(&(max - 1)), max - 2); 14 assert_eq!((max - 3).average_ceil(&(max - 2)), max - 2); 15 } 16 17 #[test] 18 fn different_sign() { 19 assert_eq!((14 as $I).average_ceil(&-4), 5 as $I); 20 assert_eq!((14 as $I).average_ceil(&-5), 5 as $I); 21 22 let min = std::$I::MIN; 23 let max = std::$I::MAX; 24 assert_eq!(min.average_ceil(&max), 0 as $I); 25 } 26 } 27 28 mod floor { 29 use num_integer::Average; 30 31 #[test] 32 fn same_sign() { 33 assert_eq!((14 as $I).average_floor(&16), 15 as $I); 34 assert_eq!((14 as $I).average_floor(&17), 15 as $I); 35 36 let max = std::$I::MAX; 37 assert_eq!((max - 3).average_floor(&(max - 1)), max - 2); 38 assert_eq!((max - 3).average_floor(&(max - 2)), max - 3); 39 } 40 41 #[test] 42 fn different_sign() { 43 assert_eq!((14 as $I).average_floor(&-4), 5 as $I); 44 assert_eq!((14 as $I).average_floor(&-5), 4 as $I); 45 46 let min = std::$I::MIN; 47 let max = std::$I::MAX; 48 assert_eq!(min.average_floor(&max), -1 as $I); 49 } 50 } 51 } 52 53 mod $U { 54 mod ceil { 55 use num_integer::Average; 56 57 #[test] 58 fn bounded() { 59 assert_eq!((14 as $U).average_ceil(&16), 15 as $U); 60 assert_eq!((14 as $U).average_ceil(&17), 16 as $U); 61 } 62 63 #[test] 64 fn overflow() { 65 let max = std::$U::MAX; 66 assert_eq!((max - 3).average_ceil(&(max - 1)), max - 2); 67 assert_eq!((max - 3).average_ceil(&(max - 2)), max - 2); 68 } 69 } 70 71 mod floor { 72 use num_integer::Average; 73 74 #[test] 75 fn bounded() { 76 assert_eq!((14 as $U).average_floor(&16), 15 as $U); 77 assert_eq!((14 as $U).average_floor(&17), 15 as $U); 78 } 79 80 #[test] 81 fn overflow() { 82 let max = std::$U::MAX; 83 assert_eq!((max - 3).average_floor(&(max - 1)), max - 2); 84 assert_eq!((max - 3).average_floor(&(max - 2)), max - 3); 85 } 86 } 87 } 88 }; 89 } 90 91 test_average!(i8, u8); 92 test_average!(i16, u16); 93 test_average!(i32, u32); 94 test_average!(i64, u64); 95 test_average!(i128, u128); 96 test_average!(isize, usize); 97