1use crate::assert_js;
2
3#[test]
4fn int_literals() {
5 assert_js!(
6 r#"
7pub fn go() {
8 1
9 2
10 -3
11 4001
12 0b00001111
13 0o17
14 0xF
15 1_000
16}
17"#,
18 );
19}
20
21#[test]
22fn float_literals() {
23 assert_js!(
24 r#"
25pub fn go() {
26 1.5
27 2.0
28 -0.1
29 1.
30}
31"#,
32 );
33}
34
35#[test]
36fn float_scientific_literals() {
37 assert_js!(
38 r#"
39pub fn go() {
40 0.01e-1
41 0.01e-0
42 -10.01e-1
43 -10.01e-0
44 100.001e523
45 -100.001e-523
46 100.001e123_456_789
47 -100.001e-123_456_789
48}
49"#,
50 );
51}
52
53#[test]
54fn int_operators() {
55 assert_js!(
56 r#"
57pub fn go() {
58 1 + 1 // => 2
59 5 - 1 // => 4
60 5 / 2 // => 2
61 3 * 3 // => 9
62 5 % 2 // => 1
63 2 > 1 // => True
64 2 < 1 // => False
65 2 >= 1 // => True
66 2 <= 1 // => False
67}
68"#,
69 );
70}
71
72#[test]
73fn int_divide_complex_expr() {
74 assert_js!(
75 r#"
76pub fn go() {
77 case 1 >= 0 {
78 True -> 2
79 False -> 4
80 } / 2
81}
82"#,
83 );
84}
85
86#[test]
87fn int_mod_complex_expr() {
88 assert_js!(
89 r#"
90pub fn go() {
91 case 1 >= 0 {
92 True -> 2
93 False -> 4
94 } % 2
95}
96"#,
97 );
98}
99
100#[test]
101fn float_operators() {
102 assert_js!(
103 r#"
104pub fn go() {
105 1.0 +. 1.4 // => 2.4
106 5.0 -. 1.5 // => 3.5
107 5.0 /. 2.0 // => 2.5
108 3.0 *. 3.1 // => 9.3
109
110 2.0 >. 1.0 // => True
111 2.0 <. 1.0 // => False
112 2.0 >=. 1.0 // => True
113 2.0 <=. 1.0 // => False
114}
115"#,
116 );
117}
118
119#[test]
120fn float_divide_complex_expr() {
121 assert_js!(
122 r#"
123pub fn go() {
124 case 1.0 >=. 0.0 {
125 True -> 2.0
126 False -> 4.0
127 } /. 2.0
128}
129"#,
130 );
131}
132
133#[test]
134fn wide_float_div() {
135 assert_js!(
136 r#"
137pub fn go() {
138 111111111111111111111111111111. /. 22222222222222222222222222222222222.
139}
140"#,
141 );
142}
143
144#[test]
145fn int_patterns() {
146 assert_js!(
147 r#"
148pub fn go(x) {
149 let assert 4 = x
150}
151"#,
152 );
153}
154
155#[test]
156fn int_equality() {
157 assert_js!(
158 r#"
159pub fn go() {
160 1 != 2
161 1 == 2
162}
163"#,
164 );
165}
166
167#[test]
168fn int_equality1() {
169 assert_js!(
170 r#"
171pub fn go(y) {
172 let x = 1
173 x == y
174}
175"#,
176 );
177}
178
179#[test]
180fn float_equality() {
181 assert_js!(
182 r#"
183pub fn go() {
184 1.0 != 2.0
185 1.0 == 2.0
186}
187"#,
188 );
189}
190
191#[test]
192fn float_equality1() {
193 assert_js!(
194 r#"
195pub fn go(y) {
196 let x = 1.0
197 x == y
198}
199"#,
200 );
201}
202
203#[test]
204fn operator_precedence() {
205 assert_js!(
206 r#"
207pub fn go() {
208 2.4 *. { 3.5 +. 6.0 }
209}
210"#,
211 )
212}
213
214#[test]
215fn remainder() {
216 assert_js!(
217 r#"
218pub fn go() {
219 5 % 0 // => 0
220}
221"#,
222 );
223}
224
225#[test]
226fn int_negation() {
227 assert_js!(
228 r#"
229pub fn go() {
230 let a = 3
231 let b = -a
232}
233"#,
234 );
235}
236
237#[test]
238fn repeated_int_negation() {
239 assert_js!(
240 r#"
241pub fn go() {
242 let a = 3
243 let b = --a
244}
245"#
246 );
247}
248
249// https://github.com/gleam-lang/gleam/issues/2412
250#[test]
251fn preceeding_zeros_int() {
252 assert_js!(
253 r#"
254pub fn main() {
255 09_179
256}
257"#
258 );
259}
260
261// https://github.com/gleam-lang/gleam/issues/2412
262#[test]
263fn preceeding_zeros_float() {
264 assert_js!(
265 r#"
266pub fn main() {
267 09_179.1
268}
269"#
270 );
271}
272
273// https://github.com/gleam-lang/gleam/issues/2412
274#[test]
275fn preceeding_zeros_int_const() {
276 assert_js!(
277 r#"
278pub const x = 09_179
279"#
280 );
281}
282
283// https://github.com/gleam-lang/gleam/issues/2412
284#[test]
285fn preceeding_zeros_float_const() {
286 assert_js!(
287 r#"
288pub const x = 09_179.1
289"#
290 );
291}
292
293// https://github.com/gleam-lang/gleam/issues/2412
294#[test]
295fn preceeding_zeros_int_pattern() {
296 assert_js!(
297 r#"
298pub fn main(x) {
299 let assert 09_179 = x
300}
301"#
302 );
303}
304
305// https://github.com/gleam-lang/gleam/issues/2412
306#[test]
307fn preceeding_zeros_float_pattern() {
308 assert_js!(
309 r#"
310pub fn main(x) {
311 let assert 09_179.1 = x
312}
313"#
314 );
315}
316
317// https://github.com/gleam-lang/gleam/issues/4459
318#[test]
319fn underscore_after_hexadecimal_prefix() {
320 assert_js!(
321 "
322pub fn main() {
323 0x_12_34
324}
325"
326 );
327}
328
329// https://github.com/gleam-lang/gleam/issues/4459
330#[test]
331fn underscore_after_octal_prefix() {
332 assert_js!(
333 "
334pub fn main() {
335 0o_12_34
336}
337"
338 );
339}
340
341// https://github.com/gleam-lang/gleam/issues/4459
342#[test]
343fn underscore_after_binary_prefix() {
344 assert_js!(
345 "
346pub fn main() {
347 0b_10_01
348}
349"
350 );
351}
352
353// https://github.com/gleam-lang/gleam/issues/4481
354#[test]
355fn underscore_after_zero_after_hex_prefix() {
356 assert_js!(
357 "
358pub fn main() {
359 0x0_1_2_3
360}
361"
362 );
363}
364
365// https://github.com/gleam-lang/gleam/issues/4481
366#[test]
367fn underscore_after_zero_after_octal_prefix() {
368 assert_js!(
369 "
370pub fn main() {
371 0o0_1_2_3
372}
373"
374 );
375}
376
377// https://github.com/gleam-lang/gleam/issues/4481
378#[test]
379fn underscore_after_zero_after_binary_prefix() {
380 assert_js!(
381 "
382pub fn main() {
383 0b0_1_0_1
384}
385"
386 );
387}
388
389// https://github.com/gleam-lang/gleam/issues/4481
390#[test]
391fn underscore_after_zero() {
392 assert_js!(
393 "
394pub fn main() {
395 0_1_2_3
396}
397"
398 );
399}
400
401#[test]
402fn zero_after_underscore_after_hex_prefix() {
403 assert_js!(
404 "
405pub fn main() {
406 0x_0_1_2_3
407}
408"
409 );
410}
411
412#[test]
413fn zero_after_underscore_after_octal_prefix() {
414 assert_js!(
415 "
416pub fn main() {
417 0o_0_1_2_3
418}
419"
420 );
421}
422
423#[test]
424fn zero_after_underscore_after_binary_prefix() {
425 assert_js!(
426 "
427pub fn main() {
428 0b_0_1_0_1
429}
430"
431 );
432}