Skip to content

Commit 76f0c60

Browse files
committed
fix
1 parent 31b7e7a commit 76f0c60

File tree

3 files changed

+104
-5
lines changed

3 files changed

+104
-5
lines changed

common/db/models/models_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestTestResultSerialization(t *testing.T) {
3737
t.Run("json", func(t *testing.T) {
3838
b, err := json.Marshal(testResult)
3939
require.Nil(t, err)
40-
require.Equal(t, `{"testNumber":1,"verdict":"OK","time":"5s","memory":"5m"}`, string(b))
40+
require.Equal(t, `{"TestNumber":1,"Verdict":"OK","Time":"5s","Memory":"5m"}`, string(b))
4141

4242
var newTestResult TestResult
4343
err = json.Unmarshal(b, &newTestResult)
@@ -48,10 +48,10 @@ func TestTestResultSerialization(t *testing.T) {
4848
t.Run("yaml", func(t *testing.T) {
4949
b, err := yaml.Marshal(testResult)
5050
require.Nil(t, err)
51-
require.Equal(t, `testNumber: 1
52-
verdict: OK
53-
time: 5s
54-
memory: 5m
51+
require.Equal(t, `TestNumber: 1
52+
Verdict: OK
53+
Time: 5s
54+
Memory: 5m
5555
`, string(b))
5656
var newTestResult TestResult
5757
err = yaml.Unmarshal(b, &newTestResult)

master/queue/jobgenerators/generator_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,21 @@ func TestIOIGenerator(t *testing.T) {
274274
},
275275
TestsNumber: 1,
276276
},
277+
// type Complete, but Score is nil
278+
{
279+
ProblemType: models.ProblemTypeIOI,
280+
TestGroups: []models.TestGroup{
281+
{
282+
Name: "name",
283+
FirstTest: 1,
284+
LastTest: 1,
285+
Score: nil,
286+
ScoringType: models.TestGroupScoringTypeComplete,
287+
RequiredGroupNames: make([]string, 0),
288+
},
289+
},
290+
TestsNumber: 1,
291+
},
277292
// cyclic groups
278293
{
279294
ProblemType: models.ProblemTypeIOI,
@@ -435,6 +450,13 @@ func TestIOIGenerator(t *testing.T) {
435450
require.Equal(t, verdict.OK, result.Verdict)
436451
require.Equal(t, uint64(i)+1, result.TestNumber)
437452
}
453+
require.Equal(t, sub.GroupResults, models.GroupResults{
454+
{
455+
GroupName: "group1",
456+
Points: 100.,
457+
Passed: true,
458+
},
459+
})
438460

439461
require.Equal(t, wasProblem, problemWithOneGroup)
440462
})
@@ -495,6 +517,18 @@ func TestIOIGenerator(t *testing.T) {
495517
require.Equal(t, 0., sub.Score)
496518
require.Equal(t, verdict.WA, sub.TestResults[0].Verdict)
497519
require.Equal(t, verdict.SK, sub.TestResults[1].Verdict)
520+
require.Equal(t, sub.GroupResults, models.GroupResults{
521+
{
522+
GroupName: "group1",
523+
Points: 0.,
524+
Passed: false,
525+
},
526+
{
527+
GroupName: "group2",
528+
Points: 0.,
529+
Passed: false,
530+
},
531+
})
498532
})
499533

500534
t.Run("OK 2nd, WA 1st", func(t *testing.T) {
@@ -515,6 +549,18 @@ func TestIOIGenerator(t *testing.T) {
515549
require.Equal(t, 0., sub.Score)
516550
require.Equal(t, verdict.WA, sub.TestResults[0].Verdict)
517551
require.Equal(t, verdict.SK, sub.TestResults[1].Verdict)
552+
require.Equal(t, sub.GroupResults, models.GroupResults{
553+
{
554+
GroupName: "group1",
555+
Points: 0.,
556+
Passed: false,
557+
},
558+
{
559+
GroupName: "group2",
560+
Points: 0.,
561+
Passed: false,
562+
},
563+
})
518564
})
519565

520566
t.Run("OK 1st, WA 2nd", func(t *testing.T) {
@@ -535,6 +581,18 @@ func TestIOIGenerator(t *testing.T) {
535581
require.Equal(t, 50., sub.Score)
536582
require.Equal(t, verdict.OK, sub.TestResults[0].Verdict)
537583
require.Equal(t, verdict.WA, sub.TestResults[1].Verdict)
584+
require.Equal(t, sub.GroupResults, models.GroupResults{
585+
{
586+
GroupName: "group1",
587+
Points: 50.,
588+
Passed: true,
589+
},
590+
{
591+
GroupName: "group2",
592+
Points: 0.,
593+
Passed: false,
594+
},
595+
})
538596
})
539597

540598
t.Run("WA 2nd, OK 1st", func(t *testing.T) {
@@ -555,6 +613,18 @@ func TestIOIGenerator(t *testing.T) {
555613
require.Equal(t, 50., sub.Score)
556614
require.Equal(t, verdict.OK, sub.TestResults[0].Verdict)
557615
require.Equal(t, verdict.WA, sub.TestResults[1].Verdict)
616+
require.Equal(t, sub.GroupResults, models.GroupResults{
617+
{
618+
GroupName: "group1",
619+
Points: 50.,
620+
Passed: true,
621+
},
622+
{
623+
GroupName: "group2",
624+
Points: 0.,
625+
Passed: false,
626+
},
627+
})
558628
})
559629

560630
t.Run("WA 1st, then take 2nd", func(t *testing.T) {
@@ -572,6 +642,18 @@ func TestIOIGenerator(t *testing.T) {
572642
require.Equal(t, 0., sub.Score)
573643
require.Equal(t, verdict.WA, sub.TestResults[0].Verdict)
574644
require.Equal(t, verdict.SK, sub.TestResults[1].Verdict)
645+
require.Equal(t, sub.GroupResults, models.GroupResults{
646+
{
647+
GroupName: "group1",
648+
Points: 0.,
649+
Passed: false,
650+
},
651+
{
652+
GroupName: "group2",
653+
Points: 0.,
654+
Passed: false,
655+
},
656+
})
575657
})
576658

577659
t.Run("Fail in group with >1 tests", func(t *testing.T) {
@@ -612,6 +694,13 @@ func TestIOIGenerator(t *testing.T) {
612694
require.Equal(t, 0., sub.Score)
613695
require.Equal(t, verdict.WA, sub.TestResults[0].Verdict)
614696
require.Equal(t, verdict.SK, sub.TestResults[1].Verdict)
697+
require.Equal(t, sub.GroupResults, models.GroupResults{
698+
{
699+
GroupName: "group1",
700+
Points: 0.,
701+
Passed: false,
702+
},
703+
})
615704
})
616705
})
617706
}

master/queue/jobgenerators/ioi_generator.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ func (i *IOIGenerator) prepareGenerator() error {
8484
for _, group := range problem.TestGroups {
8585
switch group.ScoringType {
8686
case models.TestGroupScoringTypeComplete:
87+
if group.Score == nil {
88+
return fmt.Errorf("group %v in problem %v doesn't have Score", group.Name, problem.ID)
89+
}
8790
case models.TestGroupScoringTypeEachTest:
8891
if group.TestScore == nil {
8992
return fmt.Errorf("group %v in problem %v doesn't have TestScore", group.Name, problem.ID)
@@ -159,6 +162,7 @@ func (i *IOIGenerator) finalizeResults() {
159162
i.submission.TestResults[j].Points = pointer.Float64(0.0)
160163
i.submission.TestResults[j].Error = ""
161164
}
165+
i.groupNameToGroupResult[groupName] = groupResult
162166
continue
163167
}
164168

@@ -174,6 +178,7 @@ func (i *IOIGenerator) finalizeResults() {
174178
}
175179
if groupResult.Passed && group.ScoringType == models.TestGroupScoringTypeComplete {
176180
totalScore += *group.Score
181+
groupResult.Points = *group.Score
177182
}
178183

179184
switch group.ScoringType {
@@ -194,11 +199,16 @@ func (i *IOIGenerator) finalizeResults() {
194199
fallthrough
195200
case models.TestGroupScoringTypeMin:
196201
for j := group.FirstTest - 1; j < group.LastTest; j++ {
202+
groupResult.Points += *i.submission.TestResults[j].Points
197203
totalScore += *i.submission.TestResults[j].Points
198204
}
199205
}
206+
i.groupNameToGroupResult[groupName] = groupResult
200207
}
201208
i.submission.Score = totalScore
209+
for _, group := range i.problem.TestGroups {
210+
i.submission.GroupResults = append(i.submission.GroupResults, *i.groupNameToGroupResult[group.Name])
211+
}
202212
}
203213

204214
func (i *IOIGenerator) testNumberToGroup(testNumber uint64) *models.TestGroup {

0 commit comments

Comments
 (0)