]> git.proxmox.com Git - rustc.git/blame - src/test/ui/consts/const-int-arithmetic.rs
New upstream version 1.52.0~beta.3+dfsg1
[rustc.git] / src / test / ui / consts / const-int-arithmetic.rs
CommitLineData
74b04a01
XL
1// run-pass
2
74b04a01
XL
3macro_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
16suite!(
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
131fn main() {
132 checked();
133 checked_i128();
134 saturating_and_wrapping();
135 saturating_and_wrapping_i128();
136 overflowing();
137 overflowing_i128();
138}