forked from WebAssembly/wasi-threads
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
``` (venv) spacetanuki% TOYWASM=~/git/toywasm/b/toywasm python3 test-runner/wasi_test_runner.py -t ~/git/wasm/wasi-threads/test/testsuite -r ~/git/toywasm/test/wasi-testsuite-adapter.py Test wasi_threads_exit_nonmain_wasi passed Test wasi_threads_exit_main_busy passed Test wasi_threads_exit_main_wasi passed Test wasi_threads_exit_nonmain_busy passed Test wasi_threads_spawn passed Test wasi_threads_exit_main_block passed Test wasi_threads_exit_nonmain_block passed ===== Test results ===== Runtime: toywasm v0.0 Suite: WASI threads proposal Total: 7 Passed: 7 Failed: 0 Test suites: 1 passed, 0 total Tests: 7 passed, 0 total (venv) spacetanuki% ```
- Loading branch information
Showing
15 changed files
with
338 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#! /bin/sh | ||
|
||
WAT2WASM=${WAT2WASM:-wat2wasm} | ||
for wat in testsuite/*.wat; do | ||
${WAT2WASM} --enable-threads -o ${wat%%.wat}.wasm ${wat} | ||
done |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 99 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; infinite wait | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const -1 | ||
memory.atomic.wait32 | ||
unreachable | ||
) | ||
(func (export "_start") | ||
;; spawn a thread | ||
i32.const 0 | ||
call $thread_spawn | ||
;; check error | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; wait 500ms to ensure the other thread block | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const 500_000_000 | ||
memory.atomic.wait32 | ||
;; assert a timeout | ||
i32.const 2 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 99 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 99 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; infinite loop | ||
loop | ||
br 0 | ||
end | ||
unreachable | ||
) | ||
(func (export "_start") | ||
;; spawn a thread | ||
i32.const 0 | ||
call $thread_spawn | ||
;; check error | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; wait 500ms to ensure the other thread to enter the busy loop | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const 500_000_000 | ||
memory.atomic.wait32 | ||
;; assert a timeout | ||
i32.const 2 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 99 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 99 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func $poll_oneoff (import "wasi_snapshot_preview1" "poll_oneoff") (param i32 i32 i32 i32) (result i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; long enough block | ||
;; clock_realtime, !abstime (zeros) | ||
i32.const 124 ;; 100 + offsetof(subscription, timeout) | ||
i64.const 1_000_000_000 ;; 1s | ||
i64.store | ||
i32.const 100 ;; subscription | ||
i32.const 200 ;; event (out) | ||
i32.const 1 ;; nsubscriptions | ||
i32.const 300 ;; retp (out) | ||
call $poll_oneoff | ||
unreachable | ||
) | ||
(func (export "_start") | ||
;; spawn a thread | ||
i32.const 0 | ||
call $thread_spawn | ||
;; check error | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; wait 500ms to ensure the other thread block | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const 500_000_000 | ||
memory.atomic.wait32 | ||
;; assert a timeout | ||
i32.const 2 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 99 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 99 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; wait 500ms to ensure the other thread block | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const 500_000_000 | ||
memory.atomic.wait32 | ||
;; assert a timeout | ||
i32.const 2 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 99 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(func (export "_start") | ||
;; spawn a thread | ||
i32.const 0 | ||
call $thread_spawn | ||
;; check error | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; infinite wait | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const -1 | ||
memory.atomic.wait32 | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 99 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; wait 500ms to ensure the other thread to enter the busy loop | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const 500_000_000 | ||
memory.atomic.wait32 | ||
;; assert a timeout | ||
i32.const 2 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 99 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(func (export "_start") | ||
;; spawn a thread | ||
i32.const 0 | ||
call $thread_spawn | ||
;; check error | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; infinite loop | ||
loop | ||
br 0 | ||
end | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 99 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func $poll_oneoff (import "wasi_snapshot_preview1" "poll_oneoff") (param i32 i32 i32 i32) (result i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; wait 500ms to ensure the other thread block | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const 500_000_000 | ||
memory.atomic.wait32 | ||
;; assert a timeout | ||
i32.const 2 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 99 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(func (export "_start") | ||
;; spawn a thread | ||
i32.const 0 | ||
call $thread_spawn | ||
;; check error | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; long enough block | ||
;; clock_realtime, !abstime (zeros) | ||
i32.const 124 ;; 100 + offsetof(subscription, timeout) | ||
i64.const 1_000_000_000 ;; 1s | ||
i64.store | ||
i32.const 100 ;; subscription | ||
i32.const 200 ;; event (out) | ||
i32.const 1 ;; nsubscriptions | ||
i32.const 300 ;; retp (out) | ||
call $poll_oneoff | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"exit_code": 22 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
(module | ||
(func $thread_spawn (import "wasi" "thread_spawn") (param i32) (result i32)) | ||
(func $proc_exit (import "wasi_snapshot_preview1" "proc_exit") (param i32)) | ||
(func (export "wasi_thread_start") (param i32 i32) | ||
;; store tid | ||
i32.const 4 | ||
local.get 0 | ||
i32.store | ||
;; store user pointer | ||
i32.const 8 | ||
local.get 1 | ||
i32.store | ||
;; notify the main | ||
i32.const 0 | ||
i32.const 1 | ||
i32.atomic.store | ||
i32.const 0 | ||
i32.const 1 | ||
memory.atomic.notify | ||
drop | ||
;; returning from wasi_thread_start terminates only this thread | ||
) | ||
(func (export "_start") (local i32) | ||
;; spawn a thread | ||
i32.const 12345 ;; user pointer | ||
call $thread_spawn | ||
;; check error | ||
local.tee 0 ;; save the tid to check later | ||
i32.const 0 | ||
i32.le_s | ||
if | ||
unreachable | ||
end | ||
;; wait for the spawned thread to run | ||
i32.const 0 | ||
i32.const 0 | ||
i64.const -1 | ||
memory.atomic.wait32 | ||
;; assert it was not a timeout | ||
i32.const 2 | ||
i32.eq | ||
if | ||
unreachable | ||
end | ||
;; check the tid | ||
local.get 0 | ||
i32.const 4 | ||
i32.load | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; check the user pointer | ||
i32.const 8 | ||
i32.load | ||
i32.const 12345 | ||
i32.ne | ||
if | ||
unreachable | ||
end | ||
;; exit | ||
i32.const 22 | ||
call $proc_exit | ||
unreachable | ||
) | ||
(memory 1 1 shared) | ||
) |