summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/binaryen.js/exception-handling.js.txt8
-rw-r--r--test/binaryen.js/kitchen-sink.js1
-rw-r--r--test/binaryen.js/kitchen-sink.js.txt43
-rw-r--r--test/example/c-api-kitchen-sink.c2
-rw-r--r--test/example/c-api-kitchen-sink.txt1
-rw-r--r--test/lit/table-operations.wast20
-rw-r--r--test/spec/table_size.wast88
7 files changed, 138 insertions, 25 deletions
diff --git a/test/binaryen.js/exception-handling.js.txt b/test/binaryen.js/exception-handling.js.txt
index 75ca8b5cb..09d8659a0 100644
--- a/test/binaryen.js/exception-handling.js.txt
+++ b/test/binaryen.js/exception-handling.js.txt
@@ -34,7 +34,7 @@
)
)
-getExpressionInfo(throw) = {"id":48,"type":1,"tag":"e"}
-getExpressionInfo(rethrow) = {"id":49,"type":1,"target":"l0"}
-getExpressionInfo(try_catch) = {"id":47,"type":1,"name":"l0","hasCatchAll":0,"delegateTarget":"","isDelegate":0}
-getExpressionInfo(try_delegate) = {"id":47,"type":0,"name":"try_outer","hasCatchAll":1,"delegateTarget":"","isDelegate":0}
+getExpressionInfo(throw) = {"id":49,"type":1,"tag":"e"}
+getExpressionInfo(rethrow) = {"id":50,"type":1,"target":"l0"}
+getExpressionInfo(try_catch) = {"id":48,"type":1,"name":"l0","hasCatchAll":0,"delegateTarget":"","isDelegate":0}
+getExpressionInfo(try_delegate) = {"id":48,"type":0,"name":"try_outer","hasCatchAll":1,"delegateTarget":"","isDelegate":0}
diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js
index f2da5d0a0..10d97cc0a 100644
--- a/test/binaryen.js/kitchen-sink.js
+++ b/test/binaryen.js/kitchen-sink.js
@@ -166,6 +166,7 @@ function test_ids() {
console.log("RefEqId: " + binaryen.RefEqId);
console.log("TableGetId: " + binaryen.TableGetId);
console.log("TableSetId: " + binaryen.TableSetId);
+ console.log("TableSizeId: " + binaryen.TableSizeId);
console.log("TryId: " + binaryen.TryId);
console.log("ThrowId: " + binaryen.ThrowId);
console.log("RethrowId: " + binaryen.RethrowId);
diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt
index 54a18cd54..f54991f0b 100644
--- a/test/binaryen.js/kitchen-sink.js.txt
+++ b/test/binaryen.js/kitchen-sink.js.txt
@@ -90,27 +90,28 @@ RefFuncId: 43
RefEqId: 44
TableGetId: 45
TableSetId: 46
-TryId: 47
-ThrowId: 48
-RethrowId: 49
-TupleMakeId: 50
-TupleExtractId: 51
-I31NewId: 52
-I31GetId: 53
-CallRefId: 54
-RefTestId: 55
-RefCastId: 56
-BrOnId: 57
-RttCanonId: 58
-RttSubId: 59
-StructNewId: 60
-StructGetId: 61
-StructSetId: 62
-ArrayNewId: 63
-ArrayInitId: 64
-ArrayGetId: 65
-ArraySetId: 66
-ArrayLenId: 67
+TableSizeId: 47
+TryId: 48
+ThrowId: 49
+RethrowId: 50
+TupleMakeId: 51
+TupleExtractId: 52
+I31NewId: 53
+I31GetId: 54
+CallRefId: 55
+RefTestId: 56
+RefCastId: 57
+BrOnId: 58
+RttCanonId: 59
+RttSubId: 60
+StructNewId: 61
+StructGetId: 62
+StructSetId: 63
+ArrayNewId: 64
+ArrayInitId: 65
+ArrayGetId: 66
+ArraySetId: 67
+ArrayLenId: 68
getExpressionInfo={"id":15,"type":4,"op":6}
(f32.neg
(f32.const -33.61199951171875)
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c
index 894fc1454..1e762579e 100644
--- a/test/example/c-api-kitchen-sink.c
+++ b/test/example/c-api-kitchen-sink.c
@@ -1026,6 +1026,8 @@ void test_core() {
BinaryenExpressionPrint(funcrefExpr2);
+ BinaryenExpressionPrint(BinaryenTableSize(module, "0"));
+
// Memory. One per module
const char* segments[] = {"hello, world", "I am passive"};
diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt
index c28e0536d..b1afb9954 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -38,6 +38,7 @@ BinaryenFeatureAll: 32767
(table.get $0
(i32.const 0)
)
+(table.size $0)
(module
(type $i32_i64_f32_f64_=>_i32 (func (param i32 i64 f32 f64) (result i32)))
(type $i32_=>_none (func (param i32)))
diff --git a/test/lit/table-operations.wast b/test/lit/table-operations.wast
index 555708c07..dece2143a 100644
--- a/test/lit/table-operations.wast
+++ b/test/lit/table-operations.wast
@@ -12,9 +12,13 @@
(module
;; CHECK-BINARY: (type $none_=>_none (func))
+ ;; CHECK-BINARY: (type $none_=>_i32 (func (result i32)))
+
;; CHECK-BINARY: (table $table-1 1 1 funcref)
;; CHECK-TEXT: (type $none_=>_none (func))
+ ;; CHECK-TEXT: (type $none_=>_i32 (func (result i32)))
+
;; CHECK-TEXT: (table $table-1 1 1 funcref)
(table $table-1 funcref
(elem $foo)
@@ -113,9 +117,21 @@
)
)
)
+
+ ;; CHECK-BINARY: (func $get-table-size (result i32)
+ ;; CHECK-BINARY-NEXT: (table.size $table-1)
+ ;; CHECK-BINARY-NEXT: )
+ ;; CHECK-TEXT: (func $get-table-size (result i32)
+ ;; CHECK-TEXT-NEXT: (table.size $table-1)
+ ;; CHECK-TEXT-NEXT: )
+ (func $get-table-size (result i32)
+ (table.size $table-1)
+ )
)
;; CHECK-NODEBUG: (type $none_=>_none (func))
+;; CHECK-NODEBUG: (type $none_=>_i32 (func (result i32)))
+
;; CHECK-NODEBUG: (table $0 1 1 funcref)
;; CHECK-NODEBUG: (table $1 3 3 funcref)
@@ -152,3 +168,7 @@
;; CHECK-NODEBUG-NEXT: )
;; CHECK-NODEBUG-NEXT: )
;; CHECK-NODEBUG-NEXT: )
+
+;; CHECK-NODEBUG: (func $3 (result i32)
+;; CHECK-NODEBUG-NEXT: (table.size $0)
+;; CHECK-NODEBUG-NEXT: )
diff --git a/test/spec/table_size.wast b/test/spec/table_size.wast
new file mode 100644
index 000000000..5732ca1a8
--- /dev/null
+++ b/test/spec/table_size.wast
@@ -0,0 +1,88 @@
+;; TODO: uncomment tests when table.grow is implemented
+
+(module
+ (table $t0 0 externref)
+ (table $t1 1 externref)
+ (table $t2 0 2 externref)
+ (table $t3 3 8 externref)
+
+ (func (export "size-t0") (result i32) (table.size $t0))
+ (func (export "size-t1") (result i32) (table.size $t1))
+ (func (export "size-t2") (result i32) (table.size $t2))
+ (func (export "size-t3") (result i32) (table.size $t3))
+
+ ;; (func (export "grow-t0") (param $sz i32)
+ ;; (drop (table.grow $t0 (ref.null extern) (local.get $sz)))
+ ;; )
+ ;; (func (export "grow-t1") (param $sz i32)
+ ;; (drop (table.grow $t1 (ref.null extern) (local.get $sz)))
+ ;; )
+ ;; (func (export "grow-t2") (param $sz i32)
+ ;; (drop (table.grow $t2 (ref.null extern) (local.get $sz)))
+ ;; )
+ ;; (func (export "grow-t3") (param $sz i32)
+ ;; (drop (table.grow $t3 (ref.null extern) (local.get $sz)))
+ ;; )
+)
+
+(assert_return (invoke "size-t0") (i32.const 0))
+;; (assert_return (invoke "grow-t0" (i32.const 1)))
+;; (assert_return (invoke "size-t0") (i32.const 1))
+;; (assert_return (invoke "grow-t0" (i32.const 4)))
+;; (assert_return (invoke "size-t0") (i32.const 5))
+;; (assert_return (invoke "grow-t0" (i32.const 0)))
+;; (assert_return (invoke "size-t0") (i32.const 5))
+
+(assert_return (invoke "size-t1") (i32.const 1))
+;; (assert_return (invoke "grow-t1" (i32.const 1)))
+;; (assert_return (invoke "size-t1") (i32.const 2))
+;; (assert_return (invoke "grow-t1" (i32.const 4)))
+;; (assert_return (invoke "size-t1") (i32.const 6))
+;; (assert_return (invoke "grow-t1" (i32.const 0)))
+;; (assert_return (invoke "size-t1") (i32.const 6))
+
+(assert_return (invoke "size-t2") (i32.const 0))
+;; (assert_return (invoke "grow-t2" (i32.const 3)))
+;; (assert_return (invoke "size-t2") (i32.const 0))
+;; (assert_return (invoke "grow-t2" (i32.const 1)))
+;; (assert_return (invoke "size-t2") (i32.const 1))
+;; (assert_return (invoke "grow-t2" (i32.const 0)))
+;; (assert_return (invoke "size-t2") (i32.const 1))
+;; (assert_return (invoke "grow-t2" (i32.const 4)))
+;; (assert_return (invoke "size-t2") (i32.const 1))
+;; (assert_return (invoke "grow-t2" (i32.const 1)))
+;; (assert_return (invoke "size-t2") (i32.const 2))
+
+(assert_return (invoke "size-t3") (i32.const 3))
+;; (assert_return (invoke "grow-t3" (i32.const 1)))
+;; (assert_return (invoke "size-t3") (i32.const 4))
+;; (assert_return (invoke "grow-t3" (i32.const 3)))
+;; (assert_return (invoke "size-t3") (i32.const 7))
+;; (assert_return (invoke "grow-t3" (i32.const 0)))
+;; (assert_return (invoke "size-t3") (i32.const 7))
+;; (assert_return (invoke "grow-t3" (i32.const 2)))
+;; (assert_return (invoke "size-t3") (i32.const 7))
+;; (assert_return (invoke "grow-t3" (i32.const 1)))
+;; (assert_return (invoke "size-t3") (i32.const 8))
+
+
+;; Type errors
+
+(assert_invalid
+ (module
+ (table $t 1 externref)
+ (func $type-result-i32-vs-empty
+ (table.size $t)
+ )
+ )
+ "type mismatch"
+)
+(assert_invalid
+ (module
+ (table $t 1 externref)
+ (func $type-result-i32-vs-f32 (result f32)
+ (table.size $t)
+ )
+ )
+ "type mismatch"
+)