Skip to content

Commit f8897b1

Browse files
committed
Add more tests, delete some redundant tests, and reorganize some existing tests.
1 parent 7c482b1 commit f8897b1

File tree

7 files changed

+451
-90
lines changed

7 files changed

+451
-90
lines changed

ml-proto/TestingTodo.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Misc semantics:
1515
- test that one can clobber the entire contents of the linear memory without corrupting: call stack, local variables, program execution.
1616

1717
Operator semantics:
18-
- test that promote/demote, sext/trunc, zext/trunc is bit-preserving if not NaN
18+
- ~~test that promote/demote is bit-preserving if not NaN~~
1919
- ~~test that clz/ctz handle zero~~
2020
- ~~test that numbers slightly outside of the int32 range round into the int32 range in floating-to-int32 conversion~~
2121
- ~~test that neg, abs, copysign, reinterpretcast, store+load, set+get, preserve the sign bit and significand bits of NaN and don't canonicalize~~

ml-proto/test/conversions.wast

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,6 @@
387387
(assert_return (invoke "f32.demote_f64" (f64.const nan)) (f32.const nan))
388388
(assert_return (invoke "f32.demote_f64" (f64.const 0x1p-1022)) (f32.const 0.0))
389389
(assert_return (invoke "f32.demote_f64" (f64.const -0x1p-1022)) (f32.const -0.0))
390-
(assert_return (invoke "f32.demote_f64" (f64.const 0x0.0000000000001p-1022)) (f32.const 0.0))
391-
(assert_return (invoke "f32.demote_f64" (f64.const -0x0.0000000000001p-1022)) (f32.const -0.0))
392390
(assert_return (invoke "f32.demote_f64" (f64.const 0x0.8p-149)) (f32.const 0.0))
393391
(assert_return (invoke "f32.demote_f64" (f64.const -0x0.8p-149)) (f32.const -0.0))
394392
(assert_return (invoke "f32.demote_f64" (f64.const 0x1.0000000000001p-150)) (f32.const 0x1p-149))

ml-proto/test/float_exprs.wast

Lines changed: 286 additions & 22 deletions
Large diffs are not rendered by default.

ml-proto/test/float_misc.wast

Lines changed: 126 additions & 62 deletions
Large diffs are not rendered by default.

ml-proto/test/i32.wast

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,16 @@
242242
(assert_return (invoke "rotl" (i32.const 0xabcd9876) (i32.const 1)) (i32.const 0x579b30ed))
243243
(assert_return (invoke "rotl" (i32.const 0x00008000) (i32.const 37)) (i32.const 0x00100000))
244244
(assert_return (invoke "rotl" (i32.const 0x769abcdf) (i32.const 0x8000000d)) (i32.const 0x579beed3))
245+
(assert_return (invoke "rotl" (i32.const 1) (i32.const 31)) (i32.const 0x80000000))
246+
(assert_return (invoke "rotl" (i32.const 0x80000000) (i32.const 1)) (i32.const 1))
245247

246248
(assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0x0005)) (i32.const 0x1d860e97))
247249
(assert_return (invoke "rotr" (i32.const 0xb0c1d2e3) (i32.const 0xff05)) (i32.const 0x1d860e97))
248250
(assert_return (invoke "rotr" (i32.const 0xff00cc00) (i32.const 1)) (i32.const 0x7f806600))
249251
(assert_return (invoke "rotr" (i32.const 0x00080000) (i32.const 4)) (i32.const 0x00008000))
250252
(assert_return (invoke "rotr" (i32.const 0x769abcdf) (i32.const 0xffffffed)) (i32.const 0xe6fbb4d5))
253+
(assert_return (invoke "rotr" (i32.const 1) (i32.const 1)) (i32.const 0x80000000))
254+
(assert_return (invoke "rotr" (i32.const 0x80000000) (i32.const 31)) (i32.const 1))
251255

252256
(assert_return (invoke "clz" (i32.const 0xffffffff)) (i32.const 0))
253257
(assert_return (invoke "clz" (i32.const 0)) (i32.const 32))
@@ -256,24 +260,28 @@
256260
(assert_return (invoke "clz" (i32.const 0x80000000)) (i32.const 0))
257261
(assert_return (invoke "clz" (i32.const 1)) (i32.const 31))
258262
(assert_return (invoke "clz" (i32.const 2)) (i32.const 30))
263+
(assert_return (invoke "clz" (i32.const 0x7fffffff)) (i32.const 1))
259264

260265
(assert_return (invoke "ctz" (i32.const -1)) (i32.const 0))
261266
(assert_return (invoke "ctz" (i32.const 0)) (i32.const 32))
262267
(assert_return (invoke "ctz" (i32.const 0x00008000)) (i32.const 15))
263268
(assert_return (invoke "ctz" (i32.const 0x00010000)) (i32.const 16))
264269
(assert_return (invoke "ctz" (i32.const 0x80000000)) (i32.const 31))
270+
(assert_return (invoke "ctz" (i32.const 0x7fffffff)) (i32.const 0))
265271

266272
(assert_return (invoke "popcnt" (i32.const -1)) (i32.const 32))
267273
(assert_return (invoke "popcnt" (i32.const 0)) (i32.const 0))
268274
(assert_return (invoke "popcnt" (i32.const 0x00008000)) (i32.const 1))
269275
(assert_return (invoke "popcnt" (i32.const 0x80008000)) (i32.const 2))
276+
(assert_return (invoke "popcnt" (i32.const 0x7fffffff)) (i32.const 31))
270277
(assert_return (invoke "popcnt" (i32.const 0xAAAAAAAA)) (i32.const 16))
271278
(assert_return (invoke "popcnt" (i32.const 0x55555555)) (i32.const 16))
272279
(assert_return (invoke "popcnt" (i32.const 0xDEADBEEF)) (i32.const 24))
273280

274281
(assert_return (invoke "eqz" (i32.const 0)) (i32.const 1))
275282
(assert_return (invoke "eqz" (i32.const 1)) (i32.const 0))
276283
(assert_return (invoke "eqz" (i32.const 0x80000000)) (i32.const 0))
284+
(assert_return (invoke "eqz" (i32.const 0x7fffffff)) (i32.const 0))
277285

278286
(assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1))
279287
(assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1))
@@ -282,9 +290,13 @@
282290
(assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 1))
283291
(assert_return (invoke "eq" (i32.const -1) (i32.const -1)) (i32.const 1))
284292
(assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 0))
293+
(assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 0))
285294
(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0)) (i32.const 0))
295+
(assert_return (invoke "eq" (i32.const 0) (i32.const 0x80000000)) (i32.const 0))
286296
(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const -1)) (i32.const 0))
297+
(assert_return (invoke "eq" (i32.const -1) (i32.const 0x80000000)) (i32.const 0))
287298
(assert_return (invoke "eq" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 0))
299+
(assert_return (invoke "eq" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 0))
288300

289301
(assert_return (invoke "ne" (i32.const 0) (i32.const 0)) (i32.const 0))
290302
(assert_return (invoke "ne" (i32.const 1) (i32.const 1)) (i32.const 0))
@@ -293,9 +305,13 @@
293305
(assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x7fffffff)) (i32.const 0))
294306
(assert_return (invoke "ne" (i32.const -1) (i32.const -1)) (i32.const 0))
295307
(assert_return (invoke "ne" (i32.const 1) (i32.const 0)) (i32.const 1))
308+
(assert_return (invoke "ne" (i32.const 0) (i32.const 1)) (i32.const 1))
296309
(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0)) (i32.const 1))
310+
(assert_return (invoke "ne" (i32.const 0) (i32.const 0x80000000)) (i32.const 1))
297311
(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const -1)) (i32.const 1))
312+
(assert_return (invoke "ne" (i32.const -1) (i32.const 0x80000000)) (i32.const 1))
298313
(assert_return (invoke "ne" (i32.const 0x80000000) (i32.const 0x7fffffff)) (i32.const 1))
314+
(assert_return (invoke "ne" (i32.const 0x7fffffff) (i32.const 0x80000000)) (i32.const 1))
299315

300316
(assert_return (invoke "lt_s" (i32.const 0) (i32.const 0)) (i32.const 0))
301317
(assert_return (invoke "lt_s" (i32.const 1) (i32.const 1)) (i32.const 0))

ml-proto/test/i64.wast

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,17 @@
243243
(assert_return (invoke "rotl" (i64.const -1) (i64.const 1)) (i64.const -1))
244244
(assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 63)) (i64.const 0x55e891a77ab3c04e))
245245
(assert_return (invoke "rotl" (i64.const 0xabd1234ef567809c) (i64.const 0x800000000000003f)) (i64.const 0x55e891a77ab3c04e))
246+
(assert_return (invoke "rotl" (i64.const 1) (i64.const 63)) (i64.const 0x8000000000000000))
247+
(assert_return (invoke "rotl" (i64.const 0x8000000000000000) (i64.const 1)) (i64.const 1))
246248

247249
(assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000))
248250
(assert_return (invoke "rotr" (i64.const 1) (i64.const 0)) (i64.const 1))
249251
(assert_return (invoke "rotr" (i64.const -1) (i64.const 1)) (i64.const -1))
250252
(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 53)) (i64.const 0x6891a77ab3c04d5e))
251253
(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0x35)) (i64.const 0x6891a77ab3c04d5e))
252254
(assert_return (invoke "rotr" (i64.const 0xabcd1234ef567809) (i64.const 0xf5)) (i64.const 0x6891a77ab3c04d5e))
255+
(assert_return (invoke "rotr" (i64.const 1) (i64.const 1)) (i64.const 0x8000000000000000))
256+
(assert_return (invoke "rotr" (i64.const 0x8000000000000000) (i64.const 63)) (i64.const 1))
253257

254258
(assert_return (invoke "clz" (i64.const 0xffffffffffffffff)) (i64.const 0))
255259
(assert_return (invoke "clz" (i64.const 0)) (i64.const 64))
@@ -258,24 +262,28 @@
258262
(assert_return (invoke "clz" (i64.const 0x8000000000000000)) (i64.const 0))
259263
(assert_return (invoke "clz" (i64.const 1)) (i64.const 63))
260264
(assert_return (invoke "clz" (i64.const 2)) (i64.const 62))
265+
(assert_return (invoke "clz" (i64.const 0x7fffffffffffffff)) (i64.const 1))
261266

262267
(assert_return (invoke "ctz" (i64.const -1)) (i64.const 0))
263268
(assert_return (invoke "ctz" (i64.const 0)) (i64.const 64))
264269
(assert_return (invoke "ctz" (i64.const 0x00008000)) (i64.const 15))
265270
(assert_return (invoke "ctz" (i64.const 0x00010000)) (i64.const 16))
266271
(assert_return (invoke "ctz" (i64.const 0x8000000000000000)) (i64.const 63))
272+
(assert_return (invoke "ctz" (i64.const 0x7fffffffffffffff)) (i64.const 0))
267273

268274
(assert_return (invoke "popcnt" (i64.const -1)) (i64.const 64))
269275
(assert_return (invoke "popcnt" (i64.const 0)) (i64.const 0))
270276
(assert_return (invoke "popcnt" (i64.const 0x00008000)) (i64.const 1))
271277
(assert_return (invoke "popcnt" (i64.const 0x8000800080008000)) (i64.const 4))
278+
(assert_return (invoke "popcnt" (i64.const 0x7fffffffffffffff)) (i64.const 63))
272279
(assert_return (invoke "popcnt" (i64.const 0xAAAAAAAA55555555)) (i64.const 32))
273280
(assert_return (invoke "popcnt" (i64.const 0x99999999AAAAAAAA)) (i64.const 32))
274281
(assert_return (invoke "popcnt" (i64.const 0xDEADBEEFDEADBEEF)) (i64.const 48))
275282

276283
(assert_return (invoke "eqz" (i64.const 0)) (i32.const 1))
277284
(assert_return (invoke "eqz" (i64.const 1)) (i32.const 0))
278285
(assert_return (invoke "eqz" (i64.const 0x8000000000000000)) (i32.const 0))
286+
(assert_return (invoke "eqz" (i64.const 0x7fffffffffffffff)) (i32.const 0))
279287

280288
(assert_return (invoke "eq" (i64.const 0) (i64.const 0)) (i32.const 1))
281289
(assert_return (invoke "eq" (i64.const 1) (i64.const 1)) (i32.const 1))
@@ -284,9 +292,13 @@
284292
(assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 1))
285293
(assert_return (invoke "eq" (i64.const -1) (i64.const -1)) (i32.const 1))
286294
(assert_return (invoke "eq" (i64.const 1) (i64.const 0)) (i32.const 0))
295+
(assert_return (invoke "eq" (i64.const 0) (i64.const 1)) (i32.const 0))
287296
(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 0))
297+
(assert_return (invoke "eq" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 0))
288298
(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 0))
299+
(assert_return (invoke "eq" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 0))
289300
(assert_return (invoke "eq" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 0))
301+
(assert_return (invoke "eq" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 0))
290302

291303
(assert_return (invoke "ne" (i64.const 0) (i64.const 0)) (i32.const 0))
292304
(assert_return (invoke "ne" (i64.const 1) (i64.const 1)) (i32.const 0))
@@ -295,9 +307,13 @@
295307
(assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x7fffffffffffffff)) (i32.const 0))
296308
(assert_return (invoke "ne" (i64.const -1) (i64.const -1)) (i32.const 0))
297309
(assert_return (invoke "ne" (i64.const 1) (i64.const 0)) (i32.const 1))
310+
(assert_return (invoke "ne" (i64.const 0) (i64.const 1)) (i32.const 1))
298311
(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0)) (i32.const 1))
312+
(assert_return (invoke "ne" (i64.const 0) (i64.const 0x8000000000000000)) (i32.const 1))
299313
(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const -1)) (i32.const 1))
314+
(assert_return (invoke "ne" (i64.const -1) (i64.const 0x8000000000000000)) (i32.const 1))
300315
(assert_return (invoke "ne" (i64.const 0x8000000000000000) (i64.const 0x7fffffffffffffff)) (i32.const 1))
316+
(assert_return (invoke "ne" (i64.const 0x7fffffffffffffff) (i64.const 0x8000000000000000)) (i32.const 1))
301317

302318
(assert_return (invoke "lt_s" (i64.const 0) (i64.const 0)) (i32.const 0))
303319
(assert_return (invoke "lt_s" (i64.const 1) (i64.const 1)) (i32.const 0))

ml-proto/test/memory_redundancy.wast

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222

2323
(export "test_redundant_load" $test_redundant_load)
2424
(func $test_redundant_load (result i32)
25-
(i32.load (i32.const 8))
26-
(f32.store (i32.const 5) (f32.const -0.0))
27-
(i32.load (i32.const 8))
25+
(local $t i32)
26+
(local $s i32)
27+
(set_local $t (i32.load (i32.const 8)))
28+
(i32.store (i32.const 5) (i32.const 0x80000000))
29+
(set_local $s (i32.load (i32.const 8)))
30+
(i32.add (get_local $t) (get_local $s))
2831
)
2932

3033
(export "test_dead_store" $test_dead_store)

0 commit comments

Comments
 (0)