Skip to content

Commit 2f84e03

Browse files
committed
Parallelize fixed wasm-reduce testcases
- Run the 6 fixed wasm-reduce tests in parallel using shared.run_parallel_tests - Isolate per-test temporary wasm and wat filenames - Pipe wasm-reduce stderr to prevent interleaved output This reduces runtime from 1m21s to 46s.
1 parent cb3586b commit 2f84e03

1 file changed

Lines changed: 28 additions & 10 deletions

File tree

check.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,32 @@ def run_wasm_metadce_tests():
137137
shared.fail_if_not_identical_to_file(stdout, expected + '.stdout')
138138

139139

140+
def run_one_wasm_reduce_test(t, stdout=None):
141+
base_name = os.path.splitext(os.path.basename(t))[0]
142+
print('..', os.path.basename(t), file=stdout)
143+
a_wasm = f'reduce_{base_name}_a.wasm'
144+
b_wasm = f'reduce_{base_name}_b.wasm'
145+
c_wasm = f'reduce_{base_name}_c.wasm'
146+
a_wat = f'reduce_{base_name}_a.wat'
147+
try:
148+
support.run_command(shared.WASM_AS + [t, '-o', a_wasm, '-all'], stdout=stdout)
149+
cmd = shared.WASM_OPT[0]
150+
support.run_command(
151+
shared.WASM_REDUCE + [a_wasm, f'--command={cmd} {b_wasm} --fuzz-exec -all', '-t', b_wasm, '-w', c_wasm, '--timeout=4'],
152+
stdout=stdout,
153+
stderr=subprocess.PIPE,
154+
)
155+
expected = t + '.txt'
156+
support.run_command(shared.WASM_DIS + [c_wasm, '-o', a_wat], stdout=stdout)
157+
with open(a_wat) as seen:
158+
shared.fail_if_not_identical_to_file(seen.read(), expected)
159+
finally:
160+
shared.delete_from_orbit(a_wasm)
161+
shared.delete_from_orbit(b_wasm)
162+
shared.delete_from_orbit(c_wasm)
163+
shared.delete_from_orbit(a_wat)
164+
165+
140166
def run_wasm_reduce_tests():
141167
if not shared.has_shell_timeout():
142168
print_heading('skipping wasm-reduce testcases')
@@ -145,16 +171,8 @@ def run_wasm_reduce_tests():
145171
print_heading('checking wasm-reduce testcases')
146172

147173
# fixed testcases
148-
for t in shared.get_tests(shared.get_test_dir('reduce'), ['.wast']):
149-
print('..', os.path.basename(t))
150-
# convert to wasm
151-
support.run_command(shared.WASM_AS + [t, '-o', 'a.wasm', '-all'])
152-
cmd = shared.WASM_OPT[0]
153-
support.run_command(shared.WASM_REDUCE + ['a.wasm', f'--command={cmd} b.wasm --fuzz-exec -all ', '-t', 'b.wasm', '-w', 'c.wasm', '--timeout=4'])
154-
expected = t + '.txt'
155-
support.run_command(shared.WASM_DIS + ['c.wasm', '-o', 'a.wat'])
156-
with open('a.wat') as seen:
157-
shared.fail_if_not_identical_to_file(seen.read(), expected)
174+
tests = shared.get_tests(shared.get_test_dir('reduce'), ['.wast'])
175+
shared.run_parallel_tests(run_one_wasm_reduce_test, tests)
158176

159177
# run on a nontrivial fuzz testcase, for general coverage
160178
# this is very slow in ThreadSanitizer, so avoid it there

0 commit comments

Comments
 (0)