Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: pydir/wasm-run-torture-tests.py

Issue 1900213002: Subzero - WASM: Codegen fixes, better test infrastructure (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Merge wasm-runtime.c and wasm-runtime.cpp Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pydir/wasm-run-torture-tests.py
diff --git a/pydir/wasm-run-torture-tests.py b/pydir/wasm-run-torture-tests.py
index 7ad50c92667075e5e96c2e4ca75c0bfdcf5b988c..874a50a978480c266f425319a05b4d893f38a7fa 100755
--- a/pydir/wasm-run-torture-tests.py
+++ b/pydir/wasm-run-torture-tests.py
@@ -9,45 +9,131 @@
#
#===-----------------------------------------------------------------------===//
+from __future__ import print_function
+import argparse
import glob
+import multiprocessing
import os
+import Queue
import shutil
+import StringIO
import sys
+import threading
-IGNORED_TESTS = [
+IGNORED_TESTS = set([
'loop-2f.c.wasm', # mmap not in MVP
'loop-2g.c.wasm', # mmap not in MVP
- '960521-1.c.wasm', # sbrk not in MVP
-
- 'pr36765.c.wasm', # __builtin_malloc not allowed
-
- 'pr24716.c.wasm', # infinite loop
- 'vla-dealloc-1.c.wasm', # infinite loop
- '20040811-1.c.wasm', # infinite loop
- '961125-1.c.wasm', # infinite loop
- '980506-1.c.wasm', # infinite loop
- '20070824-1.c.wasm', # infinite loop
- '20140212-1.c.wasm', # infinite loop
- 'pr59014.c.wasm', # infinite loop
- 'pr58277-2.c.wasm', # infinite loop
- 'pr43560.c.wasm', # infinite loop
- '20000818-1.c.wasm', # infinite loop
- '20010409-1.c.wasm', # infinite loop
- 'loop-7.c.wasm', # infinite loop
- 'pr34415.c.wasm', # infinite loop
- '20011126-2.c.wasm', # infinite loop
- 'postmod-1.c.wasm', # infinite loop
- 'pr17133.c.wasm', # infinite loop
- '20021024-1.c.wasm', # infinite loop
- 'pr15296.c.wasm', # infinite loop
- '990524-1.c.wasm', # infinite loop
- 'loop-12.c.wasm', # infinite loop
- '961125-1.c.wasm', # infinite loop
-]
+ '960521-1.c.wasm', # sbrk
+ 'ipa-sra-2.c.wasm', # sbrk
+ 'pr41463.c.wasm', # sbrk
+ '20051113-1.c.wasm', # sbrk
+ '990628-1.c.wasm', # sbrk
+ 'pr41395-2.c.wasm', # sbrk
+ 'pr42614.c.wasm', # sbrk
+ 'pr41395-1.c.wasm', # sbrk
+ '920810-1.c.wasm', # sbrk
+ '20000914-1.c.wasm', # sbrk
+ 'pr15262-1.c.wasm', # sbrk
+ '941014-2.c.wasm', # sbrk
+ 'va-arg-21.c.wasm', # sbrk
+ '20020406-1.c.wasm', # sbrk
+
+ # waterfall known failures
+ '20010122-1.c.wasm',
+ '20031003-1.c.wasm',
+ '20071018-1.c.wasm',
+ '20071120-1.c.wasm',
+ '20071220-1.c.wasm',
+ '20071220-2.c.wasm',
+ '20101011-1.c.wasm',
+ 'alloca-1.c.wasm',
+ 'bitfld-3.c.wasm',
+ 'bitfld-5.c.wasm',
+ 'builtin-bitops-1.c.wasm',
+ 'conversion.c.wasm',
+ 'eeprof-1.c.wasm',
+ 'frame-address.c.wasm',
+ 'pr17377.c.wasm',
+ 'pr32244-1.c.wasm',
+ 'pr34971.c.wasm',
+ 'pr36765.c.wasm',
+ 'pr39228.c.wasm',
+ 'pr43008.c.wasm',
+ 'pr47237.c.wasm',
+ 'pr60960.c.wasm',
+ 'va-arg-pack-1.c.wasm',
+
+ '20000717-5.c.wasm', # abort() (also works without emcc)
+ '20001203-2.c.wasm', # assert fail (works without emcc)
+ '20040811-1.c.wasm', # OOB trap
+ '20070824-1.c.wasm', # abort() (also works without emcc)
+ 'arith-rand-ll.c.wasm', # abort() (works without emcc)
+ 'arith-rand.c.wasm', # abort() (works without emcc)
+ 'pr23135.c.wasm', # OOB trap (works without emcc)
+ 'pr34415.c.wasm', # (empty output?)
+ 'pr36339.c.wasm', # abort() (works without emcc)
+ 'pr38048-2.c.wasm', # abort() (works without emcc)
+ 'pr42691.c.wasm', # abort() (works without emcc)
+ 'pr43220.c.wasm', # OOB trap (works without emcc)
+ 'pr43269.c.wasm', # abort() (works without emcc)
+ 'vla-dealloc-1.c.wasm', # OOB trap (works without emcc)
+ '20051012-1.c.wasm', # error reading binary
+ '921208-2.c.wasm', # error reading binary
+ '920501-1.c.wasm', # error reading binary
+ 'call-trap-1.c.wasm', # error reading binary
+ 'pr44942.c.wasm', # error reading binary
+
+ '920625-1.c.wasm', # abort() (also fails without emcc)
+ '931004-10.c.wasm', # abort() (also fails without emcc)
+ '931004-12.c.wasm', # abort() (also fails without emcc)
+ '931004-14.c.wasm', # abort() (also fails without emcc)
+ '931004-6.c.wasm', # abort() (also fails without emcc)
+ 'pr38051.c.wasm', # (empty output?) (fails without emcc)
+ 'pr38151.c.wasm', # abort() (fails without emcc)
+ 'pr44575.c.wasm', # abort() (fails without emcc)
+ 'strct-stdarg-1.c.wasm', # abort() (fails without emcc)
+ 'strct-varg-1.c.wasm', # abort() (fails without emcc)
+ 'va-arg-22.c.wasm', # abort() (fails without emcc)
+ 'stdarg-3.c.wasm', # abort() (fails without emcc)
+ 'pr56982.c.wasm', # missing setjmp (wasm.js check did not catch)
+
+ '20010605-2.c.wasm', # missing __netf2
+ '20020413-1.c.wasm', # missing __lttf2
+ '20030914-1.c.wasm', # missing __floatsitf
+ '20040709-1.c.wasm', # missing __netf2
+ '20040709-2.c.wasm', # missing __netf2
+ '20050121-1.c.wasm', # missing __floatsitf
+ '20080502-1.c.wasm', # missing __eqtf2
+ '920501-8.c.wasm', # missing __extenddftf2
+ '930513-1.c.wasm', # missing __extenddftf2
+ '930622-2.c.wasm', # missing __floatditf
+ '960215-1.c.wasm', # missing __addtf3
+ '960405-1.c.wasm', # missing __eqtf2
+ '960513-1.c.wasm', # missing __subtf3
+ 'align-2.c.wasm', # missing __eqtf2
+ 'complex-6.c.wasm', # missing __subtf3
+ 'complex-7.c.wasm', # missing __netf2
+ 'pr49218.c.wasm', # missing __fixsfti
+ 'pr54471.c.wasm', # missing __multi3
+ 'regstack-1.c.wasm', # missing __addtf3
+ 'stdarg-1.c.wasm', # missing __netf2
+ 'stdarg-2.c.wasm', # missing __floatsitf
+ 'va-arg-5.c.wasm', # missing __eqtf2
+ 'va-arg-6.c.wasm', # missing __eqtf2
+ 'struct-ret-1.c.wasm', # missing __extenddftf2
+])
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-v', '--verbose', action='store_true')
+parser.add_argument('--translate-only', action='store_true')
+parser.add_argument('tests', nargs='*')
+args = parser.parse_args()
OUT_DIR = "./build/wasm-torture"
+results_lock = threading.Lock()
+
compile_count = 0
compile_failures = []
@@ -55,13 +141,17 @@ run_count = 0
run_failures = []
def run_test(test_file, verbose=False):
+ global args
global compile_count
global compile_failures
+ global results_lock
global run_count
global run_failures
global OUT_DIR
global IGNORED_TESTS
+ run_test = not args.translate_only
+
test_name = os.path.basename(test_file)
obj_file = os.path.join(OUT_DIR, test_name + ".o")
exe_file = os.path.join(OUT_DIR, test_name + ".exe")
@@ -77,33 +167,42 @@ def run_test(test_file, verbose=False):
if not verbose:
cmd += " &> /dev/null"
- sys.stdout.write(test_file + " ...");
+ out = StringIO.StringIO()
+
+ out.write(test_file + " ...");
status = os.system(cmd);
if status != 0:
- print('\033[1;31m[compile fail]\033[1;m')
- compile_failures.append(test_file)
+ print('\033[1;31m[compile fail]\033[1;m', file=out)
+ with results_lock:
+ compile_failures.append(test_file)
else:
compile_count += 1
# Try to link and run the program.
- cmd = "clang -g -m32 {} -o {} ./runtime/wasm-runtime.c".format(obj_file,
- exe_file)
- if os.system(cmd) == 0:
- if os.system(exe_file) == 0:
- run_count += 1
- print('\033[1;32m[ok]\033[1;m')
+ cmd = "clang -g -m32 {} -o {} " + \
+ "./runtime/szrt.c ./runtime/wasm-runtime.cpp -lm"
+ cmd = cmd.format(obj_file, exe_file)
+
+ if not run_test or os.system(cmd) == 0:
+ if not run_test or os.system(exe_file) == 0:
+ with results_lock:
+ run_count += 1
+ print('\033[1;32m[ok]\033[1;m', file=out)
else:
- run_failures.append(test_file)
- print('\033[1;33m[run fail]\033[1;m')
+ with results_lock:
+ run_failures.append(test_file)
+ print('\033[1;33m[run fail]\033[1;m', file=out)
else:
- run_failures.append(test_file)
- print('\033[1;33m[run fail]\033[1;m')
+ with results_lock:
+ run_failures.append(test_file)
+ print('\033[1;33m[run fail]\033[1;m', file=out)
-verbose = False
+ sys.stdout.write(out.getvalue())
-if len(sys.argv) > 1:
- test_files = sys.argv[1:]
- verbose = True
+verbose = args.verbose
+
+if len(args.tests) > 0:
+ test_files = args.tests
else:
test_files = glob.glob("./emwasm-torture-out/*.wasm")
@@ -111,18 +210,32 @@ if os.path.exists(OUT_DIR):
shutil.rmtree(OUT_DIR)
os.mkdir(OUT_DIR)
+tasks = Queue.Queue()
+
+def worker():
+ while True:
+ run_test(tasks.get(), verbose)
+ tasks.task_done()
+
+for i in range(multiprocessing.cpu_count()):
+ t = threading.Thread(target=worker)
+ t.daemon = True
+ t.start()
+
for test_file in test_files:
- run_test(test_file, verbose)
+ tasks.put(test_file)
+
+tasks.join()
if len(compile_failures) > 0:
- print
+ print()
print("Compilation failures:")
print("=====================\n")
for f in compile_failures:
print(" \033[1;31m" + f + "\033[1;m")
if len(run_failures) > 0:
- print
+ print()
print("Run failures:")
print("=============\n")
for f in run_failures:
« no previous file with comments | « c2wasm-exe.sh ('k') | runtime/wasm-runtime.c » ('j') | runtime/wasm-runtime.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698