Skip to content

Commit d702363

Browse files
committed
add ctlz and cttz tests
1 parent 8f21e24 commit d702363

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

tests/run/int_intrinsics.rs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Compiler:
2+
//
3+
// Run-time:
4+
#![feature(core_intrinsics, intrinsics)]
5+
#![no_main]
6+
7+
use std::intrinsics::black_box;
8+
9+
#[rustc_intrinsic]
10+
pub const fn ctlz<T: Copy>(_x: T) -> u32;
11+
12+
#[rustc_intrinsic]
13+
pub const fn cttz<T: Copy>(_x: T) -> u32;
14+
15+
#[no_mangle]
16+
extern "C" fn main(_argc: i32, _argv: *const *const u8) -> i32 {
17+
macro_rules! check {
18+
($func_name:ident, $input:expr, $expected:expr, $res_ident:ident) => {{
19+
$res_ident += 1;
20+
if $func_name(black_box($input)) != $expected {
21+
return $res_ident;
22+
}
23+
}};
24+
}
25+
let mut res = 0;
26+
check!(ctlz, 0_u128, 128_u32, res);
27+
check!(ctlz, 1_u128, 127_u32, res);
28+
check!(ctlz, 0x4000_0000_0000_0000_0000_0000_0000_0000_u128, 1_u32, res);
29+
check!(ctlz, 0x8000_0000_0000_0000_0000_0000_0000_0000_u128, 0_u32, res);
30+
check!(cttz, 0_u128, 128_u32, res);
31+
check!(cttz, 1_u128, 0_u32, res);
32+
check!(cttz, 2_u128, 1_u32, res);
33+
check!(cttz, 0x8000_0000_0000_0000_0000_0000_0000_0000_u128, 127_u32, res);
34+
35+
check!(ctlz, 0_u64, 64_u32, res);
36+
check!(ctlz, 1_u64, 63_u32, res);
37+
check!(ctlz, 0x4000_0000_0000_0000_u64, 1_u32, res);
38+
check!(ctlz, 0x8000_0000_0000_0000_u64, 0_u32, res);
39+
check!(cttz, 0_u64, 64_u32, res);
40+
check!(cttz, 1_u64, 0_u32, res);
41+
check!(cttz, 2_u64, 1_u32, res);
42+
check!(cttz, 0x8000_0000_0000_0000_u64, 63_u32, res);
43+
44+
check!(ctlz, 0_u32, 32_u32, res);
45+
check!(ctlz, 1_u32, 31_u32, res);
46+
check!(ctlz, 0x4000_0000_u32, 1_u32, res);
47+
check!(ctlz, 0x8000_0000_u32, 0_u32, res);
48+
check!(cttz, 0_u32, 32_u32, res);
49+
check!(cttz, 1_u32, 0_u32, res);
50+
check!(cttz, 2_u32, 1_u32, res);
51+
check!(cttz, 0x8000_0000_u32, 31_u32, res);
52+
53+
check!(ctlz, 0_u16, 16_u32, res);
54+
check!(ctlz, 1_u16, 15_u32, res);
55+
check!(ctlz, 0x4000_u16, 1_u32, res);
56+
check!(ctlz, 0x8000_u16, 0_u32, res);
57+
check!(cttz, 0_u16, 16_u32, res);
58+
check!(cttz, 1_u16, 0_u32, res);
59+
check!(cttz, 2_u16, 1_u32, res);
60+
check!(cttz, 0x8000_u16, 15_u32, res);
61+
62+
check!(ctlz, 0_u8, 8_u32, res);
63+
check!(ctlz, 1_u8, 7_u32, res);
64+
check!(ctlz, 0x40_u8, 1_u32, res);
65+
check!(ctlz, 0x80_u8, 0_u32, res);
66+
check!(cttz, 0_u8, 8_u32, res);
67+
check!(cttz, 1_u8, 0_u32, res);
68+
check!(cttz, 2_u8, 1_u32, res);
69+
check!(cttz, 0x80_u8, 7_u32, res);
70+
71+
0
72+
}

0 commit comments

Comments
 (0)