Skip to content

Commit 3e9fd80

Browse files
Add tests for newly const arithmetic fns
Co-Authored-By: 9999years <[email protected]>
1 parent dda015a commit 3e9fd80

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed
+166
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
// run-pass
2+
3+
#![feature(const_int_checked)]
4+
#![feature(const_int_euclidean)]
5+
#![feature(const_int_overflowing)]
6+
#![feature(const_int_saturating)]
7+
#![feature(const_int_wrapping)]
8+
9+
macro_rules! assert_same_const {
10+
($(const $ident:ident: $ty:ty = $exp:expr;)+) => {
11+
$(const $ident: $ty = $exp;)+
12+
13+
pub fn main() {
14+
$(assert_eq!($exp, $ident);)+
15+
}
16+
}
17+
}
18+
19+
assert_same_const! {
20+
// `const_int_checked`
21+
const CHECKED_ADD_I32_A: Option<i32> = 5i32.checked_add(2);
22+
const CHECKED_ADD_I8_A: Option<i8> = 127i8.checked_add(2);
23+
const CHECKED_ADD_U8_A: Option<u8> = 255u8.checked_add(2);
24+
25+
const CHECKED_SUB_I32_A: Option<i32> = 5i32.checked_sub(2);
26+
const CHECKED_SUB_I8_A: Option<i8> = (-127 as i8).checked_sub(2);
27+
const CHECKED_SUB_U8_A: Option<u8> = 1u8.checked_sub(2);
28+
29+
const CHECKED_MUL_I32_A: Option<i32> = 5i32.checked_mul(7777);
30+
const CHECKED_MUL_I8_A: Option<i8> = (-127 as i8).checked_mul(-99);
31+
const CHECKED_MUL_U8_A: Option<u8> = 1u8.checked_mul(3);
32+
33+
const CHECKED_DIV_I32_A: Option<i32> = 5i32.checked_div(7777);
34+
const CHECKED_DIV_I8_A: Option<i8> = (-127 as i8).checked_div(-99);
35+
const CHECKED_DIV_U8_A: Option<u8> = 1u8.checked_div(3);
36+
37+
const CHECKED_REM_I32_A: Option<i32> = 5i32.checked_rem(7777);
38+
const CHECKED_REM_I8_A: Option<i8> = (-127 as i8).checked_rem(-99);
39+
const CHECKED_REM_U8_A: Option<u8> = 1u8.checked_rem(3);
40+
const CHECKED_REM_U8_B: Option<u8> = 1u8.checked_rem(0);
41+
42+
const CHECKED_NEG_I32_A: Option<i32> = 5i32.checked_neg();
43+
const CHECKED_NEG_I8_A: Option<i8> = (-127 as i8).checked_neg();
44+
const CHECKED_NEG_U8_A: Option<u8> = 1u8.checked_neg();
45+
const CHECKED_NEG_U8_B: Option<u8> = u8::min_value().checked_neg();
46+
47+
const CHECKED_SHL_I32_A: Option<i32> = 5i32.checked_shl(77777);
48+
const CHECKED_SHL_I8_A: Option<i8> = (-127 as i8).checked_shl(2);
49+
const CHECKED_SHL_U8_A: Option<u8> = 1u8.checked_shl(8);
50+
const CHECKED_SHL_U8_B: Option<u8> = 1u8.checked_shl(0);
51+
52+
const CHECKED_SHR_I32_A: Option<i32> = 5i32.checked_shr(77777);
53+
const CHECKED_SHR_I8_A: Option<i8> = (-127 as i8).checked_shr(2);
54+
const CHECKED_SHR_U8_A: Option<u8> = 1u8.checked_shr(8);
55+
const CHECKED_SHR_U8_B: Option<u8> = 1u8.checked_shr(0);
56+
57+
const CHECKED_ABS_I32_A: Option<i32> = 5i32.checked_abs();
58+
const CHECKED_ABS_I8_A: Option<i8> = (-127 as i8).checked_abs();
59+
const CHECKED_ABS_I8_B: Option<i8> = 1i8.checked_abs();
60+
const CHECKED_ABS_I8_C: Option<i8> = i8::min_value().checked_abs();
61+
62+
// `const_int_overflowing`
63+
const DIV_A: (i8, bool) = 8i8.overflowing_div(2);
64+
const DIV_B: (i8, bool) = 8i8.overflowing_div(3);
65+
const DIV_C: (i8, bool) = i8::min_value().overflowing_div(-1i8);
66+
const DIV_D: (u8, bool) = 8u8.overflowing_div(2);
67+
const DIV_E: (u8, bool) = 8u8.overflowing_div(3);
68+
69+
const REM_A: (i8, bool) = 8i8.overflowing_rem(2);
70+
const REM_B: (i8, bool) = 8i8.overflowing_rem(3);
71+
const REM_C: (i8, bool) = i8::min_value().overflowing_rem(-1i8);
72+
const REM_D: (u8, bool) = 8u8.overflowing_rem(2);
73+
const REM_E: (u8, bool) = 8u8.overflowing_rem(3);
74+
75+
// `const_int_saturating`
76+
const ADD_INT_U32_NO: u32 = (42 as u32).saturating_add(2);
77+
const ADD_INT_U32: u32 = u32::max_value().saturating_add(1);
78+
const ADD_INT_U128: u128 = u128::max_value().saturating_add(1);
79+
const ADD_INT_I128: i128 = i128::max_value().saturating_add(1);
80+
const ADD_INT_I128_NEG: i128 = i128::min_value().saturating_add(-1);
81+
82+
const SUB_INT_U32_NO: u32 = (42 as u32).saturating_sub(2);
83+
const SUB_INT_U32: u32 = (1 as u32).saturating_sub(2);
84+
const SUB_INT_I32_NO: i32 = (-42 as i32).saturating_sub(2);
85+
const SUB_INT_I32_NEG: i32 = i32::min_value().saturating_sub(1);
86+
const SUB_INT_I32_POS: i32 = i32::max_value().saturating_sub(-1);
87+
const SUB_INT_U128: u128 = (0 as u128).saturating_sub(1);
88+
const SUB_INT_I128_NEG: i128 = i128::min_value().saturating_sub(1);
89+
const SUB_INT_I128_POS: i128 = i128::max_value().saturating_sub(-1);
90+
91+
const MUL_INT_U32_NO: u32 = (42 as u32).saturating_mul(2);
92+
const MUL_INT_U32: u32 = (1 as u32).saturating_mul(2);
93+
const MUL_INT_I32_NO: i32 = (-42 as i32).saturating_mul(2);
94+
const MUL_INT_I32_NEG: i32 = i32::min_value().saturating_mul(1);
95+
const MUL_INT_I32_POS: i32 = i32::max_value().saturating_mul(2);
96+
const MUL_INT_U128: u128 = (0 as u128).saturating_mul(1);
97+
const MUL_INT_I128_NEG: i128 = i128::min_value().saturating_mul(2);
98+
const MUL_INT_I128_POS: i128 = i128::max_value().saturating_mul(2);
99+
100+
const NEG_INT_I8: i8 = (-42i8).saturating_neg();
101+
const NEG_INT_I8_B: i8 = i8::min_value().saturating_neg();
102+
const NEG_INT_I32: i32 = i32::min_value().saturating_neg();
103+
const NEG_INT_I32_B: i32 = i32::max_value().saturating_neg();
104+
const NEG_INT_I128: i128 = i128::min_value().saturating_neg();
105+
const NEG_INT_I128_B: i128 = i128::max_value().saturating_neg();
106+
107+
const ABS_INT_I8_A: i8 = 4i8.saturating_abs();
108+
const ABS_INT_I8_B: i8 = -4i8.saturating_abs();
109+
const ABS_INT_I8_C: i8 = i8::min_value().saturating_abs();
110+
const ABS_INT_I32_A: i32 = 4i32.saturating_abs();
111+
const ABS_INT_I32_B: i32 = -4i32.saturating_abs();
112+
const ABS_INT_I32_C: i32 = i32::min_value().saturating_abs();
113+
const ABS_INT_I128_A: i128 = 4i128.saturating_abs();
114+
const ABS_INT_I128_B: i128 = -4i128.saturating_abs();
115+
const ABS_INT_I128_C: i128 = i128::min_value().saturating_abs();
116+
117+
// `const_int_euclidean`
118+
const CHECKED_DIV_I32_A: Option<i32> = 5i32.checked_div_euclid(7777);
119+
const CHECKED_DIV_I8_A: Option<i8> = (-127 as i8).checked_div_euclid(-99);
120+
const CHECKED_DIV_I8_B: Option<i8> = (-127 as i8).checked_div_euclid(1);
121+
const CHECKED_DIV_I8_C: Option<i8> = i8::min_value().checked_div_euclid(-1);
122+
const CHECKED_DIV_U8_A: Option<u8> = 1u8.checked_div_euclid(3);
123+
124+
const CHECKED_REM_I32_A: Option<i32> = 5i32.checked_rem_euclid(7777);
125+
const CHECKED_REM_I8_A: Option<i8> = (-127 as i8).checked_rem_euclid(-99);
126+
const CHECKED_REM_I8_B: Option<i8> = (-127 as i8).checked_rem_euclid(0);
127+
const CHECKED_REM_I8_C: Option<i8> = i8::min_value().checked_rem_euclid(-1);
128+
const CHECKED_REM_U8_A: Option<u8> = 1u8.checked_rem_euclid(3);
129+
130+
const WRAPPING_DIV_I32_A: i32 = 5i32.wrapping_div_euclid(7777);
131+
const WRAPPING_DIV_I8_A: i8 = (-127 as i8).wrapping_div_euclid(-99);
132+
const WRAPPING_DIV_I8_B: i8 = (-127 as i8).wrapping_div_euclid(1);
133+
const WRAPPING_DIV_I8_C: i8 = i8::min_value().wrapping_div_euclid(-1);
134+
const WRAPPING_DIV_U8_A: u8 = 1u8.wrapping_div_euclid(3);
135+
136+
const WRAPPING_REM_I32_A: i32 = 5i32.wrapping_rem_euclid(7777);
137+
const WRAPPING_REM_I8_A: i8 = (-127 as i8).wrapping_rem_euclid(-99);
138+
const WRAPPING_REM_I8_B: i8 = (-127 as i8).wrapping_rem_euclid(1);
139+
const WRAPPING_REM_I8_C: i8 = i8::min_value().wrapping_rem_euclid(-1);
140+
const WRAPPING_REM_U8_A: u8 = 1u8.wrapping_rem_euclid(3);
141+
142+
const OVERFLOWING_DIV_I32_A: (i32, bool) = 5i32.overflowing_div_euclid(7777);
143+
const OVERFLOWING_DIV_I8_A: (i8, bool) = (-127 as i8).overflowing_div_euclid(-99);
144+
const OVERFLOWING_DIV_I8_B: (i8, bool) = (-127 as i8).overflowing_div_euclid(1);
145+
const OVERFLOWING_DIV_I8_C: (i8, bool) = i8::min_value().overflowing_div_euclid(-1);
146+
const OVERFLOWING_DIV_U8_A: (u8, bool) = 1u8.overflowing_div_euclid(3);
147+
148+
const OVERFLOWING_REM_I32_A: (i32, bool) = 5i32.overflowing_rem_euclid(7777);
149+
const OVERFLOWING_REM_I8_A: (i8, bool) = (-127 as i8).overflowing_rem_euclid(-99);
150+
const OVERFLOWING_REM_I8_B: (i8, bool) = (-127 as i8).overflowing_rem_euclid(1);
151+
const OVERFLOWING_REM_I8_C: (i8, bool) = i8::min_value().overflowing_rem_euclid(-1);
152+
const OVERFLOWING_REM_U8_A: (u8, bool) = 1u8.overflowing_rem_euclid(3);
153+
154+
// `const_int_wrapping`
155+
const DIV_A: i8 = 8i8.wrapping_div(2);
156+
const DIV_B: i8 = 8i8.wrapping_div(3);
157+
const DIV_C: i8 = i8::min_value().wrapping_div(-1i8);
158+
const DIV_D: u8 = 8u8.wrapping_div(2);
159+
const DIV_E: u8 = 8u8.wrapping_div(3);
160+
161+
const REM_A: i8 = 8i8.wrapping_rem(2);
162+
const REM_B: i8 = 8i8.wrapping_rem(3);
163+
const REM_C: i8 = i8::min_value().wrapping_rem(-1i8);
164+
const REM_D: u8 = 8u8.wrapping_rem(2);
165+
const REM_E: u8 = 8u8.wrapping_rem(3);
166+
}

0 commit comments

Comments
 (0)