MultiPLE-Evaluator / src /eval_dlang.py
dongsheng's picture
Upload 48 files
41e79e2 verified
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()