]>
Commit | Line | Data |
---|---|---|
74b04a01 XL |
1 | // run-pass |
2 | ||
74b04a01 XL |
3 | macro_rules! suite { |
4 | ($( | |
5 | $fn:ident -> $ty:ty { $( $label:ident : $expr:expr, $result:expr; )* } | |
6 | )*) => { $( | |
7 | fn $fn() { | |
8 | $( | |
9 | const $label: $ty = $expr; | |
10 | assert_eq!($label, $result); | |
11 | )* | |
12 | } | |
13 | )* } | |
14 | } | |
15 | ||
16 | suite!( | |
17 | checked -> Option<i8> { | |
18 | // `const_checked_int_methods` | |
19 | C1: 5i8.checked_add(2), Some(7); | |
20 | C2: 127i8.checked_add(2), None; | |
21 | ||
22 | C3: 5i8.checked_sub(2), Some(3); | |
23 | C4: (-127i8).checked_sub(2), None; | |
24 | ||
25 | C5: 1i8.checked_mul(3), Some(3); | |
26 | C6: 5i8.checked_mul(122), None; | |
27 | C7: (-127i8).checked_mul(-99), None; | |
28 | ||
f035d41b XL |
29 | C8: (i8::MIN + 1).checked_div(-1), Some(127); |
30 | C9: i8::MIN.checked_div(-1), None; | |
74b04a01 XL |
31 | C10: 1i8.checked_div(0), None; |
32 | ||
33 | C11: 5i8.checked_rem(2), Some(1); | |
34 | C12: 5i8.checked_rem(0), None; | |
35 | C13: i8::MIN.checked_rem(-1), None; | |
36 | ||
37 | C14: 5i8.checked_neg(), Some(-5); | |
38 | C15: i8::MIN.checked_neg(), None; | |
39 | ||
40 | C16: 0x1i8.checked_shl(4), Some(0x10); | |
41 | C17: 0x1i8.checked_shl(129), None; | |
42 | ||
43 | C18: 0x10i8.checked_shr(4), Some(0x1); | |
44 | C19: 0x10i8.checked_shr(128), None; | |
45 | ||
46 | ||
47 | C20: (-5i8).checked_abs(), Some(5); | |
48 | C21: i8::MIN.checked_abs(), None; | |
49 | ||
50 | // `const_euclidean_int_methods` | |
f035d41b XL |
51 | C22: (i8::MIN + 1).checked_div_euclid(-1), Some(127); |
52 | C23: i8::MIN.checked_div_euclid(-1), None; | |
74b04a01 XL |
53 | C24: (1i8).checked_div_euclid(0), None; |
54 | ||
55 | C25: 5i8.checked_rem_euclid(2), Some(1); | |
56 | C26: 5i8.checked_rem_euclid(0), None; | |
57 | C27: i8::MIN.checked_rem_euclid(-1), None; | |
58 | } | |
59 | checked_i128 -> Option<i128> { | |
60 | CHK_ADD_I128: i128::MAX.checked_add(1), None; | |
61 | CHK_MUL_I128: i128::MIN.checked_mul(-1), None; | |
62 | } | |
63 | ||
64 | saturating_and_wrapping -> i8 { | |
65 | // `const_saturating_int_methods` | |
66 | C28: 100i8.saturating_add(1), 101; | |
f035d41b XL |
67 | C29: i8::MAX.saturating_add(100), i8::MAX; |
68 | C30: i8::MIN.saturating_add(-1), i8::MIN; | |
74b04a01 XL |
69 | |
70 | C31: 100i8.saturating_sub(127), -27; | |
f035d41b XL |
71 | C32: i8::MIN.saturating_sub(100), i8::MIN; |
72 | C33: i8::MAX.saturating_sub(-1), i8::MAX; | |
74b04a01 XL |
73 | |
74 | C34: 10i8.saturating_mul(12), 120; | |
75 | C35: i8::MAX.saturating_mul(10), i8::MAX; | |
76 | C36: i8::MIN.saturating_mul(10), i8::MIN; | |
77 | ||
78 | C37: 100i8.saturating_neg(), -100; | |
79 | C38: (-100i8).saturating_neg(), 100; | |
f035d41b XL |
80 | C39: i8::MIN.saturating_neg(), i8::MAX; |
81 | C40: i8::MAX.saturating_neg(), i8::MIN + 1; | |
74b04a01 XL |
82 | |
83 | C57: 100i8.saturating_abs(), 100; | |
84 | C58: (-100i8).saturating_abs(), 100; | |
f035d41b XL |
85 | C59: i8::MIN.saturating_abs(), i8::MAX; |
86 | C60: (i8::MIN + 1).saturating_abs(), i8::MAX; | |
74b04a01 XL |
87 | |
88 | // `const_wrapping_int_methods` | |
89 | C41: 100i8.wrapping_div(10), 10; | |
90 | C42: (-128i8).wrapping_div(-1), -128; | |
91 | ||
92 | C43: 100i8.wrapping_rem(10), 0; | |
93 | C44: (-128i8).wrapping_rem(-1), 0; | |
94 | ||
95 | // `const_euclidean_int_methods` | |
96 | C45: 100i8.wrapping_div_euclid(10), 10; | |
97 | C46: (-128i8).wrapping_div_euclid(-1), -128; | |
98 | ||
99 | C47: 100i8.wrapping_rem_euclid(10), 0; | |
100 | C48: (-128i8).wrapping_rem_euclid(-1), 0; | |
101 | } | |
102 | saturating_and_wrapping_i128 -> i128 { | |
103 | SAT_ADD_I128: i128::MAX.saturating_add(1), i128::MAX; | |
104 | SAT_MUL_I128: i128::MAX.saturating_mul(2), i128::MAX; | |
105 | ||
106 | WRP_ADD_I128: i128::MAX.wrapping_add(1), i128::MIN; | |
107 | WRP_MUL_I128: i128::MAX.wrapping_mul(3), i128::MAX-2; | |
108 | } | |
109 | ||
110 | overflowing -> (i8, bool) { | |
111 | // `const_overflowing_int_methods` | |
112 | C49: 5i8.overflowing_div(2), (2, false); | |
113 | C50: i8::MIN.overflowing_div(-1), (i8::MIN, true); | |
114 | ||
115 | C51: 5i8.overflowing_rem(2), (1, false); | |
116 | C52: i8::MIN.overflowing_rem(-1), (0, true); | |
117 | ||
118 | // `const_euclidean_int_methods` | |
119 | C53: 5i8.overflowing_div_euclid(2), (2, false); | |
120 | C54: i8::MIN.overflowing_div_euclid(-1), (i8::MIN, true); | |
121 | ||
122 | C55: 5i8.overflowing_rem_euclid(2), (1, false); | |
123 | C56: i8::MIN.overflowing_rem_euclid(-1), (0, true); | |
124 | } | |
125 | overflowing_i128 -> (i128, bool) { | |
126 | OFL_ADD_I128: i128::MAX.overflowing_add(1), (i128::MIN, true); | |
127 | OFL_MUL_I128: i128::MAX.overflowing_mul(3), (i128::MAX-2, true); | |
128 | } | |
129 | ); | |
130 | ||
131 | fn main() { | |
132 | checked(); | |
133 | checked_i128(); | |
134 | saturating_and_wrapping(); | |
135 | saturating_and_wrapping_i128(); | |
136 | overflowing(); | |
137 | overflowing_i128(); | |
138 | } |