ref_eq.wast 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. (module
  2. (type $st (sub (struct)))
  3. (type $st' (sub (struct (field i32))))
  4. (type $at (array i8))
  5. (type $st-sub1 (sub $st (struct)))
  6. (type $st-sub2 (sub $st (struct)))
  7. (type $st'-sub1 (sub $st' (struct (field i32))))
  8. (type $st'-sub2 (sub $st' (struct (field i32))))
  9. (table 20 (ref null eq))
  10. (func (export "init")
  11. (table.set (i32.const 0) (ref.null eq))
  12. (table.set (i32.const 1) (ref.null i31))
  13. (table.set (i32.const 2) (ref.i31 (i32.const 7)))
  14. (table.set (i32.const 3) (ref.i31 (i32.const 7)))
  15. (table.set (i32.const 4) (ref.i31 (i32.const 8)))
  16. (table.set (i32.const 5) (struct.new_default $st))
  17. (table.set (i32.const 6) (struct.new_default $st))
  18. (table.set (i32.const 7) (array.new_default $at (i32.const 0)))
  19. (table.set (i32.const 8) (array.new_default $at (i32.const 0)))
  20. )
  21. (func (export "eq") (param $i i32) (param $j i32) (result i32)
  22. (ref.eq (table.get (local.get $i)) (table.get (local.get $j)))
  23. )
  24. )
  25. (invoke "init")
  26. (assert_return (invoke "eq" (i32.const 0) (i32.const 0)) (i32.const 1))
  27. (assert_return (invoke "eq" (i32.const 0) (i32.const 1)) (i32.const 1))
  28. (assert_return (invoke "eq" (i32.const 0) (i32.const 2)) (i32.const 0))
  29. (assert_return (invoke "eq" (i32.const 0) (i32.const 3)) (i32.const 0))
  30. (assert_return (invoke "eq" (i32.const 0) (i32.const 4)) (i32.const 0))
  31. (assert_return (invoke "eq" (i32.const 0) (i32.const 5)) (i32.const 0))
  32. (assert_return (invoke "eq" (i32.const 0) (i32.const 6)) (i32.const 0))
  33. (assert_return (invoke "eq" (i32.const 0) (i32.const 7)) (i32.const 0))
  34. (assert_return (invoke "eq" (i32.const 0) (i32.const 8)) (i32.const 0))
  35. (assert_return (invoke "eq" (i32.const 1) (i32.const 0)) (i32.const 1))
  36. (assert_return (invoke "eq" (i32.const 1) (i32.const 1)) (i32.const 1))
  37. (assert_return (invoke "eq" (i32.const 1) (i32.const 2)) (i32.const 0))
  38. (assert_return (invoke "eq" (i32.const 1) (i32.const 3)) (i32.const 0))
  39. (assert_return (invoke "eq" (i32.const 1) (i32.const 4)) (i32.const 0))
  40. (assert_return (invoke "eq" (i32.const 1) (i32.const 5)) (i32.const 0))
  41. (assert_return (invoke "eq" (i32.const 1) (i32.const 6)) (i32.const 0))
  42. (assert_return (invoke "eq" (i32.const 1) (i32.const 7)) (i32.const 0))
  43. (assert_return (invoke "eq" (i32.const 1) (i32.const 8)) (i32.const 0))
  44. (assert_return (invoke "eq" (i32.const 2) (i32.const 0)) (i32.const 0))
  45. (assert_return (invoke "eq" (i32.const 2) (i32.const 1)) (i32.const 0))
  46. (assert_return (invoke "eq" (i32.const 2) (i32.const 2)) (i32.const 1))
  47. (assert_return (invoke "eq" (i32.const 2) (i32.const 3)) (i32.const 1))
  48. (assert_return (invoke "eq" (i32.const 2) (i32.const 4)) (i32.const 0))
  49. (assert_return (invoke "eq" (i32.const 2) (i32.const 5)) (i32.const 0))
  50. (assert_return (invoke "eq" (i32.const 2) (i32.const 6)) (i32.const 0))
  51. (assert_return (invoke "eq" (i32.const 2) (i32.const 7)) (i32.const 0))
  52. (assert_return (invoke "eq" (i32.const 2) (i32.const 8)) (i32.const 0))
  53. (assert_return (invoke "eq" (i32.const 3) (i32.const 0)) (i32.const 0))
  54. (assert_return (invoke "eq" (i32.const 3) (i32.const 1)) (i32.const 0))
  55. (assert_return (invoke "eq" (i32.const 3) (i32.const 2)) (i32.const 1))
  56. (assert_return (invoke "eq" (i32.const 3) (i32.const 3)) (i32.const 1))
  57. (assert_return (invoke "eq" (i32.const 3) (i32.const 4)) (i32.const 0))
  58. (assert_return (invoke "eq" (i32.const 3) (i32.const 5)) (i32.const 0))
  59. (assert_return (invoke "eq" (i32.const 3) (i32.const 6)) (i32.const 0))
  60. (assert_return (invoke "eq" (i32.const 3) (i32.const 7)) (i32.const 0))
  61. (assert_return (invoke "eq" (i32.const 3) (i32.const 8)) (i32.const 0))
  62. (assert_return (invoke "eq" (i32.const 4) (i32.const 0)) (i32.const 0))
  63. (assert_return (invoke "eq" (i32.const 4) (i32.const 1)) (i32.const 0))
  64. (assert_return (invoke "eq" (i32.const 4) (i32.const 2)) (i32.const 0))
  65. (assert_return (invoke "eq" (i32.const 4) (i32.const 3)) (i32.const 0))
  66. (assert_return (invoke "eq" (i32.const 4) (i32.const 4)) (i32.const 1))
  67. (assert_return (invoke "eq" (i32.const 4) (i32.const 5)) (i32.const 0))
  68. (assert_return (invoke "eq" (i32.const 4) (i32.const 6)) (i32.const 0))
  69. (assert_return (invoke "eq" (i32.const 4) (i32.const 7)) (i32.const 0))
  70. (assert_return (invoke "eq" (i32.const 4) (i32.const 8)) (i32.const 0))
  71. (assert_return (invoke "eq" (i32.const 5) (i32.const 0)) (i32.const 0))
  72. (assert_return (invoke "eq" (i32.const 5) (i32.const 1)) (i32.const 0))
  73. (assert_return (invoke "eq" (i32.const 5) (i32.const 2)) (i32.const 0))
  74. (assert_return (invoke "eq" (i32.const 5) (i32.const 3)) (i32.const 0))
  75. (assert_return (invoke "eq" (i32.const 5) (i32.const 4)) (i32.const 0))
  76. (assert_return (invoke "eq" (i32.const 5) (i32.const 5)) (i32.const 1))
  77. (assert_return (invoke "eq" (i32.const 5) (i32.const 6)) (i32.const 0))
  78. (assert_return (invoke "eq" (i32.const 5) (i32.const 7)) (i32.const 0))
  79. (assert_return (invoke "eq" (i32.const 5) (i32.const 8)) (i32.const 0))
  80. (assert_return (invoke "eq" (i32.const 6) (i32.const 0)) (i32.const 0))
  81. (assert_return (invoke "eq" (i32.const 6) (i32.const 1)) (i32.const 0))
  82. (assert_return (invoke "eq" (i32.const 6) (i32.const 2)) (i32.const 0))
  83. (assert_return (invoke "eq" (i32.const 6) (i32.const 3)) (i32.const 0))
  84. (assert_return (invoke "eq" (i32.const 6) (i32.const 4)) (i32.const 0))
  85. (assert_return (invoke "eq" (i32.const 6) (i32.const 5)) (i32.const 0))
  86. (assert_return (invoke "eq" (i32.const 6) (i32.const 6)) (i32.const 1))
  87. (assert_return (invoke "eq" (i32.const 6) (i32.const 7)) (i32.const 0))
  88. (assert_return (invoke "eq" (i32.const 6) (i32.const 8)) (i32.const 0))
  89. (assert_return (invoke "eq" (i32.const 7) (i32.const 0)) (i32.const 0))
  90. (assert_return (invoke "eq" (i32.const 7) (i32.const 1)) (i32.const 0))
  91. (assert_return (invoke "eq" (i32.const 7) (i32.const 2)) (i32.const 0))
  92. (assert_return (invoke "eq" (i32.const 7) (i32.const 3)) (i32.const 0))
  93. (assert_return (invoke "eq" (i32.const 7) (i32.const 4)) (i32.const 0))
  94. (assert_return (invoke "eq" (i32.const 7) (i32.const 5)) (i32.const 0))
  95. (assert_return (invoke "eq" (i32.const 7) (i32.const 6)) (i32.const 0))
  96. (assert_return (invoke "eq" (i32.const 7) (i32.const 7)) (i32.const 1))
  97. (assert_return (invoke "eq" (i32.const 7) (i32.const 8)) (i32.const 0))
  98. (assert_return (invoke "eq" (i32.const 8) (i32.const 0)) (i32.const 0))
  99. (assert_return (invoke "eq" (i32.const 8) (i32.const 1)) (i32.const 0))
  100. (assert_return (invoke "eq" (i32.const 8) (i32.const 2)) (i32.const 0))
  101. (assert_return (invoke "eq" (i32.const 8) (i32.const 3)) (i32.const 0))
  102. (assert_return (invoke "eq" (i32.const 8) (i32.const 4)) (i32.const 0))
  103. (assert_return (invoke "eq" (i32.const 8) (i32.const 5)) (i32.const 0))
  104. (assert_return (invoke "eq" (i32.const 8) (i32.const 6)) (i32.const 0))
  105. (assert_return (invoke "eq" (i32.const 8) (i32.const 7)) (i32.const 0))
  106. (assert_return (invoke "eq" (i32.const 8) (i32.const 8)) (i32.const 1))
  107. (assert_invalid
  108. (module
  109. (func (export "eq") (param $r (ref any)) (result i32)
  110. (ref.eq (local.get $r) (local.get $r))
  111. )
  112. )
  113. "type mismatch"
  114. )
  115. (assert_invalid
  116. (module
  117. (func (export "eq") (param $r (ref null any)) (result i32)
  118. (ref.eq (local.get $r) (local.get $r))
  119. )
  120. )
  121. "type mismatch"
  122. )
  123. (assert_invalid
  124. (module
  125. (func (export "eq") (param $r (ref func)) (result i32)
  126. (ref.eq (local.get $r) (local.get $r))
  127. )
  128. )
  129. "type mismatch"
  130. )
  131. (assert_invalid
  132. (module
  133. (func (export "eq") (param $r (ref null func)) (result i32)
  134. (ref.eq (local.get $r) (local.get $r))
  135. )
  136. )
  137. "type mismatch"
  138. )
  139. (assert_invalid
  140. (module
  141. (func (export "eq") (param $r (ref extern)) (result i32)
  142. (ref.eq (local.get $r) (local.get $r))
  143. )
  144. )
  145. "type mismatch"
  146. )
  147. (assert_invalid
  148. (module
  149. (func (export "eq") (param $r (ref null extern)) (result i32)
  150. (ref.eq (local.get $r) (local.get $r))
  151. )
  152. )
  153. "type mismatch"
  154. )