11/// Write the tests for an integer type, given two unequal integers
22macro_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
74104mod 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
80110mod 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
86116mod 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
92122mod 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
98128mod 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
104134mod 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
110140mod 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
116146mod 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
122152mod 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
128158mod 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
134164mod slices {
0 commit comments