#!/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:]))