summaryrefslogtreecommitdiff
path: root/test/unit/input/bysyncify-sleep.wast
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/input/bysyncify-sleep.wast')
-rw-r--r--test/unit/input/bysyncify-sleep.wast200
1 files changed, 200 insertions, 0 deletions
diff --git a/test/unit/input/bysyncify-sleep.wast b/test/unit/input/bysyncify-sleep.wast
new file mode 100644
index 000000000..91fb5a327
--- /dev/null
+++ b/test/unit/input/bysyncify-sleep.wast
@@ -0,0 +1,200 @@
+(module
+ (memory 1 2)
+ (type $ii (func (param i32) (result i32)))
+ (import "env" "sleep" (func $sleep))
+ (import "env" "tunnel" (func $tunnel (param $x i32) (result i32)))
+ (export "memory" (memory 0))
+ (export "factorial-recursive" (func $factorial-recursive))
+ (global $temp (mut i32) (i32.const 0))
+ (table 10 funcref)
+ (elem (i32.const 5) $tablefunc)
+ (func "minimal" (result i32)
+ (call $sleep)
+ (i32.const 21)
+ )
+ (func "repeat" (result i32)
+ ;; sleep twice, then return 42
+ (call $sleep)
+ (call $sleep)
+ (i32.const 42)
+ )
+ (func "local" (result i32)
+ (local $x i32)
+ (local.set $x (i32.load (i32.const 0))) ;; a zero that the optimizer won't see
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 10)) ;; add 10
+ )
+ (call $sleep)
+ (local.get $x)
+ )
+ (func "local2" (result i32)
+ (local $x i32)
+ (local.set $x (i32.load (i32.const 0))) ;; a zero that the optimizer won't see
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 10)) ;; add 10
+ )
+ (call $sleep)
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 12)) ;; add 12 more
+ )
+ (local.get $x)
+ )
+ (func "params" (param $x i32) (param $y i32) (result i32)
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 17)) ;; add 10
+ )
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 1)) ;; add 12 more
+ )
+ (call $sleep)
+ (i32.add (local.get $x) (local.get $y))
+ )
+ (func $pre
+ (global.set $temp (i32.const 1))
+ )
+ (func $inner (param $x i32)
+ (if (i32.eqz (local.get $x)) (call $post))
+ (if (local.get $x) (call $sleep))
+ (if (i32.eqz (local.get $x)) (call $post))
+ )
+ (func $post
+ (global.set $temp
+ (i32.mul
+ (global.get $temp)
+ (i32.const 3)
+ )
+ )
+ )
+ (func "deeper" (param $x i32) (result i32)
+ (call $pre)
+ (call $inner (local.get $x))
+ (call $post)
+ (global.get $temp)
+ )
+ (func $factorial-recursive (param $x i32) (result i32)
+ (if
+ (i32.eq
+ (local.get $x)
+ (i32.const 1)
+ )
+ (return (i32.const 1))
+ )
+ (call $sleep)
+ (return
+ (i32.mul
+ (local.get $x)
+ (call $factorial-recursive
+ (i32.sub
+ (local.get $x)
+ (i32.const 1)
+ )
+ )
+ )
+ )
+ )
+ (func "factorial-loop" (param $x i32) (result i32)
+ (local $i i32)
+ (local $ret i32)
+ (local.set $ret (i32.const 1))
+ (local.set $i (i32.const 2))
+ (loop $l
+ (if
+ (i32.gt_u
+ (local.get $i)
+ (local.get $x)
+ )
+ (return (local.get $ret))
+ )
+ (local.set $ret
+ (i32.mul
+ (local.get $ret)
+ (local.get $i)
+ )
+ )
+ (call $sleep)
+ (local.set $i
+ (i32.add
+ (local.get $i)
+ (i32.const 1)
+ )
+ )
+ (br $l)
+ )
+ )
+ (func "end_tunnel" (param $x i32) (result i32)
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 22))
+ )
+ (call $sleep)
+ (i32.add (local.get $x) (i32.const 5))
+ )
+ (func "do_tunnel" (param $x i32) (result i32)
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 11))
+ )
+ (local.set $x
+ (call $tunnel (local.get $x)) ;; calls js which calls back into wasm for end_tunnel
+ )
+ (call $sleep)
+ (i32.add (local.get $x) (i32.const 33))
+ )
+ (func $tablefunc (param $y i32) (result i32)
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 10))
+ )
+ (call $sleep)
+ (i32.add (local.get $y) (i32.const 30))
+ )
+ (func "call_indirect" (param $x i32) (param $y i32) (result i32)
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 1))
+ )
+ (call $sleep)
+ (local.set $x
+ (i32.add (local.get $x) (i32.const 3))
+ )
+ (local.set $y
+ (call_indirect (type $ii) (local.get $y) (local.get $x)) ;; call function pointer x + 4, which will be 5
+ )
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 90))
+ )
+ (call $sleep)
+ (i32.add (local.get $y) (i32.const 300)) ;; total is 10+30+90+300=430 + y's original value
+ )
+ (func "if_else" (param $x i32) (param $y i32) (result i32)
+ (if (i32.eq (local.get $x) (i32.const 1))
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 10))
+ )
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 20))
+ )
+ )
+ (if (i32.eq (local.get $x) (i32.const 1))
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 40))
+ )
+ (call $sleep)
+ )
+ (if (i32.eq (local.get $x) (i32.const 1))
+ (call $sleep)
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 90))
+ )
+ )
+ (if (i32.eq (local.get $x) (i32.const 1))
+ (call $sleep)
+ (call $sleep)
+ )
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 160))
+ )
+ (call $sleep)
+ (local.set $y
+ (i32.add (local.get $y) (i32.const 250))
+ )
+ (local.get $y)
+ )
+)
+