import argparse import os import random import re import sys import instrument from genetic import run_genetic ROOT_DIR = os.path.dirname(__file__) IN_SOURCE_DIR = os.path.join(ROOT_DIR, "benchmark") IN_TEST_DIR = os.path.join(ROOT_DIR, "tests") OUT_DIR = os.path.join(ROOT_DIR, "tests") def run_mutpy(test_path: str, source_path: str): run_genetic([source_path], random.randint(0, 500)) stream = os.popen(f'mut.py --target \'{source_path}\' --unit-test \'{test_path}\' -m') output = stream.read() score = re.search('Mutation score \\[.*\\]: (\d+\.\d+)\%', output).group(1) print(output, file=sys.stderr) print(f"Score is: {score}") def main(): parser = argparse.ArgumentParser(prog='muttest.py', description='Runs MutPy over generated test suite.') parser.add_argument('file', type=str, help="Source file to test", nargs="*") files = parser.parse_args().file if len(files) == 0: files = [os.path.splitext(f) for f in os.listdir(IN_SOURCE_DIR)] to_test = [file[0] for file in files if file[1] == ".py"] else: to_test = [os.path.splitext(os.path.basename(file))[0] for file in files] for filename in to_test: for i in range(10): source_path = os.path.join(IN_SOURCE_DIR, f"{filename}.py") test_path = os.path.join(IN_TEST_DIR, f"test_{filename}.py") run_mutpy(test_path, source_path) if __name__ == "__main__": main()