@@ -371,6 +371,8 @@ def check_validator_key(parent, key, name, parName=None):
371
371
if Verification .problem ['type' ] != 'OutputOnly' :
372
372
check_keys (subtasks , ['samples' ])
373
373
hasSamples = True
374
+ else :
375
+ hasSamples = 'samples' in subtasks
374
376
except KeyError :
375
377
pass
376
378
@@ -394,6 +396,8 @@ def check_validator_key(parent, key, name, parName=None):
394
396
elif name == 'samples' :
395
397
if data ['score' ] != 0 :
396
398
error ('samples subtask score is non-zero' )
399
+ if data ['index' ] != 0 :
400
+ error ('samples subtask index is non-zero' )
397
401
else :
398
402
score_sum += data ['score' ]
399
403
@@ -407,8 +411,9 @@ def check_validator_key(parent, key, name, parName=None):
407
411
error ('sum of scores is {}' .format (score_sum ))
408
412
409
413
for i in range (len (subtasks )):
410
- if i + (0 if hasSamples else 1 ) not in indexes :
411
- error ('missing index {} in subtask indexes' .format (i ))
414
+ index = i + (0 if hasSamples else 1 )
415
+ if index not in indexes :
416
+ error ('missing index {} in subtask indexes' .format (index ))
412
417
413
418
return subtasks
414
419
@@ -424,18 +429,20 @@ def __init__(self):
424
429
425
430
def on_testset (self , testset_name , line_number ):
426
431
self .testsets .append (testset_name )
427
- self .tests_map [testset_name ] = set ()
432
+ # We use list instead of set here to detect if there is more than
433
+ # one test in each subtask (since they will have the same filename).
434
+ self .tests_map [testset_name ] = []
428
435
429
436
def on_subtask (self , subtask_name , line_number ):
430
437
self .subtasks .append (subtask_name )
431
438
self .used_testsets .add (subtask_name )
432
439
433
440
def on_include (self , testset_name , included_testset , line_number ):
434
441
self .used_testsets .add (included_testset )
435
- self .tests_map [testset_name ] | = self .tests_map [included_testset ]
442
+ self .tests_map [testset_name ] + = self .tests_map [included_testset ]
436
443
437
444
def on_test (self , testset_name , test_name , line , line_number ):
438
- self .tests_map [testset_name ].add (test_name )
445
+ self .tests_map [testset_name ].append (test_name )
439
446
440
447
441
448
gen_data = GenDataVisitor ()
@@ -484,6 +491,14 @@ def on_test(self, testset_name, test_name, line, line_number):
484
491
else :
485
492
warning ("testset '{}' has no tests" .format (testset ))
486
493
494
+ #Checking for multiple tests in one subtask for output only:
495
+ if Verification .problem ['type' ] == 'OutputOnly' :
496
+ for testset in gen_data .testsets :
497
+ if testset not in gen_subtasks :
498
+ error ('testset {} must not be defined in output only' .format (testset ))
499
+ elif len (gen_data .tests_map [testset ]) != 1 :
500
+ error ('subtask {} has more than one test' .format (testset ))
501
+
487
502
#Checking if a testset is defined but not used:
488
503
for ts in set (gen_data .testsets )- set (gen_data .used_testsets ):
489
504
warning ("testset '{}' is not used anywhere" .format (ts ))
0 commit comments