table_fill.wast 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. (module
  2. (table $t 10 externref)
  3. (func (export "fill") (param $i i32) (param $r externref) (param $n i32)
  4. (table.fill $t (local.get $i) (local.get $r) (local.get $n))
  5. )
  6. (func (export "fill-abbrev") (param $i i32) (param $r externref) (param $n i32)
  7. (table.fill (local.get $i) (local.get $r) (local.get $n))
  8. )
  9. (func (export "get") (param $i i32) (result externref)
  10. (table.get $t (local.get $i))
  11. )
  12. )
  13. (assert_return (invoke "get" (i32.const 1)) (ref.null extern))
  14. (assert_return (invoke "get" (i32.const 2)) (ref.null extern))
  15. (assert_return (invoke "get" (i32.const 3)) (ref.null extern))
  16. (assert_return (invoke "get" (i32.const 4)) (ref.null extern))
  17. (assert_return (invoke "get" (i32.const 5)) (ref.null extern))
  18. (assert_return (invoke "fill" (i32.const 2) (ref.extern 1) (i32.const 3)))
  19. (assert_return (invoke "get" (i32.const 1)) (ref.null extern))
  20. (assert_return (invoke "get" (i32.const 2)) (ref.extern 1))
  21. (assert_return (invoke "get" (i32.const 3)) (ref.extern 1))
  22. (assert_return (invoke "get" (i32.const 4)) (ref.extern 1))
  23. (assert_return (invoke "get" (i32.const 5)) (ref.null extern))
  24. (assert_return (invoke "fill" (i32.const 4) (ref.extern 2) (i32.const 2)))
  25. (assert_return (invoke "get" (i32.const 3)) (ref.extern 1))
  26. (assert_return (invoke "get" (i32.const 4)) (ref.extern 2))
  27. (assert_return (invoke "get" (i32.const 5)) (ref.extern 2))
  28. (assert_return (invoke "get" (i32.const 6)) (ref.null extern))
  29. (assert_return (invoke "fill" (i32.const 4) (ref.extern 3) (i32.const 0)))
  30. (assert_return (invoke "get" (i32.const 3)) (ref.extern 1))
  31. (assert_return (invoke "get" (i32.const 4)) (ref.extern 2))
  32. (assert_return (invoke "get" (i32.const 5)) (ref.extern 2))
  33. (assert_return (invoke "fill" (i32.const 8) (ref.extern 4) (i32.const 2)))
  34. (assert_return (invoke "get" (i32.const 7)) (ref.null extern))
  35. (assert_return (invoke "get" (i32.const 8)) (ref.extern 4))
  36. (assert_return (invoke "get" (i32.const 9)) (ref.extern 4))
  37. (assert_return (invoke "fill-abbrev" (i32.const 9) (ref.null extern) (i32.const 1)))
  38. (assert_return (invoke "get" (i32.const 8)) (ref.extern 4))
  39. (assert_return (invoke "get" (i32.const 9)) (ref.null extern))
  40. (assert_return (invoke "fill" (i32.const 10) (ref.extern 5) (i32.const 0)))
  41. (assert_return (invoke "get" (i32.const 9)) (ref.null extern))
  42. (assert_trap
  43. (invoke "fill" (i32.const 8) (ref.extern 6) (i32.const 3))
  44. "out of bounds table access"
  45. )
  46. (assert_return (invoke "get" (i32.const 7)) (ref.null extern))
  47. (assert_return (invoke "get" (i32.const 8)) (ref.extern 4))
  48. (assert_return (invoke "get" (i32.const 9)) (ref.null extern))
  49. (assert_trap
  50. (invoke "fill" (i32.const 11) (ref.null extern) (i32.const 0))
  51. "out of bounds table access"
  52. )
  53. (assert_trap
  54. (invoke "fill" (i32.const 11) (ref.null extern) (i32.const 10))
  55. "out of bounds table access"
  56. )
  57. ;; Type errors
  58. (assert_invalid
  59. (module
  60. (table $t 10 externref)
  61. (func $type-index-value-length-empty-vs-i32-i32
  62. (table.fill $t)
  63. )
  64. )
  65. "type mismatch"
  66. )
  67. (assert_invalid
  68. (module
  69. (table $t 10 externref)
  70. (func $type-index-empty-vs-i32
  71. (table.fill $t (ref.null extern) (i32.const 1))
  72. )
  73. )
  74. "type mismatch"
  75. )
  76. (assert_invalid
  77. (module
  78. (table $t 10 externref)
  79. (func $type-value-empty-vs
  80. (table.fill $t (i32.const 1) (i32.const 1))
  81. )
  82. )
  83. "type mismatch"
  84. )
  85. (assert_invalid
  86. (module
  87. (table $t 10 externref)
  88. (func $type-length-empty-vs-i32
  89. (table.fill $t (i32.const 1) (ref.null extern))
  90. )
  91. )
  92. "type mismatch"
  93. )
  94. (assert_invalid
  95. (module
  96. (table $t 0 externref)
  97. (func $type-index-f32-vs-i32
  98. (table.fill $t (f32.const 1) (ref.null extern) (i32.const 1))
  99. )
  100. )
  101. "type mismatch"
  102. )
  103. (assert_invalid
  104. (module
  105. (table $t 0 funcref)
  106. (func $type-value-vs-funcref (param $r externref)
  107. (table.fill $t (i32.const 1) (local.get $r) (i32.const 1))
  108. )
  109. )
  110. "type mismatch"
  111. )
  112. (assert_invalid
  113. (module
  114. (table $t 0 externref)
  115. (func $type-length-f32-vs-i32
  116. (table.fill $t (i32.const 1) (ref.null extern) (f32.const 1))
  117. )
  118. )
  119. "type mismatch"
  120. )
  121. (assert_invalid
  122. (module
  123. (table $t1 1 externref)
  124. (table $t2 1 funcref)
  125. (func $type-value-externref-vs-funcref-multi (param $r externref)
  126. (table.fill $t2 (i32.const 0) (local.get $r) (i32.const 1))
  127. )
  128. )
  129. "type mismatch"
  130. )
  131. (assert_invalid
  132. (module
  133. (table $t 1 externref)
  134. (func $type-result-empty-vs-num (result i32)
  135. (table.fill $t (i32.const 0) (ref.null extern) (i32.const 1))
  136. )
  137. )
  138. "type mismatch"
  139. )