fix test case meta info usage

This commit is contained in:
virusdefender 2016-10-26 22:51:31 +08:00
parent 3a6d0cb56a
commit 5be08646ba

View File

@ -53,12 +53,15 @@ class JudgeClient(object):
except ValueError: except ValueError:
raise JudgeClientError("Bad test case config") raise JudgeClientError("Bad test case config")
def _get_test_case_file_info(self, test_case_file_id):
return self._test_case_info["test_cases"][test_case_file_id]
def _compare_output(self, test_case_file_id): def _compare_output(self, test_case_file_id):
user_output_file = os.path.join(self._submission_dir, str(test_case_file_id) + ".out") user_output_file = os.path.join(self._submission_dir, str(test_case_file_id) + ".out")
with open(user_output_file, "r") as f: with open(user_output_file, "r") as f:
content = f.read() content = f.read()
output_md5 = hashlib.md5(content.strip()).hexdigest() output_md5 = hashlib.md5(content.strip()).hexdigest()
result = output_md5 == self._test_case_info["test_cases"][str(test_case_file_id)]["striped_output_md5"] result = output_md5 == self._get_test_case_file_info(test_case_file_id)["striped_output_md5"]
return output_md5, result return output_md5, result
def _spj(self, in_file_path, user_out_file_path): def _spj(self, in_file_path, user_out_file_path):
@ -90,8 +93,8 @@ class JudgeClient(object):
return SPJ_ERROR return SPJ_ERROR
def _judge_one(self, test_case_file_id): def _judge_one(self, test_case_file_id):
in_file = os.path.join(self._test_case_dir, str(test_case_file_id) + ".in").encode("utf-8") in_file = os.path.join(self._test_case_dir, self._get_test_case_file_info(test_case_file_id)["input_name"]).encode("utf-8")
user_out_file = os.path.join(self._submission_dir, str(test_case_file_id) + ".out").encode("utf-8") user_output_file = os.path.join(self._submission_dir, test_case_file_id + ".out").encode("utf-8")
command = self._run_config["command"].format(exe_path=self._exe_path, exe_dir=os.path.dirname(self._exe_path), command = self._run_config["command"].format(exe_path=self._exe_path, exe_dir=os.path.dirname(self._exe_path),
max_memory=self._max_memory / 1024).split(" ") max_memory=self._max_memory / 1024).split(" ")
@ -105,8 +108,8 @@ class JudgeClient(object):
max_process_number=_judger.UNLIMITED, max_process_number=_judger.UNLIMITED,
exe_path=command[0].encode("utf-8"), exe_path=command[0].encode("utf-8"),
input_path=in_file, input_path=in_file,
output_path=user_out_file, output_path=user_output_file,
error_path=user_out_file, error_path=user_output_file,
args=[item.encode("utf-8") for item in command[1::]], args=[item.encode("utf-8") for item in command[1::]],
env=env, env=env,
log_path=JUDGER_RUN_LOG_PATH, log_path=JUDGER_RUN_LOG_PATH,
@ -123,7 +126,7 @@ class JudgeClient(object):
if not self._spj_config or not self._spj_version: if not self._spj_config or not self._spj_version:
raise JudgeClientError("spj_config or spj_version not set") raise JudgeClientError("spj_config or spj_version not set")
spj_result = self._spj(in_file_path=in_file, user_out_file_path=user_out_file) spj_result = self._spj(in_file_path=in_file, user_out_file_path=user_output_file)
if spj_result == SPJ_WA: if spj_result == SPJ_WA:
run_result["result"] = _judger.RESULT_WRONG_ANSWER run_result["result"] = _judger.RESULT_WRONG_ANSWER
@ -148,8 +151,8 @@ class JudgeClient(object):
def run(self): def run(self):
tmp_result = [] tmp_result = []
result = [] result = []
for _ in range(self._test_case_info["test_case_number"]): for test_case_file_id, _ in self._test_case_info["test_cases"].iteritems():
tmp_result.append(self._pool.apply_async(_run, (self, _ + 1))) tmp_result.append(self._pool.apply_async(_run, (self, test_case_file_id)))
self._pool.close() self._pool.close()
self._pool.join() self._pool.join()
for item in tmp_result: for item in tmp_result: