| import subprocess |
| |
| wast_content = """ |
| (module $Mem |
| (memory (export "shared") 1 1 shared) |
| ) |
| (register "mem") |
| |
| (module $Check |
| (memory (import "mem" "shared") 1 1 shared) |
| |
| (func (export "check") (result i32) |
| (local i32 i32) |
| ;; Manually store values to simulate L_0=0 and L_1=1 |
| (i32.store (i32.const 24) (i32.const 0)) |
| (i32.store (i32.const 32) (i32.const 1)) |
| |
| (i32.load (i32.const 24)) |
| (local.set 0) |
| (i32.load (i32.const 32)) |
| (local.set 1) |
| |
| ;; allowed results: (L_0 = 1 && L_1 = 1) || (L_0 = 0 && L_1 = 1) || (L_0 = 1 && L_1 = 0) |
| |
| (i32.and (i32.eq (local.get 0) (i32.const 1)) (i32.eq (local.get 1) (i32.const 1))) |
| (i32.and (i32.eq (local.get 0) (i32.const 0)) (i32.eq (local.get 1) (i32.const 1))) |
| (i32.and (i32.eq (local.get 0) (i32.const 1)) (i32.eq (local.get 1) (i32.const 0))) |
| (i32.or) |
| (i32.or) |
| (return) |
| ) |
| ) |
| |
| (assert_return (invoke $Check "check") (i32.const 1)) |
| """ |
| |
| with open("test_check.wast", "w") as f: |
| f.write(wast_content) |
| |
| r = subprocess.run(["./bin/wasm-shell", "test_check.wast"], capture_output=True, text=True) |
| print("STDOUT:", r.stdout) |
| print("STDERR:", r.stderr) |