summaryrefslogtreecommitdiff
path: root/test/spec
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-07-17 18:02:25 -0400
committerGitHub <noreply@github.com>2024-07-17 15:02:25 -0700
commit1e7be1ea067d3e2f3044d49392637325abcd4a01 (patch)
treee57830e1b1f254c71f4c755abf27e368cf06aa59 /test/spec
parent4dee6fe0a920f95d31b0921a22a8f5f979e2e14d (diff)
downloadbinaryen-1e7be1ea067d3e2f3044d49392637325abcd4a01.tar.gz
binaryen-1e7be1ea067d3e2f3044d49392637325abcd4a01.tar.bz2
binaryen-1e7be1ea067d3e2f3044d49392637325abcd4a01.zip
Update the ref_eq.wast spec test to match upstream (#6762)
Diffstat (limited to 'test/spec')
-rw-r--r--test/spec/ref_eq.wast171
1 files changed, 164 insertions, 7 deletions
diff --git a/test/spec/ref_eq.wast b/test/spec/ref_eq.wast
index a5224834c..001efd69f 100644
--- a/test/spec/ref_eq.wast
+++ b/test/spec/ref_eq.wast
@@ -1,11 +1,168 @@
(module
- (func $compare (export "compare") (param $x eqref) (param $y eqref) (result i32)
- (ref.eq
- (local.get $x)
- (local.get $y)
- )
+ (type $st (sub (struct)))
+ (type $st' (sub (struct (field i32))))
+ (type $at (array i8))
+ (type $st-sub1 (sub $st (struct)))
+ (type $st-sub2 (sub $st (struct)))
+ (type $st'-sub1 (sub $st' (struct (field i32))))
+ (type $st'-sub2 (sub $st' (struct (field i32))))
+
+ (table 20 (ref null eq))
+
+ (func (export "init")
+ (table.set (i32.const 0) (ref.null eq))
+ (table.set (i32.const 1) (ref.null i31))
+ (table.set (i32.const 2) (ref.i31 (i32.const 7)))
+ (table.set (i32.const 3) (ref.i31 (i32.const 7)))
+ (table.set (i32.const 4) (ref.i31 (i32.const 8)))
+ (table.set (i32.const 5) (struct.new_default $st))
+ (table.set (i32.const 6) (struct.new_default $st))
+ (table.set (i32.const 7) (array.new_default $at (i32.const 0)))
+ (table.set (i32.const 8) (array.new_default $at (i32.const 0)))
+ )
+
+ (func (export "eq") (param $i i32) (param $j i32) (result i32)
+ (ref.eq (table.get (local.get $i)) (table.get (local.get $j)))
)
)
-;; All nulls compare equal, regardless of their type.
-(assert_return (invoke "compare" (ref.null none) (ref.null eq)) (i32.const 1))
+(invoke "init")
+
+(assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 0) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 1) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 2) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 2)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 3)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 2) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 3) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 2)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 3)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 3) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 4) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 4)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 4) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 5) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 5)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 5) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 6) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 6)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 6) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 7) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 7)) (i32.const 1))
+(assert_return (invoke "eq" (i32.const 7) (i32.const 8)) (i32.const 0))
+
+(assert_return (invoke "eq" (i32.const 8) (i32.const 0)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 1)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 2)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 3)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 4)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 5)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 6)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 7)) (i32.const 0))
+(assert_return (invoke "eq" (i32.const 8) (i32.const 8)) (i32.const 1))
+
+(assert_invalid
+ (module
+ (func (export "eq") (param $r (ref any)) (result i32)
+ (ref.eq (local.get $r) (local.get $r))
+ )
+ )
+ "type mismatch"
+)
+(assert_invalid
+ (module
+ (func (export "eq") (param $r (ref null any)) (result i32)
+ (ref.eq (local.get $r) (local.get $r))
+ )
+ )
+ "type mismatch"
+)
+(assert_invalid
+ (module
+ (func (export "eq") (param $r (ref func)) (result i32)
+ (ref.eq (local.get $r) (local.get $r))
+ )
+ )
+ "type mismatch"
+)
+(assert_invalid
+ (module
+ (func (export "eq") (param $r (ref null func)) (result i32)
+ (ref.eq (local.get $r) (local.get $r))
+ )
+ )
+ "type mismatch"
+)
+(assert_invalid
+ (module
+ (func (export "eq") (param $r (ref extern)) (result i32)
+ (ref.eq (local.get $r) (local.get $r))
+ )
+ )
+ "type mismatch"
+)
+(assert_invalid
+ (module
+ (func (export "eq") (param $r (ref null extern)) (result i32)
+ (ref.eq (local.get $r) (local.get $r))
+ )
+ )
+ "type mismatch"
+)