Skip to content

Commit 99d6472

Browse files
authored
cmov: expand tests (#1293)
Adds tests cases for 0 and `u*/i*::MAX` for all integer types
1 parent 2d5eac4 commit 99d6472

1 file changed

Lines changed: 47 additions & 17 deletions

File tree

cmov/tests/lib.rs

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/// Write the tests for an integer type, given two unequal integers
22
macro_rules! int_tests {
3-
($a:expr, $b:expr) => {
3+
($ty:path, $a:expr, $b:expr) => {
44
use cmov::{Cmov as _, CmovEq as _};
55

66
#[test]
77
fn cmovz_works() {
8-
let mut n = $a;
8+
let mut n: $ty = $a;
99

1010
for cond in 1..0xFF {
1111
n.cmovz(&$b, cond);
@@ -14,6 +14,9 @@ macro_rules! int_tests {
1414

1515
n.cmovz(&$b, 0);
1616
assert_eq!(n, $b);
17+
18+
n.cmovz(&<$ty>::MAX, 0);
19+
assert_eq!(n, <$ty>::MAX);
1720
}
1821

1922
#[test]
@@ -33,6 +36,12 @@ macro_rules! int_tests {
3336
fn cmoveq_works() {
3437
let mut o = 0u8;
3538

39+
// compare to zero (a and b should be non-zero)
40+
$a.cmoveq(&0, 1, &mut o);
41+
assert_eq!(o, 0);
42+
0.cmoveq(&$a, 1, &mut o);
43+
assert_eq!(o, 0);
44+
3645
for cond in 1..0xFFi64 {
3746
cond.cmoveq(&cond, cond as u8, &mut o);
3847
assert_eq!(o, cond as u8);
@@ -47,12 +56,26 @@ macro_rules! int_tests {
4756
// non-equal so we don't move
4857
$a.cmoveq(&$b, 55u8, &mut o);
4958
assert_eq!(o, 43u8);
59+
<$ty>::MAX.cmoveq(&$a, 55u8, &mut o);
60+
assert_eq!(o, 43u8);
61+
62+
// equal so we move
63+
<$ty>::MAX.cmoveq(&<$ty>::MAX, 55u8, &mut o);
64+
assert_eq!(o, 55u8);
5065
}
5166

5267
#[test]
5368
fn cmovne_works() {
5469
let mut o = 0u8;
5570

71+
// compare to zero (a and b should be non-zero)
72+
$a.cmovne(&0, 1, &mut o);
73+
assert_eq!(o, 1);
74+
o = 0;
75+
0.cmovne(&$a, 1, &mut o);
76+
assert_eq!(o, 1);
77+
o = 0;
78+
5679
for cond in 1..0xFFi64 {
5780
cond.cmovne(&0, cond as u8, &mut o);
5881
assert_eq!(o, cond as u8);
@@ -61,74 +84,81 @@ macro_rules! int_tests {
6184
}
6285

6386
// non-equal so we move
87+
o = 0;
6488
$a.cmovne(&$b, 55u8, &mut o);
6589
assert_eq!(o, 55u8);
6690

6791
// equal so we don't move
68-
$a.cmovne(&$a, 12u8, &mut o);
92+
$a.cmovne(&$a, 66u8, &mut o);
93+
assert_eq!(o, 55u8);
94+
<$ty>::MAX.cmovne(&<$ty>::MAX, 66u8, &mut o);
6995
assert_eq!(o, 55u8);
96+
97+
// non-equal so we move
98+
<$ty>::MAX.cmovne(&$a, 66u8, &mut o);
99+
assert_eq!(o, 66u8);
70100
}
71101
};
72102
}
73103

74104
mod i8 {
75-
pub const I8_A: i64 = 0x11;
76-
pub const I8_B: i64 = -0x22;
77-
int_tests!(I8_A, I8_B);
105+
pub const I8_A: i8 = 0x11;
106+
pub const I8_B: i8 = -0x22;
107+
int_tests!(i8, I8_A, I8_B);
78108
}
79109

80110
mod i16 {
81-
pub const I16_A: i64 = 0x1111;
82-
pub const I16_B: i64 = -0x2222;
83-
int_tests!(I16_A, I16_B);
111+
pub const I16_A: i16 = 0x1111;
112+
pub const I16_B: i16 = -0x2222;
113+
int_tests!(i16, I16_A, I16_B);
84114
}
85115

86116
mod i32 {
87117
pub const I32_A: i32 = 0x1111_1111;
88118
pub const I32_B: i32 = -0x2222_2222;
89-
int_tests!(I32_A, I32_B);
119+
int_tests!(i32, I32_A, I32_B);
90120
}
91121

92122
mod i64 {
93123
pub const I64_A: i64 = 0x1111_1111_1111_1111;
94124
pub const I64_B: i64 = -0x2222_2222_2222_2222;
95-
int_tests!(I64_A, I64_B);
125+
int_tests!(i64, I64_A, I64_B);
96126
}
97127

98128
mod i128 {
99129
pub const I128_A: i128 = 0x1111_1111_1111_1111_1111_1111_1111_1111;
100130
pub const I128_B: i128 = -0x2222_2222_2222_2222_2222_2222_2222_2222;
101-
int_tests!(I128_A, I128_B);
131+
int_tests!(i128, I128_A, I128_B);
102132
}
103133

104134
mod u8 {
105135
pub const U8_A: u8 = 0x11;
106136
pub const U8_B: u8 = 0x22;
107-
int_tests!(U8_A, U8_B);
137+
int_tests!(u8, U8_A, U8_B);
108138
}
109139

110140
mod u16 {
111141
pub const U16_A: u16 = 0x1111;
112142
pub const U16_B: u16 = 0x2222;
113-
int_tests!(U16_A, U16_B);
143+
int_tests!(u16, U16_A, U16_B);
114144
}
115145

116146
mod u32 {
117147
pub const U32_A: u32 = 0x1111_1111;
118148
pub const U32_B: u32 = 0x2222_2222;
119-
int_tests!(U32_A, U32_B);
149+
int_tests!(u32, U32_A, U32_B);
120150
}
121151

122152
mod u64 {
123153
pub const U64_A: u64 = 0x1111_1111_1111_1111;
124154
pub const U64_B: u64 = 0x2222_2222_2222_2222;
125-
int_tests!(U64_A, U64_B);
155+
int_tests!(u64, U64_A, U64_B);
126156
}
127157

128158
mod u128 {
129159
pub const U128_A: u128 = 0x1111_1111_1111_1111_2222_2222_2222_2222;
130160
pub const U128_B: u128 = 0x2222_2222_2222_2222_3333_3333_3333_3333;
131-
int_tests!(U128_A, U128_B);
161+
int_tests!(u128, U128_A, U128_B);
132162
}
133163

134164
mod slices {

0 commit comments

Comments
 (0)