示例#1
0
 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;
 }