mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 20:13:52 +00:00
fix for bug 3955: apply scores from RaceLog only if explicit or no MaxPointsReason is set; adjusted test; formerly failing test passes now
Change-Id: Idf2085e122eb0b30c86be0c254f360407c1819f9
This commit is contained in:
1 parent
d3e84161f0
commit
aeeb3cedbe
2 files changed
+22
-14
No files matched your search
+11
-11
@@ -97,12 +97,12 @@ public class ApplyScoresFromRaceLogTest extends LeaderboardScoringAndRankingTest
|
|||||||
assertEquals(competitors, rankedCompetitorsBeforeApplying); // no effects of preliminary results list yet
|
assertEquals(competitors, rankedCompetitorsBeforeApplying); // no effects of preliminary results list yet
|
||||||
f1RaceState.setFinishPositioningConfirmed(now);
|
f1RaceState.setFinishPositioningConfirmed(now);
|
||||||
for (final Competitor c : competitors) {
|
for (final Competitor c : competitors) {
|
||||||
assertEquals(scores.get(c)==null?competitors.indexOf(c)+1:scores.get(c), leaderboard.getTotalPoints(c, f1Column, now), 0.00000001);
|
assertEquals(scores.get(c)==null?(mprs.get(c) == null || mprs.get(c) == MaxPointsReason.NONE ? competitors.indexOf(c)+1 : competitors.size()+1):scores.get(c), leaderboard.getTotalPoints(c, f1Column, now), 0.00000001);
|
||||||
}
|
}
|
||||||
final List<Competitor> expectedNewOrder = new ArrayList<>(competitors);
|
final List<Competitor> expectedNewOrder = new ArrayList<>(competitors);
|
||||||
expectedNewOrder.sort((c1, c2)->
|
expectedNewOrder.sort((c1, c2)->
|
||||||
new Double(scores.get(c1)==null?competitors.indexOf(c1)+1:scores.get(c1)).compareTo(
|
new Double(scores.get(c1)==null?(mprs.get(c1) == null || mprs.get(c1) == MaxPointsReason.NONE ? competitors.indexOf(c1)+1 : competitors.size()+1):scores.get(c1)).compareTo(
|
||||||
new Double(scores.get(c2)==null?competitors.indexOf(c2)+1:scores.get(c2))));
|
new Double(scores.get(c2)==null?(mprs.get(c2) == null || mprs.get(c2) == MaxPointsReason.NONE ? competitors.indexOf(c2)+1 : competitors.size()+1):scores.get(c2))));
|
||||||
final List<Competitor> rankedCompetitorsAfterApplying = leaderboard.getCompetitorsFromBestToWorst(later);
|
final List<Competitor> rankedCompetitorsAfterApplying = leaderboard.getCompetitorsFromBestToWorst(later);
|
||||||
assertEquals(expectedNewOrder, rankedCompetitorsAfterApplying);
|
assertEquals(expectedNewOrder, rankedCompetitorsAfterApplying);
|
||||||
}
|
}
|
||||||
@@ -162,14 +162,14 @@ public class ApplyScoresFromRaceLogTest extends LeaderboardScoringAndRankingTest
|
|||||||
assertEquals(competitors, rankedCompetitorsBeforeApplying); // no effects of preliminary results list yet
|
assertEquals(competitors, rankedCompetitorsBeforeApplying); // no effects of preliminary results list yet
|
||||||
f1RaceState.setFinishPositioningConfirmed(now);
|
f1RaceState.setFinishPositioningConfirmed(now);
|
||||||
|
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(0), MaxPointsReason.DNF, 0, /* score is corrected */ false, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(0), MaxPointsReason.DNF, 0, /* score is corrected */ false, later);
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(1), MaxPointsReason.OCS, 0, /* score is corrected */ false, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(1), MaxPointsReason.OCS, 0, /* score is corrected */ false, later);
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(2), MaxPointsReason.DNF, 0.1, /* score is corrected */ true, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(2), MaxPointsReason.DNF, 0.1, /* score is corrected */ true, later);
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(3), MaxPointsReason.OCS, 0.2, /* score is corrected */ true, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(3), MaxPointsReason.OCS, 0.2, /* score is corrected */ true, later);
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(4), null, 6, /* score is corrected */ false, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(4), MaxPointsReason.NONE, 6, /* score is corrected */ true, later); // score corrected based on rank because no MaxPointsReason set
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(5), null, 2.4, /* score is corrected */ true, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(5), MaxPointsReason.NONE, 2.4, /* score is corrected */ true, later); // score corrected based on explicit score
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(6), MaxPointsReason.NONE, 4, /* score is corrected */ false, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(6), MaxPointsReason.NONE, 4, /* score is corrected */ true, later); // score corrected based on rank because MaxPointsReason.NONE set
|
||||||
assertScoreCorrections(leaderboard, f1Column, competitors.get(7), MaxPointsReason.NONE, 3.3, /* score is corrected */ true, later);
|
assertScoreCorrections(leaderboard, f1Column, competitors.get(7), MaxPointsReason.NONE, 3.3, /* score is corrected */ true, later); // score corrected based on explicit score
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertScoreCorrections(Leaderboard leaderboard, RaceColumn raceColumn, Competitor competitor,
|
private void assertScoreCorrections(Leaderboard leaderboard, RaceColumn raceColumn, Competitor competitor,
|
||||||
|
|||||||
+11
-3
@@ -143,9 +143,17 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
|||||||
if (positioningList != null) {
|
if (positioningList != null) {
|
||||||
for (CompetitorResult positionedCompetitor : positioningList) {
|
for (CompetitorResult positionedCompetitor : positioningList) {
|
||||||
Competitor competitor = service.getBaseDomainFactory().getExistingCompetitorById(positionedCompetitor.getCompetitorId());
|
Competitor competitor = service.getBaseDomainFactory().getExistingCompetitorById(positionedCompetitor.getCompetitorId());
|
||||||
int rankByRaceCommittee = getRankInPositioningListByRaceCommittee(positionedCompetitor);
|
// The score is updated when explicitly provided or when no penalty was set;
|
||||||
correctScoreInLeaderboard(leaderboard, raceColumn, timePoint, numberOfCompetitorsInRace,
|
// in turn, this means that when a penalty is set and no score is explicitly provided,
|
||||||
competitor, rankByRaceCommittee, positionedCompetitor.getScore());
|
// it is up to the scoring scheme to infer a penalty score for the MaxPointsReason.
|
||||||
|
// See also bug 3955.
|
||||||
|
if (positionedCompetitor.getScore() != null
|
||||||
|
|| positionedCompetitor.getMaxPointsReason() == null
|
||||||
|
|| positionedCompetitor.getMaxPointsReason().equals(MaxPointsReason.NONE)) {
|
||||||
|
int rankByRaceCommittee = getRankInPositioningListByRaceCommittee(positionedCompetitor);
|
||||||
|
correctScoreInLeaderboard(leaderboard, raceColumn, timePoint, numberOfCompetitorsInRace, competitor,
|
||||||
|
rankByRaceCommittee, positionedCompetitor.getScore());
|
||||||
|
}
|
||||||
setMaxPointsReasonInLeaderboardIfNecessary(leaderboard, raceColumn, timePoint, positionedCompetitor.getMaxPointsReason(), competitor);
|
setMaxPointsReasonInLeaderboardIfNecessary(leaderboard, raceColumn, timePoint, positionedCompetitor.getMaxPointsReason(), competitor);
|
||||||
}
|
}
|
||||||
// Since the metadata update is used by the Sailing suite to determine the final state of a race, it has to
|
// Since the metadata update is used by the Sailing suite to determine the final state of a race, it has to
|
||||||
|
|||||||
Reference in new issue
Block a user