@@ -14,7 +14,9 @@ mod rusti {
14
14
extern "rust-intrinsic" {
15
15
pub fn ctpop < T > ( x : T ) -> T ;
16
16
pub fn ctlz < T > ( x : T ) -> T ;
17
+ pub fn ctlz_nonzero < T > ( x : T ) -> T ;
17
18
pub fn cttz < T > ( x : T ) -> T ;
19
+ pub fn cttz_nonzero < T > ( x : T ) -> T ;
18
20
pub fn bswap < T > ( x : T ) -> T ;
19
21
}
20
22
}
@@ -68,6 +70,21 @@ pub fn main() {
68
70
assert_eq ! ( ctlz( 100u32 ) , 25 ) ; assert_eq ! ( ctlz( 100i32 ) , 25 ) ;
69
71
assert_eq ! ( ctlz( 100u64 ) , 57 ) ; assert_eq ! ( ctlz( 100i64 ) , 57 ) ;
70
72
73
+ assert_eq ! ( ctlz_nonzero( 1u8 ) , 7 ) ; assert_eq ! ( ctlz_nonzero( 1i8 ) , 7 ) ;
74
+ assert_eq ! ( ctlz_nonzero( 1u16 ) , 15 ) ; assert_eq ! ( ctlz_nonzero( 1i16 ) , 15 ) ;
75
+ assert_eq ! ( ctlz_nonzero( 1u32 ) , 31 ) ; assert_eq ! ( ctlz_nonzero( 1i32 ) , 31 ) ;
76
+ assert_eq ! ( ctlz_nonzero( 1u64 ) , 63 ) ; assert_eq ! ( ctlz_nonzero( 1i64 ) , 63 ) ;
77
+
78
+ assert_eq ! ( ctlz_nonzero( 10u8 ) , 4 ) ; assert_eq ! ( ctlz_nonzero( 10i8 ) , 4 ) ;
79
+ assert_eq ! ( ctlz_nonzero( 10u16 ) , 12 ) ; assert_eq ! ( ctlz_nonzero( 10i16 ) , 12 ) ;
80
+ assert_eq ! ( ctlz_nonzero( 10u32 ) , 28 ) ; assert_eq ! ( ctlz_nonzero( 10i32 ) , 28 ) ;
81
+ assert_eq ! ( ctlz_nonzero( 10u64 ) , 60 ) ; assert_eq ! ( ctlz_nonzero( 10i64 ) , 60 ) ;
82
+
83
+ assert_eq ! ( ctlz_nonzero( 100u8 ) , 1 ) ; assert_eq ! ( ctlz_nonzero( 100i8 ) , 1 ) ;
84
+ assert_eq ! ( ctlz_nonzero( 100u16 ) , 9 ) ; assert_eq ! ( ctlz_nonzero( 100i16 ) , 9 ) ;
85
+ assert_eq ! ( ctlz_nonzero( 100u32 ) , 25 ) ; assert_eq ! ( ctlz_nonzero( 100i32 ) , 25 ) ;
86
+ assert_eq ! ( ctlz_nonzero( 100u64 ) , 57 ) ; assert_eq ! ( ctlz_nonzero( 100i64 ) , 57 ) ;
87
+
71
88
assert_eq ! ( cttz( -1i8 as u8 ) , 0 ) ; assert_eq ! ( cttz( -1i8 ) , 0 ) ;
72
89
assert_eq ! ( cttz( -1i16 as u16 ) , 0 ) ; assert_eq ! ( cttz( -1i16 ) , 0 ) ;
73
90
assert_eq ! ( cttz( -1i32 as u32 ) , 0 ) ; assert_eq ! ( cttz( -1i32 ) , 0 ) ;
@@ -93,6 +110,26 @@ pub fn main() {
93
110
assert_eq ! ( cttz( 100u32 ) , 2 ) ; assert_eq ! ( cttz( 100i32 ) , 2 ) ;
94
111
assert_eq ! ( cttz( 100u64 ) , 2 ) ; assert_eq ! ( cttz( 100i64 ) , 2 ) ;
95
112
113
+ assert_eq ! ( cttz_nonzero( -1i8 as u8 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i8 ) , 0 ) ;
114
+ assert_eq ! ( cttz_nonzero( -1i16 as u16 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i16 ) , 0 ) ;
115
+ assert_eq ! ( cttz_nonzero( -1i32 as u32 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i32 ) , 0 ) ;
116
+ assert_eq ! ( cttz_nonzero( -1i64 as u64 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i64 ) , 0 ) ;
117
+
118
+ assert_eq ! ( cttz_nonzero( 1u8 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i8 ) , 0 ) ;
119
+ assert_eq ! ( cttz_nonzero( 1u16 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i16 ) , 0 ) ;
120
+ assert_eq ! ( cttz_nonzero( 1u32 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i32 ) , 0 ) ;
121
+ assert_eq ! ( cttz_nonzero( 1u64 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i64 ) , 0 ) ;
122
+
123
+ assert_eq ! ( cttz_nonzero( 10u8 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i8 ) , 1 ) ;
124
+ assert_eq ! ( cttz_nonzero( 10u16 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i16 ) , 1 ) ;
125
+ assert_eq ! ( cttz_nonzero( 10u32 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i32 ) , 1 ) ;
126
+ assert_eq ! ( cttz_nonzero( 10u64 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i64 ) , 1 ) ;
127
+
128
+ assert_eq ! ( cttz_nonzero( 100u8 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i8 ) , 2 ) ;
129
+ assert_eq ! ( cttz_nonzero( 100u16 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i16 ) , 2 ) ;
130
+ assert_eq ! ( cttz_nonzero( 100u32 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i32 ) , 2 ) ;
131
+ assert_eq ! ( cttz_nonzero( 100u64 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i64 ) , 2 ) ;
132
+
96
133
assert_eq ! ( bswap( 0x0Au8 ) , 0x0A ) ; // no-op
97
134
assert_eq ! ( bswap( 0x0Ai8 ) , 0x0A ) ; // no-op
98
135
assert_eq ! ( bswap( 0x0A0Bu16 ) , 0x0B0A ) ;
0 commit comments