diff options
Diffstat (limited to 'test/spec/bulk-array.wast')
-rw-r--r-- | test/spec/bulk-array.wast | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/test/spec/bulk-array.wast b/test/spec/bulk-array.wast new file mode 100644 index 000000000..06c341000 --- /dev/null +++ b/test/spec/bulk-array.wast @@ -0,0 +1,225 @@ +(module + ;; Array types used in tests. + (type $i8 (array (mut i8))) + (type $i16 (array (mut i16))) + (type $i32 (array (mut i32))) + (type $anyref (array (mut anyref))) + (type $funcref (array (mut funcref))) + (type $externref (array (mut externref))) + + ;; Array values used in tests. Reset in between tests with the "reset" + ;; function. + (global $i8 (mut (ref null $i8)) (ref.null none)) + (global $i16 (mut (ref null $i16)) (ref.null none)) + (global $i32 (mut (ref null $i32)) (ref.null none)) + (global $anyref (mut (ref null $anyref)) (ref.null none)) + (global $funcref (mut (ref null $funcref)) (ref.null none)) + (global $externref (mut (ref null $externref)) (ref.null none)) + + ;; GC objects with distinct identities used in anyref tests. + (global $g1 (export "g1") (mut anyref) (array.new_fixed $i8)) + (global $g2 (export "g2") (mut anyref) (array.new_fixed $i8)) + (global $g3 (export "g3") (mut anyref) (array.new_fixed $i8)) + (global $g4 (export "g4") (mut anyref) (array.new_fixed $i8)) + (global $g5 (export "g5") (mut anyref) (array.new_fixed $i8)) + + ;; Functions with distinct return values used in funcref tests. + (func $f1 (result i32) (i32.const 0)) + (func $f2 (result i32) (i32.const 1)) + (func $f3 (result i32) (i32.const 2)) + (func $f4 (result i32) (i32.const 3)) + (func $f5 (result i32) (i32.const 4)) + + ;; Passive element segment used in array.init_elem tests. + (elem $elem anyref + (array.new_fixed $i8) + (array.new_fixed $i8) + (array.new_fixed $i8) + (array.new_fixed $i8) + (array.new_fixed $i8)) + + (table $tab anyref 5 5) + + ;; Resets the array globals to known states. + (func (export "reset") + (global.set $i8 + (array.new_fixed $i8 + (i32.const 0) + (i32.const 1) + (i32.const 2) + (i32.const 3) + (i32.const 4))) + (global.set $i16 + (array.new_fixed $i16 + (i32.const 0) + (i32.const 1) + (i32.const 2) + (i32.const 3) + (i32.const 4))) + (global.set $i32 + (array.new_fixed $i32 + (i32.const 0) + (i32.const 1) + (i32.const 2) + (i32.const 3) + (i32.const 4))) + (global.set $anyref + (array.new_fixed $anyref + (global.get $g1) + (global.get $g2) + (global.get $g3) + (global.get $g4) + (global.get $g5))) + (global.set $funcref + (array.new_fixed $funcref + (ref.func $f1) + (ref.func $f2) + (ref.func $f3) + (ref.func $f4) + (ref.func $f5))) + (global.set $externref + (array.new_fixed $externref + (extern.externalize (global.get $g1)) + (extern.externalize (global.get $g2)) + (extern.externalize (global.get $g3)) + (extern.externalize (global.get $g4)) + (extern.externalize (global.get $g5))))) +) + +;; array.fill + +;; basic i8 +;; basic i16 +;; basic i32 +;; basic anyref +;; basic funcref +;; basic externref +;; basic ref subtype +;; basic ref nullability subtype + +;; zero size in bounds +;; zero size at bounds +;; zero size out of bounds traps + +;; out of bounds index traps +;; out of bounds size traps +;; out of bounds index + size traps + +;; null destination traps + +;; immutable field invalid + +;; ref supertype invalid +;; ref nullability supertype invalid + +;; array.copy + +;; basic i8 +;; basic i16 +;; basic i32 +;; basic anyref +;; basic funcref +;; basic externref +;; basic ref subtype +;; basic ref nullability subtype + +;; same i8 no overlap +;; same i8 overlap src first +;; same i8 overlap dest first +;; same i8 overlap complete + +;; same i32 no overlap +;; same i32 overlap src first +;; same i32 overlap dest first +;; same i32 overlap complete + +;; same anyref no overlap +;; same anyref overloap +;; same anyref src first +;; same anyref dest first +;; same anyref overlap complete + +;; zero size in bounds +;; zero size at dest bounds +;; zero size at src bounds +;; zero size out of dest bounds traps +;; zero size out of src bounds traps + +;; out of bounds dest index traps +;; out of bounds src index traps +;; out of bounds dest size traps +;; out of bounds src index traps +;; out of bounds dest index + size traps +;; out of bounds src index + size traps + +;; null dest traps +;; null src traps + +;; immutable dest field invalid +;; immutable src field ok + +;; ref supertype invalid +;; ref nullability supertype invalid + +;; array.init_data + +;; basic i8 +;; basic i16 +;; basic i32 +;; basic f32 + +;; zero size in bounds +;; zero size at dest bounds +;; zero size at src bounds +;; zero size out of dest bounds traps +;; zero size out of src bounds traps + +;; out of bounds dest index traps +;; out of bounds src index traps +;; out of bounds dest size traps +;; out of bounds src size traps +;; out of bounds src multiplied size traps +;; out of bounds dest index + size traps +;; out of bounds src index + size traps +;; out of bounds src index + multiplied size traps + +;; null dest traps +;; segment dropped traps + +;; immutable dest field invalid + +;; ref supertype invalid +;; ref nullability supertype invalid + +;; out of bounds segment index invalid + +;; array.init_elem + +;; basic anyref +;; basic funcref +;; basic externref +;; basic ref subtype +;; basic ref nullability subtype + +;; zero size in bounds +;; zero size at dest bounds +;; zero size at src bounds +;; zero size out of dest bounds traps +;; zero size out of src bounds traps + +;; out of bounds dest index traps +;; out of bounds src index traps +;; out of bounds dest size traps +;; out of bounds src size traps +;; out of bounds dest index + size traps +;; out of bounds src index + size traps + +;; null dest traps +;; segment dropped traps + +;; immutable dest field invalid + +;; ref supertype invalid +;; ref nullability supertype invalid + +;; out of bounds segment index invalid |