Skip to content

Commit 040d987

Browse files
Fix test
1 parent 09160d1 commit 040d987

File tree

1 file changed

+124
-160
lines changed

1 file changed

+124
-160
lines changed
+124-160
Original file line numberDiff line numberDiff line change
@@ -1,166 +1,130 @@
11
// run-pass
22

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);)+
3+
#![feature(saturating_neg)]
4+
#![feature(const_checked_int_methods)]
5+
#![feature(const_euclidean_int_methods)]
6+
#![feature(const_overflowing_int_methods)]
7+
#![feature(const_saturating_int_methods)]
8+
#![feature(const_wrapping_int_methods)]
9+
10+
use std::i8;
11+
12+
macro_rules! suite {
13+
($(
14+
$fn:ident -> $ty:ty { $( $label:ident : $expr:expr, $result:expr; )* }
15+
)*) => { $(
16+
fn $fn() {
17+
$(
18+
const $label: $ty = $expr;
19+
assert_eq!($label, $result);
20+
)*
1521
}
16-
}
22+
)* }
1723
}
1824

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);
25+
suite!(
26+
checked -> Option<i8> {
27+
// `const_checked_int_methods`
28+
C1: 5i8.checked_add(2), Some(7);
29+
C2: 127i8.checked_add(2), None;
30+
31+
C3: 5i8.checked_sub(2), Some(3);
32+
C4: (-127i8).checked_sub(2), None;
33+
34+
C5: 1i8.checked_mul(3), Some(3);
35+
C6: 5i8.checked_mul(122), None;
36+
C7: (-127i8).checked_mul(-99), None;
37+
38+
C8: (i8::min_value() + 1).checked_div(-1), Some(127);
39+
C9: i8::min_value().checked_div(-1), None;
40+
C10: 1i8.checked_div(0), None;
41+
42+
C11: 5i8.checked_rem(2), Some(1);
43+
C12: 5i8.checked_rem(0), None;
44+
C13: i8::MIN.checked_rem(-1), None;
45+
46+
C14: 5i8.checked_neg(), Some(-5);
47+
C15: i8::MIN.checked_neg(), None;
48+
49+
C16: 0x1i8.checked_shl(4), Some(0x10);
50+
C17: 0x1i8.checked_shl(129), None;
51+
52+
C18: 0x10i8.checked_shr(4), Some(0x1);
53+
C19: 0x10i8.checked_shr(128), None;
54+
55+
56+
C20: (-5i8).checked_abs(), Some(5);
57+
C21: i8::MIN.checked_abs(), None;
58+
59+
// `const_euclidean_int_methods`
60+
C22: (i8::min_value() + 1).checked_div_euclid(-1), Some(127);
61+
C23: i8::min_value().checked_div_euclid(-1), None;
62+
C24: (1i8).checked_div_euclid(0), None;
63+
64+
C25: 5i8.checked_rem_euclid(2), Some(1);
65+
C26: 5i8.checked_rem_euclid(0), None;
66+
C27: i8::MIN.checked_rem_euclid(-1), None;
67+
}
68+
69+
saturating_and_wrapping -> i8 {
70+
// `const_saturating_int_methods`
71+
C28: 100i8.saturating_add(1), 101;
72+
C29: i8::max_value().saturating_add(100), i8::max_value();
73+
C30: i8::min_value().saturating_add(-1), i8::min_value();
74+
75+
C31: 100i8.saturating_sub(127), -27;
76+
C32: i8::min_value().saturating_sub(100), i8::min_value();
77+
C33: i8::max_value().saturating_sub(-1), i8::max_value();
78+
79+
C34: 10i8.saturating_mul(12), 120;
80+
C35: i8::MAX.saturating_mul(10), i8::MAX;
81+
C36: i8::MIN.saturating_mul(10), i8::MIN;
82+
83+
C37: 100i8.saturating_neg(), -100;
84+
C38: (-100i8).saturating_neg(), 100;
85+
C39: i8::min_value().saturating_neg(), i8::max_value();
86+
C40: i8::max_value().saturating_neg(), i8::min_value() + 1;
87+
88+
C57: 100i8.saturating_abs(), 100;
89+
C58: (-100i8).saturating_abs(), 100;
90+
C59: i8::min_value().saturating_abs(), i8::max_value();
91+
C60: (i8::min_value() + 1).saturating_abs(), i8::max_value();
92+
93+
// `const_wrapping_int_methods`
94+
C41: 100i8.wrapping_div(10), 10;
95+
C42: (-128i8).wrapping_div(-1), -128;
96+
97+
C43: 100i8.wrapping_rem(10), 0;
98+
C44: (-128i8).wrapping_rem(-1), 0;
99+
100+
// `const_euclidean_int_methods`
101+
C45: 100i8.wrapping_div_euclid(10), 10;
102+
C46: (-128i8).wrapping_div_euclid(-1), -128;
103+
104+
C47: 100i8.wrapping_rem_euclid(10), 0;
105+
C48: (-128i8).wrapping_rem_euclid(-1), 0;
106+
}
107+
108+
overflowing -> (i8, bool) {
109+
// `const_overflowing_int_methods`
110+
C49: 5i8.overflowing_div(2), (2, false);
111+
C50: i8::MIN.overflowing_div(-1), (i8::MIN, true);
112+
113+
C51: 5i8.overflowing_rem(2), (1, false);
114+
C52: i8::MIN.overflowing_rem(-1), (0, true);
115+
116+
// `const_euclidean_int_methods`
117+
C53: 5i8.overflowing_div_euclid(2), (2, false);
118+
C54: i8::MIN.overflowing_div_euclid(-1), (i8::MIN, true);
119+
120+
C55: 5i8.overflowing_rem_euclid(2), (1, false);
121+
C56: i8::MIN.overflowing_rem_euclid(-1), (0, true);
122+
123+
}
124+
);
125+
126+
fn main() {
127+
checked();
128+
saturating_and_wrapping();
129+
overflowing();
166130
}

0 commit comments

Comments
 (0)