Skip to content

Commit 19e2c61

Browse files
committed
Merge pull request #274 from WebAssembly/more-tests
More tests!
1 parent d992a1a commit 19e2c61

12 files changed

+999
-68
lines changed

ml-proto/TestingTodo.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ Floating point semantics:
4949
- ~~test that nearestint doesn't do JS-style Math.round or C-style round(3) rounding~~
5050
- ~~test that signalling NaN doesn't cause weirdness~~
5151
- ~~test that signalling/quiet NaNs can have sign bits and payloads in literals~~
52-
- test that conversion from int32/int64 to float32 rounds correctly
53-
- test that [relaxed optimizations](https://gcc.gnu.org/wiki/FloatingPointMath) are not done
52+
- ~~test that conversion from int32/int64 to float32 rounds correctly~~
53+
- ~~test that [relaxed optimizations](https://gcc.gnu.org/wiki/FloatingPointMath) are not done~~
5454

5555
Linear memory semantics:
5656
- test that loading from null works
@@ -82,13 +82,14 @@ Expression optimizer bait:
8282
- ~~test that floating-point division by immediate 0 and -0 is defined~~
8383
- ~~test that floating-point (x*y)/y isn't folded to x~~
8484
- ~~test that floating-point (x+y)-y isn't folded to x~~
85-
- test that ult/ugt/etc (formed with a not operator) aren't folded to oge/ole/etc.
85+
- ~~test that ult/ugt/etc (formed with a not operator) aren't folded to oge/ole/etc.~~
8686
- ~~test that floating point add/mul aren't reassociated even when tempting~~
8787
- ~~test that floating point mul+add isn't folded to fma even when tempting~~
8888
- ~~test that floating point sqrt(x*x+y*y) isn't folded to hypot even when tempting~~
8989
- ~~test that 1/x isn't translated into reciprocal-approximate~~
9090
- ~~test that 1/sqrt(x) isn't approximated either~~
9191
- ~~test that fp division by non-power-2 constant gets full precision (isn't a multiply-by-reciprocal deal)?~~
92+
- ~~test that x<y?x:y is not folded to min, etc.~~
9293

9394
Misc optimizer bait:
9495
- ~~test that the impl doesn't constant-fold away or DCE away or speculate operations that should trap, such as `1/0u`, `1/0`, `1%0u`, `1%0, convertToInt(NaN)`, `INT_MIN/-1` and so on.~~
@@ -109,11 +110,6 @@ Misc x87-isms:
109110
- ~~test for evaluating intermediate results at greater precision~~
110111
- ~~test for loading and storing NaNs~~
111112

112-
Control flow:
113-
- test that continue goes to the right place in `do_while` and `forever`
114-
- test that break goes to the right place in all cases where it can appear
115-
- test devious switch case patterns
116-
117113
Validation errors:
118114
- load/store or variables with type void/bool/funcptr/etc.
119115
- sign-extend load from int64 to int32 etc.

ml-proto/test/conversions.wast

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,13 +268,23 @@
268268
(assert_return (invoke "f32.convert_s_i32" (i32.const 2147483647)) (f32.const 2147483648))
269269
(assert_return (invoke "f32.convert_s_i32" (i32.const -2147483648)) (f32.const -2147483648))
270270
(assert_return (invoke "f32.convert_s_i32" (i32.const 1234567890)) (f32.const 0x1.26580cp+30))
271+
;; Test rounding directions.
272+
(assert_return (invoke "f32.convert_s_i32" (i32.const 16777217)) (f32.const 16777216.0))
273+
(assert_return (invoke "f32.convert_s_i32" (i32.const -16777217)) (f32.const -16777216.0))
274+
(assert_return (invoke "f32.convert_s_i32" (i32.const 16777219)) (f32.const 16777220.0))
275+
(assert_return (invoke "f32.convert_s_i32" (i32.const -16777219)) (f32.const -16777220.0))
271276

272277
(assert_return (invoke "f32.convert_s_i64" (i64.const 1)) (f32.const 1.0))
273278
(assert_return (invoke "f32.convert_s_i64" (i64.const -1)) (f32.const -1.0))
274279
(assert_return (invoke "f32.convert_s_i64" (i64.const 0)) (f32.const 0.0))
275280
(assert_return (invoke "f32.convert_s_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807))
276281
(assert_return (invoke "f32.convert_s_i64" (i64.const -9223372036854775808)) (f32.const -9223372036854775808))
277282
(assert_return (invoke "f32.convert_s_i64" (i64.const 314159265358979)) (f32.const 0x1.1db9e8p+48)) ;; PI
283+
;; Test rounding directions.
284+
(assert_return (invoke "f32.convert_s_i64" (i64.const 16777217)) (f32.const 16777216.0))
285+
(assert_return (invoke "f32.convert_s_i64" (i64.const -16777217)) (f32.const -16777216.0))
286+
(assert_return (invoke "f32.convert_s_i64" (i64.const 16777219)) (f32.const 16777220.0))
287+
(assert_return (invoke "f32.convert_s_i64" (i64.const -16777219)) (f32.const -16777220.0))
278288

279289
(assert_return (invoke "f64.convert_s_i32" (i32.const 1)) (f64.const 1.0))
280290
(assert_return (invoke "f64.convert_s_i32" (i32.const -1)) (f64.const -1.0))
@@ -289,19 +299,30 @@
289299
(assert_return (invoke "f64.convert_s_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807))
290300
(assert_return (invoke "f64.convert_s_i64" (i64.const -9223372036854775808)) (f64.const -9223372036854775808))
291301
(assert_return (invoke "f64.convert_s_i64" (i64.const 4669201609102990)) (f64.const 4669201609102990)) ;; Feigenbaum
302+
;; Test rounding directions.
303+
(assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992))
304+
(assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740993)) (f64.const -9007199254740992))
305+
(assert_return (invoke "f64.convert_s_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996))
306+
(assert_return (invoke "f64.convert_s_i64" (i64.const -9007199254740995)) (f64.const -9007199254740996))
292307

293308
(assert_return (invoke "f32.convert_u_i32" (i32.const 1)) (f32.const 1.0))
294309
(assert_return (invoke "f32.convert_u_i32" (i32.const 0)) (f32.const 0.0))
295310
(assert_return (invoke "f32.convert_u_i32" (i32.const 2147483647)) (f32.const 2147483648))
296311
(assert_return (invoke "f32.convert_u_i32" (i32.const -2147483648)) (f32.const 2147483648))
297312
(assert_return (invoke "f32.convert_u_i32" (i32.const 0x12345678)) (f32.const 0x1.234568p+28))
298313
(assert_return (invoke "f32.convert_u_i32" (i32.const 0xffffffff)) (f32.const 4294967296.0))
314+
;; Test rounding directions.
315+
(assert_return (invoke "f32.convert_u_i32" (i32.const 16777217)) (f32.const 16777216.0))
316+
(assert_return (invoke "f32.convert_u_i32" (i32.const 16777219)) (f32.const 16777220.0))
299317

300318
(assert_return (invoke "f32.convert_u_i64" (i64.const 1)) (f32.const 1.0))
301319
(assert_return (invoke "f32.convert_u_i64" (i64.const 0)) (f32.const 0.0))
302320
(assert_return (invoke "f32.convert_u_i64" (i64.const 9223372036854775807)) (f32.const 9223372036854775807))
303321
(assert_return (invoke "f32.convert_u_i64" (i64.const -9223372036854775808)) (f32.const 9223372036854775808))
304322
(assert_return (invoke "f32.convert_u_i64" (i64.const 0xffffffffffffffff)) (f32.const 18446744073709551616.0))
323+
;; Test rounding directions.
324+
(assert_return (invoke "f32.convert_u_i64" (i64.const 16777217)) (f32.const 16777216.0))
325+
(assert_return (invoke "f32.convert_u_i64" (i64.const 16777219)) (f32.const 16777220.0))
305326

306327
(assert_return (invoke "f64.convert_u_i32" (i32.const 1)) (f64.const 1.0))
307328
(assert_return (invoke "f64.convert_u_i32" (i32.const 0)) (f64.const 0.0))
@@ -314,6 +335,9 @@
314335
(assert_return (invoke "f64.convert_u_i64" (i64.const 9223372036854775807)) (f64.const 9223372036854775807))
315336
(assert_return (invoke "f64.convert_u_i64" (i64.const -9223372036854775808)) (f64.const 9223372036854775808))
316337
(assert_return (invoke "f64.convert_u_i64" (i64.const 0xffffffffffffffff)) (f64.const 18446744073709551616.0))
338+
;; Test rounding directions.
339+
(assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740993)) (f64.const 9007199254740992))
340+
(assert_return (invoke "f64.convert_u_i64" (i64.const 9007199254740995)) (f64.const 9007199254740996))
317341

318342
(assert_return (invoke "f64.promote_f32" (f32.const 0.0)) (f64.const 0.0))
319343
(assert_return (invoke "f64.promote_f32" (f32.const -0.0)) (f64.const -0.0))

ml-proto/test/f32.wast

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
;; Test all the f32 operators on major boundary values and all special
2+
;; values (except comparison operators, which are tested in f32_cmp.wast).
3+
14
(module
25
(func $add (param $x f32) (param $y f32) (result f32) (f32.add (get_local $x) (get_local $y)))
36
(func $sub (param $x f32) (param $y f32) (result f32) (f32.sub (get_local $x) (get_local $y)))

ml-proto/test/f32_cmp.wast

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
;; Test all the f32 comparison operators on major boundary values and all
2+
;; special values.
3+
14
(module
25
(func $eq (param $x f32) (param $y f32) (result i32) (f32.eq (get_local $x) (get_local $y)))
36
(func $ne (param $x f32) (param $y f32) (result i32) (f32.ne (get_local $x) (get_local $y)))

ml-proto/test/f64.wast

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
;; Test all the f64 operators on major boundary values and all special
2+
;; values (except comparison operators, which are tested in f64_cmp.wast).
3+
14
(module
25
(func $add (param $x f64) (param $y f64) (result f64) (f64.add (get_local $x) (get_local $y)))
36
(func $sub (param $x f64) (param $y f64) (result f64) (f64.sub (get_local $x) (get_local $y)))

ml-proto/test/f64_cmp.wast

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
;; Test all the f64 comparison operators on major boundary values and all
2+
;; special values.
3+
14
(module
25
(func $eq (param $x f64) (param $y f64) (result i32) (f64.eq (get_local $x) (get_local $y)))
36
(func $ne (param $x f64) (param $y f64) (result i32) (f64.ne (get_local $x) (get_local $y)))

0 commit comments

Comments
 (0)