|
|
@@ -0,0 +1,69 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
import argparse |
|
|
|
from pathlib import Path |
|
|
|
from typing import List, NamedTuple |
|
|
|
import subprocess |
|
|
|
import sys |
|
|
|
|
|
|
|
|
|
|
|
class TestOptions(NamedTuple): |
|
|
|
exe: Path |
|
|
|
toolchain: str |
|
|
|
|
|
|
|
|
|
|
|
def run_test_dir(dir: Path, opts: TestOptions) -> bool: |
|
|
|
try: |
|
|
|
subprocess.check_call( |
|
|
|
[ |
|
|
|
str(opts.exe), |
|
|
|
'build', |
|
|
|
'--export', |
|
|
|
'--warnings', |
|
|
|
'--tests', |
|
|
|
'--toolchain', |
|
|
|
opts.toolchain, |
|
|
|
], |
|
|
|
cwd=dir, |
|
|
|
) |
|
|
|
except subprocess.CalledProcessError: |
|
|
|
import traceback |
|
|
|
traceback.print_exc() |
|
|
|
return False |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
def run_tests(opts: TestOptions) -> int: |
|
|
|
print('Sanity check...') |
|
|
|
subprocess.check_output([str(opts.exe), '--help']) |
|
|
|
tests_subdir = Path(__file__).parent.absolute() / 'tests' |
|
|
|
|
|
|
|
test_dirs = tests_subdir.glob('*.test') |
|
|
|
ret = 0 |
|
|
|
for td in test_dirs: |
|
|
|
if not run_test_dir(td, opts): |
|
|
|
ret = 1 |
|
|
|
return ret |
|
|
|
|
|
|
|
|
|
|
|
def main(argv: List[str]) -> int: |
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
parser.add_argument( |
|
|
|
'--exe', |
|
|
|
'-e', |
|
|
|
help='Path to the ddslim executable to test', |
|
|
|
required=True) |
|
|
|
parser.add_argument( |
|
|
|
'--toolchain', |
|
|
|
'-T', |
|
|
|
help='The ddslim toolchain to use while testing', |
|
|
|
required=True, |
|
|
|
) |
|
|
|
args = parser.parse_args(argv) |
|
|
|
|
|
|
|
opts = TestOptions(exe=Path(args.exe).absolute(), toolchain=args.toolchain) |
|
|
|
|
|
|
|
return run_tests(opts) |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
sys.exit(main(sys.argv[1:])) |