8
8
// option. This file may not be copied, modified, or distributed
9
9
// except according to those terms.
10
10
11
- #![ feature( intrinsics) ]
11
+ #![ feature( intrinsics, i128_type ) ]
12
12
13
13
mod rusti {
14
14
extern "rust-intrinsic" {
@@ -30,106 +30,127 @@ pub fn main() {
30
30
assert_eq ! ( ctpop( 0u16 ) , 0 ) ; assert_eq ! ( ctpop( 0i16 ) , 0 ) ;
31
31
assert_eq ! ( ctpop( 0u32 ) , 0 ) ; assert_eq ! ( ctpop( 0i32 ) , 0 ) ;
32
32
assert_eq ! ( ctpop( 0u64 ) , 0 ) ; assert_eq ! ( ctpop( 0i64 ) , 0 ) ;
33
+ assert_eq ! ( ctpop( 0u128 ) , 0 ) ; assert_eq ! ( ctpop( 0i128 ) , 0 ) ;
33
34
34
35
assert_eq ! ( ctpop( 1u8 ) , 1 ) ; assert_eq ! ( ctpop( 1i8 ) , 1 ) ;
35
36
assert_eq ! ( ctpop( 1u16 ) , 1 ) ; assert_eq ! ( ctpop( 1i16 ) , 1 ) ;
36
37
assert_eq ! ( ctpop( 1u32 ) , 1 ) ; assert_eq ! ( ctpop( 1i32 ) , 1 ) ;
37
38
assert_eq ! ( ctpop( 1u64 ) , 1 ) ; assert_eq ! ( ctpop( 1i64 ) , 1 ) ;
39
+ assert_eq ! ( ctpop( 1u128 ) , 1 ) ; assert_eq ! ( ctpop( 1i128 ) , 1 ) ;
38
40
39
41
assert_eq ! ( ctpop( 10u8 ) , 2 ) ; assert_eq ! ( ctpop( 10i8 ) , 2 ) ;
40
42
assert_eq ! ( ctpop( 10u16 ) , 2 ) ; assert_eq ! ( ctpop( 10i16 ) , 2 ) ;
41
43
assert_eq ! ( ctpop( 10u32 ) , 2 ) ; assert_eq ! ( ctpop( 10i32 ) , 2 ) ;
42
44
assert_eq ! ( ctpop( 10u64 ) , 2 ) ; assert_eq ! ( ctpop( 10i64 ) , 2 ) ;
45
+ assert_eq ! ( ctpop( 10u128 ) , 2 ) ; assert_eq ! ( ctpop( 10i128 ) , 2 ) ;
43
46
44
47
assert_eq ! ( ctpop( 100u8 ) , 3 ) ; assert_eq ! ( ctpop( 100i8 ) , 3 ) ;
45
48
assert_eq ! ( ctpop( 100u16 ) , 3 ) ; assert_eq ! ( ctpop( 100i16 ) , 3 ) ;
46
49
assert_eq ! ( ctpop( 100u32 ) , 3 ) ; assert_eq ! ( ctpop( 100i32 ) , 3 ) ;
47
50
assert_eq ! ( ctpop( 100u64 ) , 3 ) ; assert_eq ! ( ctpop( 100i64 ) , 3 ) ;
51
+ assert_eq ! ( ctpop( 100u128 ) , 3 ) ; assert_eq ! ( ctpop( 100i128 ) , 3 ) ;
48
52
49
53
assert_eq ! ( ctpop( -1i8 as u8 ) , 8 ) ; assert_eq ! ( ctpop( -1i8 ) , 8 ) ;
50
54
assert_eq ! ( ctpop( -1i16 as u16 ) , 16 ) ; assert_eq ! ( ctpop( -1i16 ) , 16 ) ;
51
55
assert_eq ! ( ctpop( -1i32 as u32 ) , 32 ) ; assert_eq ! ( ctpop( -1i32 ) , 32 ) ;
52
56
assert_eq ! ( ctpop( -1i64 as u64 ) , 64 ) ; assert_eq ! ( ctpop( -1i64 ) , 64 ) ;
57
+ assert_eq ! ( ctpop( -1i128 as u128 ) , 128 ) ; assert_eq ! ( ctpop( -1i128 ) , 128 ) ;
53
58
54
59
assert_eq ! ( ctlz( 0u8 ) , 8 ) ; assert_eq ! ( ctlz( 0i8 ) , 8 ) ;
55
60
assert_eq ! ( ctlz( 0u16 ) , 16 ) ; assert_eq ! ( ctlz( 0i16 ) , 16 ) ;
56
61
assert_eq ! ( ctlz( 0u32 ) , 32 ) ; assert_eq ! ( ctlz( 0i32 ) , 32 ) ;
57
62
assert_eq ! ( ctlz( 0u64 ) , 64 ) ; assert_eq ! ( ctlz( 0i64 ) , 64 ) ;
63
+ assert_eq ! ( ctlz( 0u128 ) , 128 ) ; assert_eq ! ( ctlz( 0i128 ) , 128 ) ;
58
64
59
65
assert_eq ! ( ctlz( 1u8 ) , 7 ) ; assert_eq ! ( ctlz( 1i8 ) , 7 ) ;
60
66
assert_eq ! ( ctlz( 1u16 ) , 15 ) ; assert_eq ! ( ctlz( 1i16 ) , 15 ) ;
61
67
assert_eq ! ( ctlz( 1u32 ) , 31 ) ; assert_eq ! ( ctlz( 1i32 ) , 31 ) ;
62
68
assert_eq ! ( ctlz( 1u64 ) , 63 ) ; assert_eq ! ( ctlz( 1i64 ) , 63 ) ;
69
+ assert_eq ! ( ctlz( 1u128 ) , 127 ) ; assert_eq ! ( ctlz( 1i128 ) , 127 ) ;
63
70
64
71
assert_eq ! ( ctlz( 10u8 ) , 4 ) ; assert_eq ! ( ctlz( 10i8 ) , 4 ) ;
65
72
assert_eq ! ( ctlz( 10u16 ) , 12 ) ; assert_eq ! ( ctlz( 10i16 ) , 12 ) ;
66
73
assert_eq ! ( ctlz( 10u32 ) , 28 ) ; assert_eq ! ( ctlz( 10i32 ) , 28 ) ;
67
74
assert_eq ! ( ctlz( 10u64 ) , 60 ) ; assert_eq ! ( ctlz( 10i64 ) , 60 ) ;
75
+ assert_eq ! ( ctlz( 10u128 ) , 124 ) ; assert_eq ! ( ctlz( 10i128 ) , 124 ) ;
68
76
69
77
assert_eq ! ( ctlz( 100u8 ) , 1 ) ; assert_eq ! ( ctlz( 100i8 ) , 1 ) ;
70
78
assert_eq ! ( ctlz( 100u16 ) , 9 ) ; assert_eq ! ( ctlz( 100i16 ) , 9 ) ;
71
79
assert_eq ! ( ctlz( 100u32 ) , 25 ) ; assert_eq ! ( ctlz( 100i32 ) , 25 ) ;
72
80
assert_eq ! ( ctlz( 100u64 ) , 57 ) ; assert_eq ! ( ctlz( 100i64 ) , 57 ) ;
81
+ assert_eq ! ( ctlz( 100u128 ) , 121 ) ; assert_eq ! ( ctlz( 100i128 ) , 121 ) ;
73
82
74
83
assert_eq ! ( ctlz_nonzero( 1u8 ) , 7 ) ; assert_eq ! ( ctlz_nonzero( 1i8 ) , 7 ) ;
75
84
assert_eq ! ( ctlz_nonzero( 1u16 ) , 15 ) ; assert_eq ! ( ctlz_nonzero( 1i16 ) , 15 ) ;
76
85
assert_eq ! ( ctlz_nonzero( 1u32 ) , 31 ) ; assert_eq ! ( ctlz_nonzero( 1i32 ) , 31 ) ;
77
86
assert_eq ! ( ctlz_nonzero( 1u64 ) , 63 ) ; assert_eq ! ( ctlz_nonzero( 1i64 ) , 63 ) ;
87
+ assert_eq ! ( ctlz_nonzero( 1u128 ) , 127 ) ; assert_eq ! ( ctlz_nonzero( 1i128 ) , 127 ) ;
78
88
79
89
assert_eq ! ( ctlz_nonzero( 10u8 ) , 4 ) ; assert_eq ! ( ctlz_nonzero( 10i8 ) , 4 ) ;
80
90
assert_eq ! ( ctlz_nonzero( 10u16 ) , 12 ) ; assert_eq ! ( ctlz_nonzero( 10i16 ) , 12 ) ;
81
91
assert_eq ! ( ctlz_nonzero( 10u32 ) , 28 ) ; assert_eq ! ( ctlz_nonzero( 10i32 ) , 28 ) ;
82
92
assert_eq ! ( ctlz_nonzero( 10u64 ) , 60 ) ; assert_eq ! ( ctlz_nonzero( 10i64 ) , 60 ) ;
93
+ assert_eq ! ( ctlz_nonzero( 10u128 ) , 124 ) ; assert_eq ! ( ctlz_nonzero( 10i128 ) , 124 ) ;
83
94
84
95
assert_eq ! ( ctlz_nonzero( 100u8 ) , 1 ) ; assert_eq ! ( ctlz_nonzero( 100i8 ) , 1 ) ;
85
96
assert_eq ! ( ctlz_nonzero( 100u16 ) , 9 ) ; assert_eq ! ( ctlz_nonzero( 100i16 ) , 9 ) ;
86
97
assert_eq ! ( ctlz_nonzero( 100u32 ) , 25 ) ; assert_eq ! ( ctlz_nonzero( 100i32 ) , 25 ) ;
87
98
assert_eq ! ( ctlz_nonzero( 100u64 ) , 57 ) ; assert_eq ! ( ctlz_nonzero( 100i64 ) , 57 ) ;
99
+ assert_eq ! ( ctlz_nonzero( 100u128 ) , 121 ) ; assert_eq ! ( ctlz_nonzero( 100i128 ) , 121 ) ;
88
100
89
101
assert_eq ! ( cttz( -1i8 as u8 ) , 0 ) ; assert_eq ! ( cttz( -1i8 ) , 0 ) ;
90
102
assert_eq ! ( cttz( -1i16 as u16 ) , 0 ) ; assert_eq ! ( cttz( -1i16 ) , 0 ) ;
91
103
assert_eq ! ( cttz( -1i32 as u32 ) , 0 ) ; assert_eq ! ( cttz( -1i32 ) , 0 ) ;
92
104
assert_eq ! ( cttz( -1i64 as u64 ) , 0 ) ; assert_eq ! ( cttz( -1i64 ) , 0 ) ;
105
+ assert_eq ! ( cttz( -1i128 as u128 ) , 0 ) ; assert_eq ! ( cttz( -1i128 ) , 0 ) ;
93
106
94
107
assert_eq ! ( cttz( 0u8 ) , 8 ) ; assert_eq ! ( cttz( 0i8 ) , 8 ) ;
95
108
assert_eq ! ( cttz( 0u16 ) , 16 ) ; assert_eq ! ( cttz( 0i16 ) , 16 ) ;
96
109
assert_eq ! ( cttz( 0u32 ) , 32 ) ; assert_eq ! ( cttz( 0i32 ) , 32 ) ;
97
110
assert_eq ! ( cttz( 0u64 ) , 64 ) ; assert_eq ! ( cttz( 0i64 ) , 64 ) ;
111
+ assert_eq ! ( cttz( 0u128 ) , 128 ) ; assert_eq ! ( cttz( 0i128 ) , 128 ) ;
98
112
99
113
assert_eq ! ( cttz( 1u8 ) , 0 ) ; assert_eq ! ( cttz( 1i8 ) , 0 ) ;
100
114
assert_eq ! ( cttz( 1u16 ) , 0 ) ; assert_eq ! ( cttz( 1i16 ) , 0 ) ;
101
115
assert_eq ! ( cttz( 1u32 ) , 0 ) ; assert_eq ! ( cttz( 1i32 ) , 0 ) ;
102
116
assert_eq ! ( cttz( 1u64 ) , 0 ) ; assert_eq ! ( cttz( 1i64 ) , 0 ) ;
117
+ assert_eq ! ( cttz( 1u128 ) , 0 ) ; assert_eq ! ( cttz( 1i128 ) , 0 ) ;
103
118
104
119
assert_eq ! ( cttz( 10u8 ) , 1 ) ; assert_eq ! ( cttz( 10i8 ) , 1 ) ;
105
120
assert_eq ! ( cttz( 10u16 ) , 1 ) ; assert_eq ! ( cttz( 10i16 ) , 1 ) ;
106
121
assert_eq ! ( cttz( 10u32 ) , 1 ) ; assert_eq ! ( cttz( 10i32 ) , 1 ) ;
107
122
assert_eq ! ( cttz( 10u64 ) , 1 ) ; assert_eq ! ( cttz( 10i64 ) , 1 ) ;
123
+ assert_eq ! ( cttz( 10u128 ) , 1 ) ; assert_eq ! ( cttz( 10i128 ) , 1 ) ;
108
124
109
125
assert_eq ! ( cttz( 100u8 ) , 2 ) ; assert_eq ! ( cttz( 100i8 ) , 2 ) ;
110
126
assert_eq ! ( cttz( 100u16 ) , 2 ) ; assert_eq ! ( cttz( 100i16 ) , 2 ) ;
111
127
assert_eq ! ( cttz( 100u32 ) , 2 ) ; assert_eq ! ( cttz( 100i32 ) , 2 ) ;
112
128
assert_eq ! ( cttz( 100u64 ) , 2 ) ; assert_eq ! ( cttz( 100i64 ) , 2 ) ;
129
+ assert_eq ! ( cttz( 100u128 ) , 2 ) ; assert_eq ! ( cttz( 100i128 ) , 2 ) ;
113
130
114
131
assert_eq ! ( cttz_nonzero( -1i8 as u8 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i8 ) , 0 ) ;
115
132
assert_eq ! ( cttz_nonzero( -1i16 as u16 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i16 ) , 0 ) ;
116
133
assert_eq ! ( cttz_nonzero( -1i32 as u32 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i32 ) , 0 ) ;
117
134
assert_eq ! ( cttz_nonzero( -1i64 as u64 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i64 ) , 0 ) ;
135
+ assert_eq ! ( cttz_nonzero( -1i128 as u128 ) , 0 ) ; assert_eq ! ( cttz_nonzero( -1i128 ) , 0 ) ;
118
136
119
137
assert_eq ! ( cttz_nonzero( 1u8 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i8 ) , 0 ) ;
120
138
assert_eq ! ( cttz_nonzero( 1u16 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i16 ) , 0 ) ;
121
139
assert_eq ! ( cttz_nonzero( 1u32 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i32 ) , 0 ) ;
122
140
assert_eq ! ( cttz_nonzero( 1u64 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i64 ) , 0 ) ;
141
+ assert_eq ! ( cttz_nonzero( 1u128 ) , 0 ) ; assert_eq ! ( cttz_nonzero( 1i128 ) , 0 ) ;
123
142
124
143
assert_eq ! ( cttz_nonzero( 10u8 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i8 ) , 1 ) ;
125
144
assert_eq ! ( cttz_nonzero( 10u16 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i16 ) , 1 ) ;
126
145
assert_eq ! ( cttz_nonzero( 10u32 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i32 ) , 1 ) ;
127
146
assert_eq ! ( cttz_nonzero( 10u64 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i64 ) , 1 ) ;
147
+ assert_eq ! ( cttz_nonzero( 10u128 ) , 1 ) ; assert_eq ! ( cttz_nonzero( 10i128 ) , 1 ) ;
128
148
129
149
assert_eq ! ( cttz_nonzero( 100u8 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i8 ) , 2 ) ;
130
150
assert_eq ! ( cttz_nonzero( 100u16 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i16 ) , 2 ) ;
131
151
assert_eq ! ( cttz_nonzero( 100u32 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i32 ) , 2 ) ;
132
152
assert_eq ! ( cttz_nonzero( 100u64 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i64 ) , 2 ) ;
153
+ assert_eq ! ( cttz_nonzero( 100u128 ) , 2 ) ; assert_eq ! ( cttz_nonzero( 100i128 ) , 2 ) ;
133
154
134
155
assert_eq ! ( bswap( 0x0Au8 ) , 0x0A ) ; // no-op
135
156
assert_eq ! ( bswap( 0x0Ai8 ) , 0x0A ) ; // no-op
@@ -139,6 +160,8 @@ pub fn main() {
139
160
assert_eq ! ( bswap( 0x0ABBCC0Di32 ) , 0x0DCCBB0A ) ;
140
161
assert_eq ! ( bswap( 0x0122334455667708u64 ) , 0x0877665544332201 ) ;
141
162
assert_eq ! ( bswap( 0x0122334455667708i64 ) , 0x0877665544332201 ) ;
163
+ assert_eq ! ( bswap( 0x0122334455667708u128 ) , 0x08776655443322010000000000000000 ) ;
164
+ assert_eq ! ( bswap( 0x0122334455667708i128 ) , 0x08776655443322010000000000000000 ) ;
142
165
143
166
assert_eq ! ( bitreverse( 0x0Au8 ) , 0x50 ) ;
144
167
assert_eq ! ( bitreverse( 0x0Ai8 ) , 0x50 ) ;
@@ -148,5 +171,7 @@ pub fn main() {
148
171
assert_eq ! ( bitreverse( 0x0ABBCC0Ei32 ) , 0x7033DD50 ) ;
149
172
assert_eq ! ( bitreverse( 0x0122334455667708u64 ) , 0x10EE66AA22CC4480 ) ;
150
173
assert_eq ! ( bitreverse( 0x0122334455667708i64 ) , 0x10EE66AA22CC4480 ) ;
174
+ assert_eq ! ( bitreverse( 0x0122334455667708u128 ) , 0x10EE66AA22CC44800000000000000000 ) ;
175
+ assert_eq ! ( bitreverse( 0x0122334455667708i128 ) , 0x10EE66AA22CC44800000000000000000 ) ;
151
176
}
152
177
}
0 commit comments