123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- extern crate num_integer;
- extern crate num_traits;
- macro_rules! test_average {
- ($I:ident, $U:ident) => {
- mod $I {
- mod ceil {
- use num_integer::Average;
- #[test]
- fn same_sign() {
- assert_eq!((14 as $I).average_ceil(&16), 15 as $I);
- assert_eq!((14 as $I).average_ceil(&17), 16 as $I);
- let max = $crate::std::$I::MAX;
- assert_eq!((max - 3).average_ceil(&(max - 1)), max - 2);
- assert_eq!((max - 3).average_ceil(&(max - 2)), max - 2);
- }
- #[test]
- fn different_sign() {
- assert_eq!((14 as $I).average_ceil(&-4), 5 as $I);
- assert_eq!((14 as $I).average_ceil(&-5), 5 as $I);
- let min = $crate::std::$I::MIN;
- let max = $crate::std::$I::MAX;
- assert_eq!(min.average_ceil(&max), 0 as $I);
- }
- }
- mod floor {
- use num_integer::Average;
- #[test]
- fn same_sign() {
- assert_eq!((14 as $I).average_floor(&16), 15 as $I);
- assert_eq!((14 as $I).average_floor(&17), 15 as $I);
- let max = $crate::std::$I::MAX;
- assert_eq!((max - 3).average_floor(&(max - 1)), max - 2);
- assert_eq!((max - 3).average_floor(&(max - 2)), max - 3);
- }
- #[test]
- fn different_sign() {
- assert_eq!((14 as $I).average_floor(&-4), 5 as $I);
- assert_eq!((14 as $I).average_floor(&-5), 4 as $I);
- let min = $crate::std::$I::MIN;
- let max = $crate::std::$I::MAX;
- assert_eq!(min.average_floor(&max), -1 as $I);
- }
- }
- }
- mod $U {
- mod ceil {
- use num_integer::Average;
- #[test]
- fn bounded() {
- assert_eq!((14 as $U).average_ceil(&16), 15 as $U);
- assert_eq!((14 as $U).average_ceil(&17), 16 as $U);
- }
- #[test]
- fn overflow() {
- let max = $crate::std::$U::MAX;
- assert_eq!((max - 3).average_ceil(&(max - 1)), max - 2);
- assert_eq!((max - 3).average_ceil(&(max - 2)), max - 2);
- }
- }
- mod floor {
- use num_integer::Average;
- #[test]
- fn bounded() {
- assert_eq!((14 as $U).average_floor(&16), 15 as $U);
- assert_eq!((14 as $U).average_floor(&17), 15 as $U);
- }
- #[test]
- fn overflow() {
- let max = $crate::std::$U::MAX;
- assert_eq!((max - 3).average_floor(&(max - 1)), max - 2);
- assert_eq!((max - 3).average_floor(&(max - 2)), max - 3);
- }
- }
- }
- };
- }
- test_average!(i8, u8);
- test_average!(i16, u16);
- test_average!(i32, u32);
- test_average!(i64, u64);
- #[cfg(has_i128)]
- test_average!(i128, u128);
- test_average!(isize, usize);
|