|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 | from functools import reduce |
3 | | -from task_maker.task_maker_frontend import ResultStatus |
4 | | - |
5 | | -from task_maker.uis.ioi import SourceFileCompilationStatus, \ |
6 | | - TestcaseSolutionStatus |
7 | 3 | from typing import Optional, List, Tuple |
8 | 4 |
|
| 5 | +from task_maker.task_maker_frontend import ResultStatus |
9 | 6 | from task_maker.tests.test import interface |
| 7 | +from task_maker.uis import SourceFileCompilationStatus |
| 8 | +from task_maker.uis.ioi import TestcaseSolutionStatus |
| 9 | +from task_maker.uis.terry import SolutionInfo |
10 | 10 |
|
11 | 11 |
|
12 | 12 | class TestSolution: |
@@ -69,24 +69,24 @@ def __repr__(self): |
69 | 69 | return "<TestSolutionNotCompile name=%s>" % self.name |
70 | 70 |
|
71 | 71 |
|
72 | | -# class TerryTestSolution: |
73 | | -# def __init__(self, task: "TerryTestInterface", name: str, score: float, |
74 | | -# tc_score: Optional[List]): |
75 | | -# self.task = task |
76 | | -# self.name = name |
77 | | -# self.score = score |
78 | | -# self.tc_score = tc_score |
79 | | -# |
80 | | -# def check_solution(self): |
81 | | -# assert self.name in ui.solutions |
82 | | -# assert ui._compilation_status[self.name] == DONE |
83 | | -# solution = ui._terry_test_status[self.name] |
84 | | -# assert abs(solution.result.score * self.task.max_score - |
85 | | -# self.score) < 0.0001 |
86 | | -# if self.tc_score: |
87 | | -# for status, expected in zip(solution.result.testcases, |
88 | | -# self.tc_score): |
89 | | -# assert status == expected |
| 72 | +class TerryTestSolution: |
| 73 | + def __init__(self, task: "TerryTestInterface", name: str, score: float, |
| 74 | + tc_score: Optional[List]): |
| 75 | + self.task = task |
| 76 | + self.name = name |
| 77 | + self.score = score |
| 78 | + self.tc_score = tc_score |
| 79 | + |
| 80 | + def check_solution(self): |
| 81 | + assert self.name in interface.solutions |
| 82 | + assert self.name in interface.solutions_info |
| 83 | + assert interface.solutions[ |
| 84 | + self.name].status == SourceFileCompilationStatus.DONE |
| 85 | + info = interface.solutions_info[self.name] # type: SolutionInfo |
| 86 | + assert abs(info.score * self.task.max_score - self.score) < 0.0001 |
| 87 | + if self.tc_score: |
| 88 | + for status, expected in zip(info.testcases_status, self.tc_score): |
| 89 | + assert status == expected |
90 | 90 |
|
91 | 91 |
|
92 | 92 | class TestInterface: |
@@ -185,45 +185,42 @@ def run_checks(self): |
185 | 185 | sol.check_solution() |
186 | 186 |
|
187 | 187 |
|
188 | | -# class TerryTestInterface: |
189 | | -# def __init__(self, name: str, desc: str, max_score: float): |
190 | | -# self.solutions = [] # type: List[TerryTestSolution] |
191 | | -# self.generator_name = None # type: Optional[str] |
192 | | -# self.validator_name = None # type: Optional[str] |
193 | | -# self.checker_name = None # type: Optional[str] |
194 | | -# self.max_score = max_score |
195 | | -# self.name = name |
196 | | -# self.desc = desc |
197 | | -# self.fatal_error = False |
198 | | -# |
199 | | -# def set_generator(self, name: str): |
200 | | -# self.generator_name = name |
201 | | -# |
202 | | -# def set_validator(self, name: str): |
203 | | -# self.validator_name = name |
204 | | -# |
205 | | -# def set_checker(self, name: str): |
206 | | -# self.checker_name = name |
207 | | -# |
208 | | -# def set_fatal_error(self): |
209 | | -# self.fatal_error = True |
210 | | -# |
211 | | -# def add_solution(self, name: str, score: float, tc_score: Optional[List]): |
212 | | -# self.solutions.append(TerryTestSolution(self, name, score, tc_score)) |
213 | | -# |
214 | | -# def run_checks(self, ui: TestingUI): |
215 | | -# assert ui.task_name == "%s (%s)" % (self.desc, self.name) |
216 | | -# if self.fatal_error: |
217 | | -# assert ui.fatal_errors |
218 | | -# else: |
219 | | -# assert not ui.fatal_errors |
220 | | -# |
221 | | -# for sol in self.solutions: |
222 | | -# sol.check_solution(ui) |
223 | | -# |
224 | | -# if self.generator_name: |
225 | | -# assert self.generator_name in ui._other_compilations |
226 | | -# if self.validator_name: |
227 | | -# assert self.validator_name in ui._other_compilations |
228 | | -# if self.checker_name: |
229 | | -# assert self.checker_name in ui._other_compilations |
| 188 | +class TerryTestInterface: |
| 189 | + def __init__(self, name: str, desc: str, max_score: float): |
| 190 | + self.solutions = [] # type: List[TerryTestSolution] |
| 191 | + self.generator_name = None # type: Optional[str] |
| 192 | + self.validator_name = None # type: Optional[str] |
| 193 | + self.checker_name = None # type: Optional[str] |
| 194 | + self.max_score = max_score |
| 195 | + self.name = name |
| 196 | + self.desc = desc |
| 197 | + self.error = "" |
| 198 | + |
| 199 | + def set_generator(self, name: str): |
| 200 | + self.generator_name = name |
| 201 | + |
| 202 | + def set_validator(self, name: str): |
| 203 | + self.validator_name = name |
| 204 | + |
| 205 | + def set_checker(self, name: str): |
| 206 | + self.checker_name = name |
| 207 | + |
| 208 | + def expect_error(self, error: str): |
| 209 | + self.error = error |
| 210 | + |
| 211 | + def add_solution(self, name: str, score: float, tc_score: Optional[List]): |
| 212 | + self.solutions.append(TerryTestSolution(self, name, score, tc_score)) |
| 213 | + |
| 214 | + def run_checks(self): |
| 215 | + assert interface.task.name == self.name |
| 216 | + assert interface.task.title == self.desc |
| 217 | + if self.generator_name: |
| 218 | + assert self.generator_name in interface.non_solutions |
| 219 | + if self.validator_name: |
| 220 | + assert self.validator_name in interface.non_solutions |
| 221 | + if self.checker_name: |
| 222 | + assert self.checker_name in interface.non_solutions |
| 223 | + if self.error: |
| 224 | + assert any(self.error in error for error in interface.errors) |
| 225 | + for sol in self.solutions: |
| 226 | + sol.check_solution() |
0 commit comments