diff options
| -rw-r--r-- | src/libcore/tests/lib.rs | 1 | ||||
| -rw-r--r-- | src/libcore/tests/num/int_macros.rs | 27 | ||||
| -rw-r--r-- | src/libcore/tests/num/uint_macros.rs | 27 |
3 files changed, 55 insertions, 0 deletions
diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index 86cf6fc104c..36476cf01c0 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -41,6 +41,7 @@ #![feature(const_raw_ptr_deref)] #![feature(never_type)] #![feature(unwrap_infallible)] +#![feature(leading_trailing_ones)] extern crate test; diff --git a/src/libcore/tests/num/int_macros.rs b/src/libcore/tests/num/int_macros.rs index 4a44b5f24b9..48a49073b2c 100644 --- a/src/libcore/tests/num/int_macros.rs +++ b/src/libcore/tests/num/int_macros.rs @@ -90,6 +90,33 @@ macro_rules! int_module { } #[test] + fn test_leading_trailing_ones() { + let bits = (mem::size_of::<$T>() * 8) as u32; + + let a: $T = 0b0101_1111; + assert_eq!(a.trailing_ones(), 5); + assert_eq!((!a).leading_ones(), bits - 7); + + assert_eq!(a.reverse_bits().leading_ones(), 5); + + assert_eq!(_1.leading_ones(), bits); + assert_eq!(_1.trailing_ones(), bits); + + assert_eq!((_1 << 1).trailing_ones(), 0); + assert_eq!(MAX.leading_ones(), 0); + + assert_eq!((_1 << 1).leading_ones(), bits - 1); + assert_eq!(MAX.trailing_ones(), bits - 1); + + assert_eq!(_0.leading_ones(), 0); + assert_eq!(_0.trailing_ones(), 0); + + let x: $T = 0b0010_1100; + assert_eq!(x.leading_ones(), 0); + assert_eq!(x.trailing_ones(), 0); + } + + #[test] fn test_rotate() { assert_eq!(A.rotate_left(6).rotate_right(2).rotate_right(4), A); assert_eq!(B.rotate_left(3).rotate_left(2).rotate_right(5), B); diff --git a/src/libcore/tests/num/uint_macros.rs b/src/libcore/tests/num/uint_macros.rs index f94b2f56bbb..8f1ca8e6fac 100644 --- a/src/libcore/tests/num/uint_macros.rs +++ b/src/libcore/tests/num/uint_macros.rs @@ -54,6 +54,33 @@ macro_rules! uint_module { } #[test] + fn test_leading_trailing_ones() { + let bits = (mem::size_of::<$T>() * 8) as u32; + + let a: $T = 0b0101_1111; + assert_eq!(a.trailing_ones(), 5); + assert_eq!((!a).leading_ones(), bits - 7); + + assert_eq!(a.reverse_bits().leading_ones(), 5); + + assert_eq!(_1.leading_ones(), bits); + assert_eq!(_1.trailing_ones(), bits); + + assert_eq!((_1 << 1).trailing_ones(), 0); + assert_eq!((_1 >> 1).leading_ones(), 0); + + assert_eq!((_1 << 1).leading_ones(), bits - 1); + assert_eq!((_1 >> 1).trailing_ones(), bits - 1); + + assert_eq!(_0.leading_ones(), 0); + assert_eq!(_0.trailing_ones(), 0); + + let x: $T = 0b0010_1100; + assert_eq!(x.leading_ones(), 0); + assert_eq!(x.trailing_ones(), 0); + } + + #[test] fn test_rotate() { assert_eq!(A.rotate_left(6).rotate_right(2).rotate_right(4), A); assert_eq!(B.rotate_left(3).rotate_left(2).rotate_right(5), B); |
