| 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) |
|
|