Verdict executeOnTestCase(string testCaseName) { string testCaseInputFilename = generator->getTestCasesDir() + "/" + testCaseName + ".in"; os->limitExecutionTime(generator->getTimeLimit()); os->limitExecutionMemory(generator->getMemoryLimit()); ExecutionResult result = os->execute(testCaseName + "-submission-evaluation", submissionCommand, testCaseInputFilename, "_submission.out", "_error.out"); os->limitExecutionTime(0); os->limitExecutionMemory(0); if (result.exitStatus == 0) { return Verdict::unknown(); } vector<Failure> failures; if (result.exitStatus & (1<<7)) { int signal = WTERMSIG(result.exitStatus); if (signal == SIGXCPU) { return Verdict::timeLimitExceeded(); } failures.push_back(Failure("Execution of submission failed:", 0)); failures.push_back(Failure(string(strsignal(signal)), 1)); } else { failures.push_back(Failure("Execution of submission failed:", 0)); failures.push_back(Failure("Exit code: " + Util::toString(result.exitStatus), 1)); failures.push_back(Failure("Standard error: " + string(istreambuf_iterator<char>(*result.errorStream), istreambuf_iterator<char>()), 1)); } return Verdict::runtimeError(failures); }