| from pathlib import Path | |
| from src.safe_subprocess import run | |
| from src.generic_eval import main | |
| LANG_NAME = "C++" | |
| LANG_EXT = ".cpp" | |
| def eval_script(path: Path): | |
| basename = ".".join(str(path).split(".")[:-1]) | |
| build_result = run(["g++", path, "-o", basename, "-std=c++17"]) | |
| if build_result.exit_code != 0: | |
| return { | |
| "status": "SyntaxError", | |
| "exit_code": build_result.exit_code, | |
| "stdout": build_result.stdout, | |
| "stderr": build_result.stderr, | |
| } | |
| run_result = run([basename]) | |
| if "In file included from /shared/centos7/gcc/9.2.0-skylake/" in run_result.stderr: | |
| raise Exception("Skylake bug encountered") | |
| if "/4.8.2" in run_result.stderr: | |
| raise Exception("Ancient compiler encountered") | |
| if run_result.timeout: | |
| status = "Timeout" | |
| elif run_result.exit_code != 0: | |
| status = "Exception" | |
| else: | |
| status = "OK" | |
| return { | |
| "status": status, | |
| "exit_code": run_result.exit_code, | |
| "stdout": run_result.stdout, | |
| "stderr": run_result.stderr, | |
| } | |
| if __name__ == "__main__": | |
| main(eval_script, LANG_NAME, LANG_EXT) | |