2023-12-09 19:52:07 +00:00
|
|
|
import argparse
|
|
|
|
import os
|
2023-12-18 14:13:31 +00:00
|
|
|
import random
|
2023-12-09 19:52:07 +00:00
|
|
|
import re
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import instrument
|
2023-12-18 14:13:31 +00:00
|
|
|
from genetic import run_genetic
|
2023-12-09 19:52:07 +00:00
|
|
|
|
|
|
|
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):
|
2023-12-18 14:13:31 +00:00
|
|
|
run_genetic([source_path], random.randint(0, 500))
|
|
|
|
|
2023-12-11 14:43:53 +00:00
|
|
|
stream = os.popen(f'mut.py --target \'{source_path}\' --unit-test \'{test_path}\' -m')
|
2023-12-09 19:52:07 +00:00
|
|
|
output = stream.read()
|
2023-12-11 14:43:53 +00:00
|
|
|
score = re.search('Mutation score \\[.*\\]: (\d+\.\d+)\%', output).group(1)
|
2023-12-09 19:52:07 +00:00
|
|
|
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:
|
2023-12-18 14:13:31 +00:00
|
|
|
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"]
|
2023-12-09 19:52:07 +00:00
|
|
|
else:
|
|
|
|
to_test = [os.path.splitext(os.path.basename(file))[0] for file in files]
|
|
|
|
|
|
|
|
for filename in to_test:
|
2023-12-18 14:13:31 +00:00
|
|
|
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)
|
2023-12-09 19:52:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|