Skip to content

Commit b657e1c

Browse files
phatedospencer
andauthored
chore(compiler)!: Require floats always have a digit on left & right of dot (#1703)
* chore(compiler)!: Require floats always have a digit on left & right of dot * chore(stdlib): Update floats that did not have digits on both sides * chore(compiler): Update test floats that did not have digit on both sides * Add error message for invalid float use * Also capture w and W for invalid floats * Update tests and add some for f & d suffix --------- Co-authored-by: Oscar Spencer <oscar@grain-lang.org>
1 parent 5f8a39f commit b657e1c

File tree

19 files changed

+171
-130
lines changed

19 files changed

+171
-130
lines changed

compiler/src/parsing/lexer.re

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ type error =
1616
| UnclosedDocComment(int)
1717
| IllegalUnicodeCodePoint(string)
1818
| IllegalByteStringUnicodeChar(string)
19-
| IllegalByteStringUnicodeEscape(string);
19+
| IllegalByteStringUnicodeEscape(string)
20+
| FloatWithoutLeadingZero(string);
2021

2122
exception Error(Location.t, error);
2223

@@ -46,6 +47,12 @@ let report_error = (ppf, err) =>
4647
"Byte strings may not contain unicode escapes: %S",
4748
cp,
4849
)
50+
| FloatWithoutLeadingZero(f) =>
51+
Format.fprintf(
52+
ppf,
53+
"Floats must contain a leading zero. Use 0%s instead.",
54+
f,
55+
)
4956
};
5057

5158
let () =
@@ -119,8 +126,7 @@ let unsigned_int = [%sedlex.regexp? dec_int | hex_int | oct_int | bin_int];
119126
let dec_float_exp = [%sedlex.regexp?
120127
('e' | 'E', Opt('+' | '-'), dec_digit, Star(dec_digit | '_'))
121128
];
122-
let dec_float_decimal = [%sedlex.regexp? ('.', Star(dec_digit | '_'))];
123-
let dec_float_decimal_explicit = [%sedlex.regexp?
129+
let dec_float_decimal = [%sedlex.regexp?
124130
('.', dec_digit, Star(dec_digit | '_'))
125131
];
126132
let dec_float_integral = [%sedlex.regexp?
@@ -130,12 +136,14 @@ let dec_float_alphabetic = [%sedlex.regexp? "Infinity" | "NaN"];
130136

131137
let dec_float = [%sedlex.regexp?
132138
(dec_float_integral, dec_float_decimal, Opt(dec_float_exp)) |
133-
(dec_float_decimal_explicit, Opt(dec_float_exp)) |
134139
(dec_float_integral, dec_float_exp) |
135140
dec_float_alphabetic
136141
];
137142

138143
let unsigned_float = [%sedlex.regexp? dec_float];
144+
let invalid_float = [%sedlex.regexp?
145+
(dec_float_decimal, Opt(dec_float_exp))
146+
];
139147

140148
let uident = [%sedlex.regexp?
141149
(Intersect(xid_start, lu), Star(xid_continue))
@@ -244,6 +252,13 @@ let rec token = lexbuf => {
244252
| (unsigned_float, 'd') => positioned(FLOAT64(sub_lexeme(lexbuf, 0, -1)))
245253
| unsigned_float =>
246254
positioned(NUMBER_FLOAT(Sedlexing.Utf8.lexeme(lexbuf)))
255+
| (invalid_float, Opt('f' | 'd' | 'w' | 'W')) =>
256+
raise(
257+
Error(
258+
lexbuf_loc(lexbuf),
259+
FloatWithoutLeadingZero(Sedlexing.Utf8.lexeme(lexbuf)),
260+
),
261+
)
247262
| (unsigned_int, 's') => positioned(INT8(sub_lexeme(lexbuf, 0, -1)))
248263
| (unsigned_int, 'S') => positioned(INT16(sub_lexeme(lexbuf, 0, -1)))
249264
| (unsigned_int, 'l') => positioned(INT32(sub_lexeme(lexbuf, 0, -1)))

compiler/test/stdlib/float32.test.gr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ from Float32 use *
55

66
// Constants Test
77
// smoke test:
8-
assert gt(infinity, 100000000.f)
8+
assert gt(infinity, 100000000.0f)
99
// test infinity-specific semantics:
1010
assert toNumber(infinity) == toNumber(infinity)
1111
assert toNumber(infinity) == toNumber(infinity) - 1

compiler/test/stdlib/float64.test.gr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ from Float64 use *
55

66
// Constants Tests
77
// smoke test:
8-
assert gt(infinity, 100000000.d)
8+
assert gt(infinity, 100000000.0d)
99
// test infinity-specific semantics:
1010
assert toNumber(infinity) == toNumber(infinity) - 1
1111
assert nan != nan

compiler/test/stdlib/marshal.test.gr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ assert roundtripOk(42l)
1414
assert roundtripOk(42L)
1515
assert roundtripOk(42ul)
1616
assert roundtripOk(42uL)
17-
assert roundtripOk(42.)
18-
assert roundtripOk(42.f)
19-
assert roundtripOk(42.d)
17+
assert roundtripOk(42.0)
18+
assert roundtripOk(42.0f)
19+
assert roundtripOk(42.0d)
2020
assert roundtripOk(-1s)
2121
assert roundtripOk(-1S)
2222
assert roundtripOk(42us)

compiler/test/stdlib/number.test.gr

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ assert Number.neg(Infinity) == -Infinity
313313
// isFloat
314314
assert Number.isFloat(0.0)
315315
assert Number.isFloat(1.5)
316-
assert Number.isFloat(42.)
316+
assert Number.isFloat(42.0)
317317
assert Number.isFloat(9e6)
318318
assert Number.isFloat(0) == false
319319
assert Number.isFloat(10) == false
@@ -396,8 +396,8 @@ assert Number.isInfinite(BI.toNumber(-1t)) == false
396396
// parseFloat
397397
// tests taken from Go's /src/strconv/atof_test.go
398398
assert Number.parseFloat("") == Err("Invalid string")
399-
assert Number.parseFloat("1") == Ok(1.)
400-
assert Number.parseFloat("+1") == Ok(1.)
399+
assert Number.parseFloat("1") == Ok(1.0)
400+
assert Number.parseFloat("+1") == Ok(1.0)
401401
assert Number.parseFloat("1x") == Err("Invalid float")
402402
assert Number.parseFloat("1.1.") == Err("Invalid float")
403403
assert Number.parseFloat("1e23") == Ok(1e+23)
@@ -414,30 +414,30 @@ assert Number.parseFloat("100000000000000016777215") ==
414414
Ok(1.0000000000000001e+23)
415415
assert Number.parseFloat("100000000000000016777216") ==
416416
Ok(1.0000000000000003e+23)
417-
assert Number.parseFloat("-1") == Ok(-1.)
417+
assert Number.parseFloat("-1") == Ok(-1.0)
418418
assert Number.parseFloat("-0.1") == Ok(-0.1)
419419
assert Number.parseFloat("-0") == Ok(-0.0)
420420
assert Number.parseFloat("1e-20") == Ok(1e-20)
421421
assert Number.parseFloat("625e-3") == Ok(0.625)
422422
// zeros
423-
assert Number.parseFloat("0") == Ok(0.)
424-
assert Number.parseFloat("0e0") == Ok(0.)
425-
assert Number.parseFloat("-0e0") == Ok(-0.)
426-
assert Number.parseFloat("+0e0") == Ok(0.)
427-
assert Number.parseFloat("0e-0") == Ok(0.)
428-
assert Number.parseFloat("-0e-0") == Ok(-0.)
429-
assert Number.parseFloat("+0e-0") == Ok(0.)
430-
assert Number.parseFloat("0e+0") == Ok(0.)
431-
assert Number.parseFloat("-0e+0") == Ok(-0.)
432-
assert Number.parseFloat("+0e+0") == Ok(0.)
433-
assert Number.parseFloat("0e+01234567890123456789") == Ok(0.)
434-
assert Number.parseFloat("0.00e-01234567890123456789") == Ok(0.)
435-
assert Number.parseFloat("-0e+01234567890123456789") == Ok(-0.)
436-
assert Number.parseFloat("-0.00e-01234567890123456789") == Ok(-0.)
437-
assert Number.parseFloat("0e291") == Ok(0.)
438-
assert Number.parseFloat("0e292") == Ok(0.)
439-
assert Number.parseFloat("0e347") == Ok(0.)
440-
assert Number.parseFloat("0e348") == Ok(0.)
423+
assert Number.parseFloat("0") == Ok(0.0)
424+
assert Number.parseFloat("0e0") == Ok(0.0)
425+
assert Number.parseFloat("-0e0") == Ok(-0.0)
426+
assert Number.parseFloat("+0e0") == Ok(0.0)
427+
assert Number.parseFloat("0e-0") == Ok(0.0)
428+
assert Number.parseFloat("-0e-0") == Ok(-0.0)
429+
assert Number.parseFloat("+0e-0") == Ok(0.0)
430+
assert Number.parseFloat("0e+0") == Ok(0.0)
431+
assert Number.parseFloat("-0e+0") == Ok(-0.0)
432+
assert Number.parseFloat("+0e+0") == Ok(0.0)
433+
assert Number.parseFloat("0e+01234567890123456789") == Ok(0.0)
434+
assert Number.parseFloat("0.00e-01234567890123456789") == Ok(0.0)
435+
assert Number.parseFloat("-0e+01234567890123456789") == Ok(-0.0)
436+
assert Number.parseFloat("-0.00e-01234567890123456789") == Ok(-0.0)
437+
assert Number.parseFloat("0e291") == Ok(0.0)
438+
assert Number.parseFloat("0e292") == Ok(0.0)
439+
assert Number.parseFloat("0e347") == Ok(0.0)
440+
assert Number.parseFloat("0e348") == Ok(0.0)
441441
// NaNs
442442
assert Number.isNaN(
443443
Result.expect("float should parse", Number.parseFloat("nan"))
@@ -496,14 +496,14 @@ assert Number.parseFloat("5e-324") == Ok(5e-324)
496496
assert Number.parseFloat("4e-324") == Ok(5e-324)
497497
assert Number.parseFloat("3e-324") == Ok(5e-324)
498498
// too small
499-
assert Number.parseFloat("2e-324") == Ok(0.)
499+
assert Number.parseFloat("2e-324") == Ok(0.0)
500500
// way too small
501-
assert Number.parseFloat("1e-350") == Ok(0.)
502-
assert Number.parseFloat("1e-400000") == Ok(0.)
501+
assert Number.parseFloat("1e-350") == Ok(0.0)
502+
assert Number.parseFloat("1e-400000") == Ok(0.0)
503503
// try to overflow exponent
504-
assert Number.parseFloat("1e-4294967296") == Ok(0.)
504+
assert Number.parseFloat("1e-4294967296") == Ok(0.0)
505505
assert Number.parseFloat("1e+4294967296") == Ok(Infinity)
506-
assert Number.parseFloat("1e-18446744073709551616") == Ok(0.)
506+
assert Number.parseFloat("1e-18446744073709551616") == Ok(0.0)
507507
assert Number.parseFloat("1e+18446744073709551616") == Ok(Infinity)
508508
// Parse errors
509509
assert Number.parseFloat("1e") == Err("Invalid exponent")
@@ -526,12 +526,12 @@ assert Number.parseFloat(
526526
assert Number.parseFloat(
527527
"1.00000000000000011102230246251565404236316680908203125"
528528
) ==
529-
Ok(1.)
529+
Ok(1.0)
530530
// Slightly lower; still round down.
531531
assert Number.parseFloat(
532532
"1.00000000000000011102230246251565404236316680908203124"
533533
) ==
534-
Ok(1.)
534+
Ok(1.0)
535535
// Slightly higher; round up.
536536
assert Number.parseFloat(
537537
"1.00000000000000011102230246251565404236316680908203126"
@@ -555,12 +555,12 @@ assert Number.parseFloat("1090544144181609348671888949248") ==
555555
assert Number.parseFloat("1090544144181609348835077142190") ==
556556
Ok(1.0905441441816094e+30)
557557
// underscores
558-
assert Number.parseFloat("1__") == Ok(1.)
558+
assert Number.parseFloat("1__") == Ok(1.0)
559559
assert Number.parseFloat("1_e2_3_") == Ok(1e+23)
560560
assert Number.parseFloat("100_000_000_000_000_000_000_000") == Ok(1e+23)
561561
assert Number.parseFloat("1_2345_6700") == Ok(1.234567e+08)
562562
assert Number.parseFloat("625e-3__") == Ok(0.625)
563-
assert Number.parseFloat("0_0e+0_12__3___4____567890123456789") == Ok(0.)
563+
assert Number.parseFloat("0_0e+0_12__3___4____567890123456789") == Ok(0.0)
564564
assert Number.parseFloat("1_e400_000") == Ok(Infinity)
565565
assert Number.parseFloat("-1_e400_000") == Ok(-Infinity)
566566
assert Number.parseFloat(

compiler/test/stdlib/pervasives.test.gr

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ assert compare(0, 0) == 0
88
assert compare(1, 0) > 0
99
// Specific NaN and Infinity tests
1010
assert compare(1 / 0.0, 987654321) > 0
11-
assert compare(1 / 0.0, 987654321.) > 0
11+
assert compare(1 / 0.0, 987654321.0) > 0
1212
assert compare(0.0 / 0.0, -1 / 0.0) < 0
13-
assert compare(0.0 / 0.0, 987654321.) < 0
13+
assert compare(0.0 / 0.0, 987654321.0) < 0
1414
assert compare(0.0 / 0.0, 987654321) < 0
1515
assert compare(0.0 / 0.0, 0) < 0
1616
assert !(0.0 / 0.0 < 0.0 / 0.0)
1717
assert !(0.0 / 0.0 < 10)
18-
assert !(0.0 / 0.0 < 10.)
18+
assert !(0.0 / 0.0 < 10.0)
1919
assert !(0.0 / 0.0 <= 0.0 / 0.0)
2020
assert !(0.0 / 0.0 <= 10)
21-
assert !(0.0 / 0.0 <= 10.)
21+
assert !(0.0 / 0.0 <= 10.0)
2222
assert !(0.0 / 0.0 > 0.0 / 0.0)
2323
assert !(0.0 / 0.0 > 10)
24-
assert !(0.0 / 0.0 > 10.)
24+
assert !(0.0 / 0.0 > 10.0)
2525
assert !(0.0 / 0.0 >= 0.0 / 0.0)
2626
assert !(0.0 / 0.0 >= 10)
27-
assert !(0.0 / 0.0 >= 10.)
27+
assert !(0.0 / 0.0 >= 10.0)
2828
// Booleans
2929
assert compare(false, true) < 0
3030
assert compare(true, false) > 0

compiler/test/stdlib/wasmf32.test.gr

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,27 @@ let test = () => {
1010
assert WasmF32.eq(WasmF32.neg(1.23w), -1.23w)
1111
assert WasmF32.eq(WasmF32.abs(1.23w), 1.23w)
1212
assert WasmF32.eq(WasmF32.abs(-1.23w), 1.23w)
13-
assert WasmF32.eq(WasmF32.ceil(1.5w), 2.w)
14-
assert WasmF32.eq(WasmF32.ceil(-1.5w), -1.w)
15-
assert WasmF32.eq(WasmF32.floor(1.5w), 1.w)
16-
assert WasmF32.eq(WasmF32.floor(-1.5w), -2.w)
17-
assert WasmF32.eq(WasmF32.trunc(1.23w), 1.w)
18-
assert WasmF32.eq(WasmF32.trunc(-1.23w), -1.w)
19-
assert WasmF32.eq(WasmF32.nearest(1.23w), 1.w)
20-
assert WasmF32.eq(WasmF32.nearest(1.73w), 2.w)
21-
assert WasmF32.eq(WasmF32.nearest(-1.23w), -1.w)
22-
assert WasmF32.eq(WasmF32.nearest(-1.73w), -2.w)
23-
assert WasmF32.eq(WasmF32.sqrt(16.w), 4.w)
13+
assert WasmF32.eq(WasmF32.ceil(1.5w), 2.0w)
14+
assert WasmF32.eq(WasmF32.ceil(-1.5w), -1.0w)
15+
assert WasmF32.eq(WasmF32.floor(1.5w), 1.0w)
16+
assert WasmF32.eq(WasmF32.floor(-1.5w), -2.0w)
17+
assert WasmF32.eq(WasmF32.trunc(1.23w), 1.0w)
18+
assert WasmF32.eq(WasmF32.trunc(-1.23w), -1.0w)
19+
assert WasmF32.eq(WasmF32.nearest(1.23w), 1.0w)
20+
assert WasmF32.eq(WasmF32.nearest(1.73w), 2.0w)
21+
assert WasmF32.eq(WasmF32.nearest(-1.23w), -1.0w)
22+
assert WasmF32.eq(WasmF32.nearest(-1.73w), -2.0w)
23+
assert WasmF32.eq(WasmF32.sqrt(16.0w), 4.0w)
2424

2525
// binary tests
26-
assert WasmF32.eq(WasmF32.add(2.5w, 4.w), 6.5w)
27-
assert WasmF32.eq(WasmF32.sub(2.5w, 4.w), -1.5w)
28-
assert WasmF32.eq(WasmF32.mul(2.5w, 4.w), 10.w)
29-
assert WasmF32.eq(WasmF32.div(2.5w, 4.w), .625w)
30-
assert WasmF32.eq(WasmF32.copySign(2.5w, 4.w), 2.5w)
31-
assert WasmF32.eq(WasmF32.copySign(2.5w, -4.w), -2.5w)
32-
assert WasmF32.eq(WasmF32.min(2.5w, 4.w), 2.5w)
33-
assert WasmF32.eq(WasmF32.max(2.5w, 4.w), 4.w)
26+
assert WasmF32.eq(WasmF32.add(2.5w, 4.0w), 6.5w)
27+
assert WasmF32.eq(WasmF32.sub(2.5w, 4.0w), -1.5w)
28+
assert WasmF32.eq(WasmF32.mul(2.5w, 4.0w), 10.0w)
29+
assert WasmF32.eq(WasmF32.div(2.5w, 4.0w), 0.625w)
30+
assert WasmF32.eq(WasmF32.copySign(2.5w, 4.0w), 2.5w)
31+
assert WasmF32.eq(WasmF32.copySign(2.5w, -4.0w), -2.5w)
32+
assert WasmF32.eq(WasmF32.min(2.5w, 4.0w), 2.5w)
33+
assert WasmF32.eq(WasmF32.max(2.5w, 4.0w), 4.0w)
3434
assert WasmF32.eq(1.23w, 1.23w)
3535
assert !WasmF32.eq(1.23w, -1.23w)
3636
assert WasmF32.ne(1.23w, -1.23w)
@@ -47,11 +47,11 @@ let test = () => {
4747
assert !WasmF32.ge(1.23w, 1.24w)
4848

4949
// conversion tests
50-
assert WasmF32.eq(WasmF32.reinterpretI32(0x42280000n), 42.w)
51-
assert WasmF32.eq(WasmF32.convertI32S(-1n), -1.w)
52-
assert WasmF32.eq(WasmF32.convertI32U(-1n), 4294967296.w)
53-
assert WasmF32.eq(WasmF32.convertI64S(-1N), -1.w)
54-
assert WasmF32.eq(WasmF32.convertI64U(-1N), 18446744073709552000.w)
50+
assert WasmF32.eq(WasmF32.reinterpretI32(0x42280000n), 42.0w)
51+
assert WasmF32.eq(WasmF32.convertI32S(-1n), -1.0w)
52+
assert WasmF32.eq(WasmF32.convertI32U(-1n), 4294967296.0w)
53+
assert WasmF32.eq(WasmF32.convertI64S(-1N), -1.0w)
54+
assert WasmF32.eq(WasmF32.convertI64U(-1N), 18446744073709552000.0w)
5555
assert WasmF32.eq(WasmF32.demoteF64(1.23W), 1.23w)
5656

5757
// Grain conversion tests

compiler/test/stdlib/wasmf64.test.gr

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,27 @@ let test = () => {
1010
assert WasmF64.eq(WasmF64.neg(1.23W), -1.23W)
1111
assert WasmF64.eq(WasmF64.abs(1.23W), 1.23W)
1212
assert WasmF64.eq(WasmF64.abs(-1.23W), 1.23W)
13-
assert WasmF64.eq(WasmF64.ceil(1.5W), 2.W)
14-
assert WasmF64.eq(WasmF64.ceil(-1.5W), -1.W)
15-
assert WasmF64.eq(WasmF64.floor(1.5W), 1.W)
16-
assert WasmF64.eq(WasmF64.floor(-1.5W), -2.W)
17-
assert WasmF64.eq(WasmF64.trunc(1.23W), 1.W)
18-
assert WasmF64.eq(WasmF64.trunc(-1.23W), -1.W)
19-
assert WasmF64.eq(WasmF64.nearest(1.23W), 1.W)
20-
assert WasmF64.eq(WasmF64.nearest(1.73W), 2.W)
21-
assert WasmF64.eq(WasmF64.nearest(-1.23W), -1.W)
22-
assert WasmF64.eq(WasmF64.nearest(-1.73W), -2.W)
23-
assert WasmF64.eq(WasmF64.sqrt(16.W), 4.W)
13+
assert WasmF64.eq(WasmF64.ceil(1.5W), 2.0W)
14+
assert WasmF64.eq(WasmF64.ceil(-1.5W), -1.0W)
15+
assert WasmF64.eq(WasmF64.floor(1.5W), 1.0W)
16+
assert WasmF64.eq(WasmF64.floor(-1.5W), -2.0W)
17+
assert WasmF64.eq(WasmF64.trunc(1.23W), 1.0W)
18+
assert WasmF64.eq(WasmF64.trunc(-1.23W), -1.0W)
19+
assert WasmF64.eq(WasmF64.nearest(1.23W), 1.0W)
20+
assert WasmF64.eq(WasmF64.nearest(1.73W), 2.0W)
21+
assert WasmF64.eq(WasmF64.nearest(-1.23W), -1.0W)
22+
assert WasmF64.eq(WasmF64.nearest(-1.73W), -2.0W)
23+
assert WasmF64.eq(WasmF64.sqrt(16.0W), 4.0W)
2424

2525
// binary tests
26-
assert WasmF64.eq(WasmF64.add(2.5W, 4.W), 6.5W)
27-
assert WasmF64.eq(WasmF64.sub(2.5W, 4.W), -1.5W)
28-
assert WasmF64.eq(WasmF64.mul(2.5W, 4.W), 10.W)
29-
assert WasmF64.eq(WasmF64.div(2.5W, 4.W), .625W)
30-
assert WasmF64.eq(WasmF64.copySign(2.5W, 4.W), 2.5W)
31-
assert WasmF64.eq(WasmF64.copySign(2.5W, -4.W), -2.5W)
32-
assert WasmF64.eq(WasmF64.min(2.5W, 4.W), 2.5W)
33-
assert WasmF64.eq(WasmF64.max(2.5W, 4.W), 4.W)
26+
assert WasmF64.eq(WasmF64.add(2.5W, 4.0W), 6.5W)
27+
assert WasmF64.eq(WasmF64.sub(2.5W, 4.0W), -1.5W)
28+
assert WasmF64.eq(WasmF64.mul(2.5W, 4.0W), 10.0W)
29+
assert WasmF64.eq(WasmF64.div(2.5W, 4.0W), 0.625W)
30+
assert WasmF64.eq(WasmF64.copySign(2.5W, 4.0W), 2.5W)
31+
assert WasmF64.eq(WasmF64.copySign(2.5W, -4.0W), -2.5W)
32+
assert WasmF64.eq(WasmF64.min(2.5W, 4.0W), 2.5W)
33+
assert WasmF64.eq(WasmF64.max(2.5W, 4.0W), 4.0W)
3434
assert WasmF64.eq(1.23W, 1.23W)
3535
assert !WasmF64.eq(1.23W, -1.23W)
3636
assert WasmF64.ne(1.23W, -1.23W)
@@ -47,11 +47,11 @@ let test = () => {
4747
assert !WasmF64.ge(1.23W, 1.24W)
4848

4949
// conversion tests
50-
assert WasmF64.eq(WasmF64.reinterpretI64(0x4045000000000000N), 42.W)
51-
assert WasmF64.eq(WasmF64.convertI32S(-1n), -1.W)
52-
assert WasmF64.eq(WasmF64.convertI32U(-1n), 4294967295.W)
53-
assert WasmF64.eq(WasmF64.convertI64S(-1N), -1.W)
54-
assert WasmF64.eq(WasmF64.convertI64U(-1N), 18446744073709552000.W)
50+
assert WasmF64.eq(WasmF64.reinterpretI64(0x4045000000000000N), 42.0W)
51+
assert WasmF64.eq(WasmF64.convertI32S(-1n), -1.0W)
52+
assert WasmF64.eq(WasmF64.convertI32U(-1n), 4294967295.0W)
53+
assert WasmF64.eq(WasmF64.convertI64S(-1N), -1.0W)
54+
assert WasmF64.eq(WasmF64.convertI64U(-1N), 18446744073709552000.0W)
5555
assert WasmF64.eq(WasmF64.promoteF32(1.5w), 1.5W)
5656

5757
// Grain conversion tests

compiler/test/stdlib/wasmi32.test.gr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ let test = () => {
5656
assert WasmI32.eq(WasmI32.wrapI64(42N), 42n)
5757
assert WasmI32.eq(WasmI32.wrapI64(0x0000ffffffff0000N), 0xffff0000n)
5858
assert WasmI32.eq(WasmI32.truncF32S(42.17w), 42n)
59-
assert WasmI32.eq(WasmI32.truncF32U(2147483648.w), 0x80000000n)
59+
assert WasmI32.eq(WasmI32.truncF32U(2147483648.0w), 0x80000000n)
6060
assert WasmI32.eq(WasmI32.truncF64S(42.17W), 42n)
61-
assert WasmI32.eq(WasmI32.truncF64U(2147483648.W), 0x80000000n)
62-
assert WasmI32.eq(WasmI32.reinterpretF32(42.w), 0x42280000n)
61+
assert WasmI32.eq(WasmI32.truncF64U(2147483648.0W), 0x80000000n)
62+
assert WasmI32.eq(WasmI32.reinterpretF32(42.0w), 0x42280000n)
6363
assert WasmI32.eq(WasmI32.extendS8(0x00n), 0x00n)
6464
assert WasmI32.eq(WasmI32.extendS8(0x80n), 0xffffff80n)
6565
assert WasmI32.eq(WasmI32.extendS16(0x0000n), 0x0000n)

compiler/test/stdlib/wasmi64.test.gr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ let test = () => {
6060
assert WasmI64.eq(WasmI64.truncF32U(9.223372e+18w), 0x8000000000000000N)
6161
assert WasmI64.eq(WasmI64.truncF64S(42.17W), 42N)
6262
assert WasmI64.eq(WasmI64.truncF64U(9.233372e+18W), 0x802386E9DB09C000N)
63-
assert WasmI64.eq(WasmI64.reinterpretF64(42.W), 0x4045000000000000N)
63+
assert WasmI64.eq(WasmI64.reinterpretF64(42.0W), 0x4045000000000000N)
6464
assert WasmI64.eq(WasmI64.extendS8(0x00N), 0x00N)
6565
assert WasmI64.eq(WasmI64.extendS8(0x80N), 0xffffffffffffff80N)
6666
assert WasmI64.eq(WasmI64.extendS16(0x0000N), 0x0000N)

0 commit comments

Comments
 (0)