Skip to content

Commit 559a1ff

Browse files
committed
Merge pull request #11 from kg/master
Update test runner to compare test output with expected test output
2 parents 6737699 + 6e7fc8f commit 559a1ff

File tree

4 files changed

+54
-5
lines changed

4 files changed

+54
-5
lines changed

ml-proto/runtests.py

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,70 @@
11
#!/usr/bin/env python
22

3+
import os
34
import os.path
45
import unittest
56
import subprocess
67
import glob
8+
import sys
79

810
class RunTests(unittest.TestCase):
911
def _runTestFile(self, shortName, fileName, interpreterPath):
1012
print("\n// %s" % shortName)
11-
exitCode = subprocess.call([interpreterPath, fileName])
13+
sys.stdout.flush()
14+
15+
logPath = fileName.replace("test/", "test/output/").replace(".wasm", ".wasm.log")
16+
try:
17+
os.remove(logPath)
18+
except OSError:
19+
pass
20+
21+
commandStr = ("%s %s | tee %s") % (interpreterPath, fileName, logPath)
22+
exitCode = subprocess.call(commandStr, shell=True)
1223
self.assertEqual(0, exitCode, "test runner failed with exit code %i" % exitCode)
1324

25+
try:
26+
expected = open(fileName.replace("test/", "test/expected-output/").replace(".wasm", ".wasm.log"))
27+
except IOError:
28+
print("// WARNING: No expected output found for this test")
29+
return
30+
31+
output = open(logPath)
32+
33+
with expected:
34+
with output:
35+
expectedText = expected.read()
36+
actualText = output.read()
37+
self.assertEqual(expectedText, actualText)
38+
39+
def generate_test_case(rec):
40+
return lambda self : self._runTestFile(*rec)
41+
42+
1443
def generate_test_cases(cls, interpreterPath, files):
1544
for fileName in files:
16-
absFileName = os.path.abspath(fileName)
1745
attrName = fileName
18-
testCase = lambda self : self._runTestFile(attrName, absFileName, interpreterPath)
46+
rec = (attrName, fileName, interpreterPath)
47+
testCase = generate_test_case(rec)
1948
setattr(cls, attrName, testCase)
2049

2150
def rebuild_interpreter():
2251
interpreterPath = os.path.abspath("src/main.native")
2352

2453
print("// building main.native")
54+
sys.stdout.flush()
2555
exitCode = subprocess.call(["ocamlbuild", "-libs", "bigarray", "main.native"], cwd=os.path.abspath("src"))
2656
if (exitCode != 0):
2757
raise Exception("ocamlbuild failed with exit code %i" % exitCode)
2858

2959
return interpreterPath
3060

31-
if __name__ == "__main__":
61+
if __name__ == "__main__":
62+
try:
63+
os.makedirs("test/output/")
64+
except OSError:
65+
pass
66+
3267
interpreterPath = rebuild_interpreter()
33-
generate_test_cases(RunTests, interpreterPath, glob.glob("test/*.wasm"))
68+
testFiles = glob.glob("test/*.wasm")
69+
generate_test_cases(RunTests, interpreterPath, testFiles)
3470
unittest.main()

ml-proto/test/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
output
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export 0 : i64 -> i64
2+
export 1 : i64 -> i64
3+
7034535277573963776 : i64
4+
7034535277573963776 : i64
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export 0 : () -> i32
2+
export 1 : () -> i32
3+
export 2 : () -> i32
4+
export 3 : () -> f64
5+
1 : i32
6+
1 : i32
7+
1 : i32
8+
-3.10552331246e+231 : f64

0 commit comments

Comments
 (0)