MultiPLE-Evaluator / src /eval_rust.py
dongsheng's picture
Upload 48 files
41e79e2 verified
import os
import subprocess
import tempfile
from pathlib import Path
from src.generic_eval import main
LANG_NAME = "Rust"
LANG_EXT = ".rs"
def eval_script(path: Path):
basename = ".".join(str(path).split(".")[:-1])
try:
build = subprocess.run(["rustc", path, "-o", basename], capture_output=True, timeout=15)
except subprocess.TimeoutExpired as exc:
return {
"status": "Timeout",
"exit_code": -1,
"stdout": "Compiler timeout",
"stderr": "Compiler timeout",
}
status = None
returncode = -1
output = None
if build.returncode != 0:
# Well, it's a compile error. May be a type error or
# something. But, why break the set convention
status = "SyntaxError"
returncode = build.returncode
output = build
else:
try:
# Assumes exit-code 0 is all okay
output = subprocess.run([basename], capture_output=True, timeout=5)
returncode = output.returncode
if output.returncode == 0:
status = "OK"
else:
# Well, it's a panic
status = "Exception"
except subprocess.TimeoutExpired as exc:
status = "Timeout"
output = exc
os.remove(basename)
return {
"status": status,
"exit_code": returncode,
"stdout": "" if output.stdout is None else output.stdout.decode("utf-8"),
"stderr": "" if output.stderr is None else output.stderr.decode("utf-8"),
}
if __name__ == "__main__":
main(eval_script, LANG_NAME, LANG_EXT)