⭐️ A friendly language for building type-safe, scalable systems!
at main 5.2 kB view raw
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}