Skip to content

Commit 2330e32

Browse files
author
Thom Chiovoloni
committed
Tests for leading_trailing_ones
1 parent 6a7a69b commit 2330e32

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

src/libcore/tests/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#![feature(const_raw_ptr_deref)]
4242
#![feature(never_type)]
4343
#![feature(unwrap_infallible)]
44+
#![feature(leading_trailing_ones)]
4445

4546
extern crate test;
4647

src/libcore/tests/num/int_macros.rs

+27
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,33 @@ macro_rules! int_module {
8989
assert_eq!(C.count_zeros(), bits as u32 - 5);
9090
}
9191

92+
#[test]
93+
fn test_leading_trailing_ones() {
94+
let bits = (mem::size_of::<$T>() * 8) as u32;
95+
96+
let a: $T = 0b0101_1111;
97+
assert_eq!(a.trailing_ones(), 5);
98+
assert_eq!((!a).leading_ones(), bits - 7);
99+
100+
assert_eq!(a.reverse_bits().leading_ones(), 5);
101+
102+
assert_eq!(_1.leading_ones(), bits);
103+
assert_eq!(_1.trailing_ones(), bits);
104+
105+
assert_eq!((_1 << 1).trailing_ones(), 0);
106+
assert_eq!(MAX.leading_ones(), 0);
107+
108+
assert_eq!((_1 << 1).leading_ones(), bits - 1);
109+
assert_eq!(MAX.trailing_ones(), bits - 1);
110+
111+
assert_eq!(_0.leading_ones(), 0);
112+
assert_eq!(_0.trailing_ones(), 0);
113+
114+
let x: $T = 0b0010_1100;
115+
assert_eq!(x.leading_ones(), 0);
116+
assert_eq!(x.trailing_ones(), 0);
117+
}
118+
92119
#[test]
93120
fn test_rotate() {
94121
assert_eq!(A.rotate_left(6).rotate_right(2).rotate_right(4), A);

src/libcore/tests/num/uint_macros.rs

+27
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,33 @@ macro_rules! uint_module {
5353
assert!(C.count_zeros() == bits as u32 - 5);
5454
}
5555

56+
#[test]
57+
fn test_leading_trailing_ones() {
58+
let bits = (mem::size_of::<$T>() * 8) as u32;
59+
60+
let a: $T = 0b0101_1111;
61+
assert_eq!(a.trailing_ones(), 5);
62+
assert_eq!((!a).leading_ones(), bits - 7);
63+
64+
assert_eq!(a.reverse_bits().leading_ones(), 5);
65+
66+
assert_eq!(_1.leading_ones(), bits);
67+
assert_eq!(_1.trailing_ones(), bits);
68+
69+
assert_eq!((_1 << 1).trailing_ones(), 0);
70+
assert_eq!((_1 >> 1).leading_ones(), 0);
71+
72+
assert_eq!((_1 << 1).leading_ones(), bits - 1);
73+
assert_eq!((_1 >> 1).trailing_ones(), bits - 1);
74+
75+
assert_eq!(_0.leading_ones(), 0);
76+
assert_eq!(_0.trailing_ones(), 0);
77+
78+
let x: $T = 0b0010_1100;
79+
assert_eq!(x.leading_ones(), 0);
80+
assert_eq!(x.trailing_ones(), 0);
81+
}
82+
5683
#[test]
5784
fn test_rotate() {
5885
assert_eq!(A.rotate_left(6).rotate_right(2).rotate_right(4), A);

0 commit comments

Comments
 (0)