summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt38
-rw-r--r--test/lit/arrays.wast72
-rw-r--r--test/spec/array-new-data.wast79
-rw-r--r--test/spec/array-new-elem.wast48
4 files changed, 212 insertions, 25 deletions
diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt
index 89c49f2d5..9200bac2a 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -97,25 +97,25 @@ StructNewId: 60
StructGetId: 61
StructSetId: 62
ArrayNewId: 63
-ArrayInitId: 64
-ArrayGetId: 65
-ArraySetId: 66
-ArrayLenId: 67
-ArrayCopy: 68
-RefAs: 69
-StringNew: 70
-StringConst: 71
-StringMeasure: 72
-StringEncode: 73
-StringConcat: 74
-StringEq: 75
-StringAs: 76
-StringWTF8Advance: 77
-StringWTF16Get: 78
-StringIterNext: 79
-StringIterMove: 80
-StringSliceWTF: 81
-StringSliceIter: 82
+ArrayInitId: 65
+ArrayGetId: 66
+ArraySetId: 67
+ArrayLenId: 68
+ArrayCopy: 69
+RefAs: 70
+StringNew: 71
+StringConst: 72
+StringMeasure: 73
+StringEncode: 74
+StringConcat: 75
+StringEq: 76
+StringAs: 77
+StringWTF8Advance: 78
+StringWTF16Get: 79
+StringIterNext: 80
+StringIterMove: 81
+StringSliceWTF: 82
+StringSliceIter: 83
getExpressionInfo={"id":15,"type":4,"op":6}
(f32.neg
(f32.const -33.61199951171875)
diff --git a/test/lit/arrays.wast b/test/lit/arrays.wast
index 31aead1cd..4a262ef13 100644
--- a/test/lit/arrays.wast
+++ b/test/lit/arrays.wast
@@ -10,24 +10,46 @@
;; RUN: wasm-opt %s -all -S -o - | wasm-opt -all -S -o - | filecheck %s
(module
- (type $byte-array (array (mut i8)))
;; CHECK: (type $arrayref_=>_i32 (func (param arrayref) (result i32)))
;; CHECK: (type $ref|array|_=>_i32 (func (param (ref array)) (result i32)))
;; CHECK: (type $nullref_=>_i32 (func (param nullref) (result i32)))
- ;; CHECK: (func $len (param $a (ref array)) (result i32)
- ;; CHECK-NEXT: (array.len
- ;; CHECK-NEXT: (local.get $a)
- ;; CHECK-NEXT: )
- ;; CHECK-NEXT: )
+ ;; CHECK: (type $none_=>_ref|$byte-array| (func (result (ref $byte-array))))
+
+ ;; CHECK: (type $none_=>_ref|$func-array| (func (result (ref $func-array))))
+
+ ;; CHECK: (type $byte-array (array (mut i8)))
;; ROUNDTRIP: (type $arrayref_=>_i32 (func (param arrayref) (result i32)))
;; ROUNDTRIP: (type $ref|array|_=>_i32 (func (param (ref array)) (result i32)))
;; ROUNDTRIP: (type $nullref_=>_i32 (func (param nullref) (result i32)))
+ ;; ROUNDTRIP: (type $none_=>_ref|$byte-array| (func (result (ref $byte-array))))
+
+ ;; ROUNDTRIP: (type $none_=>_ref|$func-array| (func (result (ref $func-array))))
+
+ ;; ROUNDTRIP: (type $byte-array (array (mut i8)))
+ (type $byte-array (array (mut i8)))
+ ;; CHECK: (type $func-array (array (mut funcref)))
+ ;; ROUNDTRIP: (type $func-array (array (mut funcref)))
+ (type $func-array (array (mut funcref)))
+
+ ;; CHECK: (data "hello")
+ ;; ROUNDTRIP: (data "hello")
+ (data "hello")
+ ;; CHECK: (elem func $len $impossible-len $unreachable-len)
+ ;; ROUNDTRIP: (elem func $len $impossible-len $unreachable-len)
+ (elem func $len $impossible-len $unreachable-len)
+
+
+ ;; CHECK: (func $len (param $a (ref array)) (result i32)
+ ;; CHECK-NEXT: (array.len
+ ;; CHECK-NEXT: (local.get $a)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; ROUNDTRIP: (func $len (param $a (ref array)) (result i32)
;; ROUNDTRIP-NEXT: (array.len
;; ROUNDTRIP-NEXT: (local.get $a)
@@ -85,4 +107,42 @@
(local.get $a)
)
)
+
+ ;; CHECK: (func $new-data (result (ref $byte-array))
+ ;; CHECK-NEXT: (array.new_data $byte-array 0
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; ROUNDTRIP: (func $new-data (result (ref $byte-array))
+ ;; ROUNDTRIP-NEXT: (array.new_data $byte-array 0
+ ;; ROUNDTRIP-NEXT: (i32.const 0)
+ ;; ROUNDTRIP-NEXT: (i32.const 5)
+ ;; ROUNDTRIP-NEXT: )
+ ;; ROUNDTRIP-NEXT: )
+ (func $new-data (result (ref $byte-array))
+ (array.new_data $byte-array 0
+ (i32.const 0)
+ (i32.const 5)
+ )
+ )
+
+ ;; CHECK: (func $new-elem (result (ref $func-array))
+ ;; CHECK-NEXT: (array.new_elem $func-array 0
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; ROUNDTRIP: (func $new-elem (result (ref $func-array))
+ ;; ROUNDTRIP-NEXT: (array.new_elem $func-array 0
+ ;; ROUNDTRIP-NEXT: (i32.const 0)
+ ;; ROUNDTRIP-NEXT: (i32.const 3)
+ ;; ROUNDTRIP-NEXT: )
+ ;; ROUNDTRIP-NEXT: )
+ (func $new-elem (result (ref $func-array))
+ (array.new_elem $func-array 0
+ (i32.const 0)
+ (i32.const 3)
+ )
+ )
)
diff --git a/test/spec/array-new-data.wast b/test/spec/array-new-data.wast
new file mode 100644
index 000000000..8ef62cb87
--- /dev/null
+++ b/test/spec/array-new-data.wast
@@ -0,0 +1,79 @@
+(module
+ (type $vec (array i8))
+ (type $mvec (array (mut i8)))
+
+ (data "\00\01\02\03\04")
+
+ (func $new (export "new") (result (ref $vec))
+ (array.new_data $vec 0 (i32.const 1) (i32.const 3))
+ )
+
+ (func $get (param $i i32) (param $v (ref $vec)) (result i32)
+ (array.get_u $vec (local.get $v) (local.get $i))
+ )
+ (func (export "get") (param $i i32) (result i32)
+ (call $get (local.get $i) (call $new))
+ )
+
+ (func $set_get (param $i i32) (param $v (ref $mvec)) (param $y i32) (result i32)
+ (array.set $mvec (local.get $v) (local.get $i) (local.get $y))
+ (array.get_u $mvec (local.get $v) (local.get $i))
+ )
+ (func (export "set_get") (param $i i32) (param $y i32) (result i32)
+ (call $set_get (local.get $i)
+ (array.new_data $mvec 0 (i32.const 1) (i32.const 3))
+ (local.get $y)
+ )
+ )
+
+ (func $len (param $v (ref array)) (result i32)
+ (array.len (local.get $v))
+ )
+ (func (export "len") (result i32)
+ (call $len (call $new))
+ )
+)
+
+(assert_return (invoke "get" (i32.const 0)) (i32.const 1))
+(assert_return (invoke "set_get" (i32.const 1) (i32.const 7)) (i32.const 7))
+(assert_return (invoke "len") (i32.const 3))
+
+(module
+ (type $vec (array i32))
+ (type $mvec (array (mut i8)))
+
+ (data "\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00")
+
+ (func $new (export "new") (result (ref $vec))
+ (array.new_data $vec 0 (i32.const 1) (i32.const 3))
+ )
+
+ (func $get (param $i i32) (param $v (ref $vec)) (result i32)
+ (array.get $vec (local.get $v) (local.get $i))
+ )
+ (func (export "get") (param $i i32) (result i32)
+ (call $get (local.get $i) (call $new))
+ )
+
+ (func $set_get (param $i i32) (param $v (ref $mvec)) (param $y i32) (result i32)
+ (array.set $mvec (local.get $v) (local.get $i) (local.get $y))
+ (array.get $mvec (local.get $v) (local.get $i))
+ )
+ (func (export "set_get") (param $i i32) (param $y i32) (result i32)
+ (call $set_get (local.get $i)
+ (array.new_data $mvec 0 (i32.const 1) (i32.const 3))
+ (local.get $y)
+ )
+ )
+
+ (func $len (param $v (ref array)) (result i32)
+ (array.len (local.get $v))
+ )
+ (func (export "len") (result i32)
+ (call $len (call $new))
+ )
+)
+
+(assert_return (invoke "get" (i32.const 0)) (i32.const 1))
+(assert_return (invoke "set_get" (i32.const 1) (i32.const 7)) (i32.const 7))
+(assert_return (invoke "len") (i32.const 3))
diff --git a/test/spec/array-new-elem.wast b/test/spec/array-new-elem.wast
new file mode 100644
index 000000000..a61122bd6
--- /dev/null
+++ b/test/spec/array-new-elem.wast
@@ -0,0 +1,48 @@
+(module
+ (type $vec (array funcref))
+ (type $mvec (array (mut funcref)))
+ (type $f (func (result i32)))
+
+ (elem func $ret0 $ret1 $ret2 $ret3 $ret4)
+
+ (func $ret0 (type $f) (i32.const 0))
+ (func $ret1 (type $f) (i32.const 1))
+ (func $ret2 (type $f) (i32.const 2))
+ (func $ret3 (type $f) (i32.const 3))
+ (func $ret4 (type $f) (i32.const 4))
+
+ (func $new (export "new") (result (ref $vec))
+ (array.new_elem $vec 0 (i32.const 1) (i32.const 3))
+ )
+
+ (func $get (param $i i32) (param $v (ref $vec)) (result i32)
+ (call_ref $f (ref.cast_static $f (array.get $vec (local.get $v) (local.get $i))))
+ )
+ (func (export "get") (param $i i32) (result i32)
+ (call $get (local.get $i) (call $new))
+ )
+
+ (func $set_get (param $i i32) (param $v (ref $mvec)) (param $y i32) (result i32)
+ (array.set $mvec (local.get $v) (local.get $i) (array.get $mvec (local.get $v) (local.get $y)))
+ (call_ref $f (ref.cast_static $f (array.get $mvec (local.get $v) (local.get $i))))
+ )
+ (func (export "set_get") (param $i i32) (param $y i32) (result i32)
+ (call $set_get
+ (local.get $i)
+ (array.new_elem $mvec 0 (i32.const 1) (i32.const 3))
+ (local.get $y)
+ )
+ )
+
+ (func $len (param $v (ref array)) (result i32)
+ (array.len (local.get $v))
+ )
+ (func (export "len") (result i32)
+ (call $len (call $new))
+ )
+)
+
+(assert_return (invoke "get" (i32.const 0)) (i32.const 1))
+(assert_return (invoke "get" (i32.const 1)) (i32.const 2))
+(assert_return (invoke "set_get" (i32.const 0) (i32.const 2)) (i32.const 3))
+(assert_return (invoke "len") (i32.const 3))