1/*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16function main(): int
17{
18  let a_int : int = 10;
19  let a_long : long = 1234;
20
21  a_int += a_long;
22  assert a_int == 1244;
23
24  a_int = 10 as int;
25  a_long = 1234 as long;
26  a_int -= a_long;
27  assert a_int == -1224;
28
29  a_int = 10 as int;
30  a_long = 1234 as long;
31  a_int *= a_long;
32  assert a_int == 12340;
33
34  a_int = 2000 as int;
35  a_long = 1234 as long;
36  a_int /= a_long;
37  assert a_int == 1;
38
39  a_int = 2000 as int;
40  a_long = 1234 as long;
41  a_int %= a_long;
42  assert a_int == 766;
43
44  a_int = 2 as int;
45  a_long = 1 as long;
46  a_int ^= a_long;
47  assert a_int == 3;
48
49  a_int = 2 as int;
50  a_long = 1 as long;
51  a_int |= a_long;
52  assert a_int == 3;
53
54  a_int = 2 as int;
55  a_long = 1 as long;
56  a_int &= a_long;
57  assert a_int == 0;
58
59  a_int = 512 as int;
60  a_long = 1 as long;
61  a_int <<= a_long;
62  assert a_int == 1024;
63
64  a_int = 512 as int;
65  a_long = 1 as long;
66  a_int >>= a_long;
67  assert a_int == 256;
68
69  a_int = 512 as int;
70  a_long = 1 as long;
71  a_int >>>= a_long;
72  assert a_int == 256;
73
74  //----------------------
75
76  a_int = 10 as int;
77  a_long = 20000000000 as long;
78  a_int += a_long;
79  assert a_int == -1474836470;
80
81  a_int = 10 as int;
82  a_long = 20000000000 as long;
83  a_int -= a_long;
84  assert a_int == 1474836490;
85
86  a_int = 10 as int;
87  a_long = 20000000000 as long;
88  a_int *= a_long;
89  assert a_int == -1863462912;
90
91  a_int = 2000 as int;
92  a_long = 20000000000 as long;
93  a_int /= a_long;
94  assert a_int == 0;
95
96  a_int = 2000 as int;
97  a_long = 20000000000 as long;
98  a_int %= a_long;
99  assert a_int == 2000;
100
101  a_int = 2 as int;
102  a_long = 20000000000 as long;
103  a_int ^= a_long;
104  assert a_int == -1474836478;
105
106  a_int = 2 as int;
107  a_long = 20000000000 as long;
108  a_int |= a_long;
109  assert a_int == -1474836478;
110
111  a_int = 2 as int;
112  a_long = 20000000000 as long;
113  a_int &= a_long;
114  assert a_int == 0;
115
116  a_int = 512 as int;
117  a_long = 20000000000 as long;
118  a_int <<= a_long;
119  assert a_int == 512;
120
121  a_int = 512 as int;
122  a_long = 20000000000 as long;
123  a_int >>= a_long;
124  assert a_int == 512;
125
126  a_int = 512 as int;
127  a_long = 20000000000 as long;
128  a_int >>>= a_long;
129  assert a_int == 512;
130
131  //----------------------
132
133  let a_Int = 10 as Int;
134  let a_Long = 20000000000 as Long;
135  a_Long += a_Int;
136  assert a_Long == 20000000010;
137
138  a_Int = 10 as Int;
139  a_Long = 20000000000 as Long;
140  a_Long -= a_Int;
141  assert a_Long == 19999999990;
142
143  a_Int = 10 as Int;
144  a_Long = 20000000000 as Long;
145  a_Long *= a_Int;
146  assert a_Long == 200000000000;
147
148  a_Int = 2000 as Int;
149  a_Long = 20000000000 as Long;
150  a_Long /= a_Int;
151  assert a_Long == 10000000;
152
153  a_Int = 2000 as Int;
154  a_Long = 20000000000 as Long;
155  a_Long %= a_Int;
156  assert a_Long == 0;
157
158  a_Int = 2 as Int;
159  a_Long = 20000000000 as Long;
160  a_Long ^= a_Int;
161  assert a_Long == 20000000002;
162
163  a_Int = 2 as Int;
164  a_Long = 20000000000 as Long;
165  a_Long |= a_Int;
166  assert a_Long == 20000000002;
167
168  a_Int = 2 as Int;
169  a_Long = 20000000000 as Long;
170  a_Long &= a_Int;
171  assert a_Long == 0;
172
173  a_Int = 512 as Int;
174  a_Long = 20000000000 as Long;
175  a_Long <<= a_Int;
176  assert a_Long == 20000000000;
177
178  a_Int = 512 as Int;
179  a_Long = 20000000000 as Long;
180  a_Long >>= a_Int;
181  assert a_Long == 20000000000;
182
183  a_Int = 512 as Int;
184  a_Long = 20000000000 as Long;
185  a_Long >>>= a_Int;
186  assert a_Long == 20000000000;
187
188  return 0;
189}
190