Spaces:
Running
Running
import os | |
import subprocess | |
from pathlib import Path | |
from src.safe_subprocess import run | |
import sys | |
import re | |
ENABLE_SYNTAX_CHECK = False | |
def eval_script(path: Path): | |
result = run(["rdmd", "-unittest", str(path)], timeout_seconds=15) | |
if "might not be correctly installed" in result.stderr: | |
raise Exception("D is not correctly installed") | |
if result.timeout: | |
status = "Timeout" | |
elif result.exit_code == 0: | |
status = "OK" | |
elif "Error:" in result.stderr: | |
status = "SyntaxError" | |
else: | |
status = "Exception" | |
return { | |
"status": status, | |
"exit_code": result.exit_code, | |
"stdout": result.stdout, | |
"stderr": result.stderr, | |
} | |
DIR = "d-keep-code_davinci_001_temp_0.2" | |
def main(): | |
directory = Path(Path(__file__).parent, "..", "datasets", DIR).resolve() | |
count = {"OK": 0, "Timeout": 0, "Exception": 0, "SyntaxError": 0} | |
for filename in os.listdir(directory): | |
path = Path.joinpath(directory, filename) | |
r = eval_script(path) | |
status = r["status"] | |
count[status] += 1 | |
if ENABLE_SYNTAX_CHECK and status == "SyntaxError": | |
error_msgs = r["stderr"].split("\n") | |
with open(path) as source_file: | |
lines = source_file.readlines() | |
unittest_line_start = lines.index("unittest\n") | |
unittest_line_end = len(lines) | |
for err_msg_line in error_msgs: | |
matched_parts = re.match(r"(\/?.*?\.[\w:]+\/.*.d)\(([0-9]+)\): Error: (.*)", err_msg_line[2:-1]) | |
_file, line_num = matched_parts[1], int(matched_parts[2]) | |
if unittest_line_start <= line_num and line_num <= unittest_line_end: | |
print("===============") | |
print(path, "contains error in unit test part") | |
print(error_msgs) | |
print("===============") | |
filename = filename.split(".")[0] | |
print(f"Dlang,{filename},{status}") | |
print(DIR + ":" + str(count)) | |
if __name__ == "__main__": | |
main() | |