protected function run_case($case) { // runner $runner = $this->entity->runner(); $runner = getcwd() . "/runners/{$runner}.sh"; $flags = $this->entity->runner_flags(); // copy case input, prepare output files $case_input = $this->tempdir->file("{$case}.in"); $case_output = $this->tempdir->file("{$case}.out"); $case_error = $this->tempdir->file("{$case}.err"); $case_limit_error = $this->tempdir->file("{$case}.limit-err"); copy($this->entity->testcase_input($case), $case_input); make_file_readable($case_input); make_file_writable($case_output); make_file_writable($case_error); make_file_writable($case_limit_error); // run program $limits = $this->entity->run_limits(); $result = SystemUtil::safe_command($this->tempdir->dir, $runner, array($this->exe_file, $case_input, $case_output, $case_error, $flags), $limits, $case_limit_error); if (!file_exists($case_output)) { file_put_contents($case_output, "<<NO OUTPUT FILE CREATED>>"); $result = false; echo " No output file created\n"; } if (!$result && file_exists($case_limit_error) && filesize($case_limit_error) > 0) { // use limit error message as error output copy($case_limit_error, $case_error); } // store results $this->put_tempfile("{$case}.out"); $this->put_tempfile("{$case}.err"); return $result; }