Mercurial > ~astiob > upreckon > hgweb
comparison testcases.py @ 104:8f46e84922f9
Output-only problems are now supported
| author | Oleg Oshmyan <chortos@inbox.lv> | 
|---|---|
| date | Fri, 08 Apr 2011 17:42:30 +0300 | 
| parents | 4e6f231f055f | 
| children | 9f922b11c98a | 
   comparison
  equal
  deleted
  inserted
  replaced
| 103:4e6f231f055f | 104:8f46e84922f9 | 
|---|---|
| 126 'process', 'time_started', 'time_stopped', | 126 'process', 'time_started', 'time_stopped', | 
| 127 'realinname', 'realoutname', 'maxcputime', 'maxwalltime', | 127 'realinname', 'realoutname', 'maxcputime', 'maxwalltime', | 
| 128 'maxmemory', 'has_called_back', 'files_to_delete', | 128 'maxmemory', 'has_called_back', 'files_to_delete', | 
| 129 'cpu_time_limit_string', 'wall_time_limit_string', | 129 'cpu_time_limit_string', 'wall_time_limit_string', | 
| 130 'time_limit_string') | 130 'time_limit_string') | 
| 131 needs_realinname = True | |
| 131 | 132 | 
| 132 if ABCMeta: | 133 if ABCMeta: | 
| 133 __metaclass__ = ABCMeta | 134 __metaclass__ = ABCMeta | 
| 134 | 135 | 
| 135 def __init__(case, prob, id, isdummy, points): | 136 def __init__(case, prob, id, isdummy, points): | 
| 147 if case.maxwalltime: | 148 if case.maxwalltime: | 
| 148 case.wall_time_limit_string = '/%.3f' % case.maxwalltime | 149 case.wall_time_limit_string = '/%.3f' % case.maxwalltime | 
| 149 else: | 150 else: | 
| 150 case.wall_time_limit_string = '' | 151 case.wall_time_limit_string = '' | 
| 151 if not isdummy: | 152 if not isdummy: | 
| 152 case.realinname = case.problem.config.testcaseinname | 153 if case.needs_realinname: | 
| 154 case.realinname = case.problem.config.testcaseinname | |
| 153 case.realoutname = case.problem.config.testcaseoutname | 155 case.realoutname = case.problem.config.testcaseoutname | 
| 154 else: | 156 else: | 
| 155 case.realinname = case.problem.config.dummyinname | 157 if case.needs_realinname: | 
| 158 case.realinname = case.problem.config.dummyinname | |
| 156 case.realoutname = case.problem.config.dummyoutname | 159 case.realoutname = case.problem.config.dummyoutname | 
| 157 | 160 | 
| 158 @abstractmethod | 161 @abstractmethod | 
| 159 def test(case): | 162 def test(case): | 
| 160 raise NotImplementedError | 163 raise NotImplementedError | 
| 333 | 336 | 
| 334 | 337 | 
| 335 # This is the only test case type not executing any programs to be tested | 338 # This is the only test case type not executing any programs to be tested | 
| 336 class OutputOnlyTestCase(ValidatedTestCase): | 339 class OutputOnlyTestCase(ValidatedTestCase): | 
| 337 __slots__ = () | 340 __slots__ = () | 
| 338 def cleanup(case): pass | 341 needs_realinname = False | 
| 342 | |
| 343 def cleanup(case): | |
| 344 pass | |
| 345 | |
| 346 def test(case, callback): | |
| 347 case.time_stopped = case.time_started = 0 | |
| 348 case.has_called_back = True | |
| 349 callback() | |
| 350 with open(case.problem.config.outname.replace('$', case.id), 'rU') as output: | |
| 351 return case.validate(output) | |
| 352 | |
| 339 | 353 | 
| 340 class BestOutputTestCase(ValidatedTestCase): | 354 class BestOutputTestCase(ValidatedTestCase): | 
| 341 __slots__ = () | 355 __slots__ = () | 
| 356 | |
| 342 | 357 | 
| 343 # This is the only test case type executing two programs simultaneously | 358 # This is the only test case type executing two programs simultaneously | 
| 344 class ReactiveTestCase(TestCase): | 359 class ReactiveTestCase(TestCase): | 
| 345 __slots__ = () | 360 __slots__ = () | 
| 346 # The basic idea is to launch the program to be tested and the grader | 361 # The basic idea is to launch the program to be tested and the grader | 
