mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-27 16:06:39 +00:00
fixed a few minor problems for bug 844 and created a first passing test case
This commit is contained in:
+39
@@ -35,6 +35,7 @@ import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
@@ -600,6 +601,44 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
|
||||
assertTrue(rankedCompetitors.indexOf(c[0]) == rankedCompetitors.indexOf(c[1])-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testScoringConsideringNotAllRaces() throws NoWindException {
|
||||
// one discard at four races
|
||||
Competitor[] c = createCompetitors(4).toArray(new Competitor[0]);
|
||||
// Leaderboard: Accumulated with incremental discards
|
||||
// R1 R2 R3 R4 R5 R6 R1 R2 R3 R4 R5 R6
|
||||
// c[0]: 2 2 3 3 (4) 4 2 4 7 7 10 14
|
||||
// c[1]: 3 3 2 (4) 3 3 3 6 8 8 11 14
|
||||
// c[2]: 1 1 1 (2) 2 2 1 2 3 3 5 7
|
||||
// c[3]:(4) 4 4 1 1 1 4 8 12 9 10 11
|
||||
Competitor[] f1 = new Competitor[] { c[2], c[0], c[1], c[3] };
|
||||
Competitor[] f2 = new Competitor[] { c[2], c[0], c[1], c[3] };
|
||||
Competitor[] f3 = new Competitor[] { c[2], c[1], c[0], c[3] };
|
||||
Competitor[] f4 = new Competitor[] { c[3], c[2], c[0], c[1] };
|
||||
Competitor[] f5 = new Competitor[] { c[3], c[2], c[1], c[0] };
|
||||
Competitor[] f6 = new Competitor[] { c[3], c[2], c[1], c[0] };
|
||||
Regatta regatta = createRegatta(/* qualifying */0, new String[] { "Default" }, /* final */6, new String[] { "Default" },
|
||||
/* medal */ false, "testTieBreakWithTwoVersusOneSeconds",
|
||||
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true),
|
||||
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
|
||||
Leaderboard leaderboard = createLeaderboard(regatta, /* discarding thresholds */ new int[] { 4 });
|
||||
TimePoint later = createAndAttachTrackedRaces(series.get(1), "Default", f1, f2, f3, f4, f5, f6);
|
||||
Map<RaceColumn, List<Competitor>> rankedCompetitorsFromBestToWorstAfterEachRaceColumn =
|
||||
leaderboard.getRankedCompetitorsFromBestToWorstAfterEachRaceColumn(later);
|
||||
assertEquals(Arrays.asList(c[2], c[0], c[1], c[3]),
|
||||
rankedCompetitorsFromBestToWorstAfterEachRaceColumn.get(Util.get(leaderboard.getRaceColumns(), 0)));
|
||||
assertEquals(Arrays.asList(c[2], c[0], c[1], c[3]),
|
||||
rankedCompetitorsFromBestToWorstAfterEachRaceColumn.get(Util.get(leaderboard.getRaceColumns(), 1)));
|
||||
assertEquals(Arrays.asList(c[2], c[0], c[1], c[3]),
|
||||
rankedCompetitorsFromBestToWorstAfterEachRaceColumn.get(Util.get(leaderboard.getRaceColumns(), 2)));
|
||||
assertEquals(Arrays.asList(c[2], c[0], c[1], c[3]),
|
||||
rankedCompetitorsFromBestToWorstAfterEachRaceColumn.get(Util.get(leaderboard.getRaceColumns(), 3)));
|
||||
assertEquals(Arrays.asList(c[2], c[3], c[0], c[1]), // c[3] has one win, c[0] none
|
||||
rankedCompetitorsFromBestToWorstAfterEachRaceColumn.get(Util.get(leaderboard.getRaceColumns(), 4)));
|
||||
assertEquals(Arrays.asList(c[2], c[3], c[0], c[1]), // c[0] has more second places than c[1] (2 vs. 1)
|
||||
rankedCompetitorsFromBestToWorstAfterEachRaceColumn.get(Util.get(leaderboard.getRaceColumns(), 5)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTieBreakByMedalRaceScoreOnlyIfEqualTotalScore() throws NoWindException {
|
||||
Competitor[] c = createCompetitors(2).toArray(new Competitor[0]);
|
||||
|
||||
@@ -337,5 +337,12 @@ public interface Leaderboard extends Named {
|
||||
* races attached to this leaderboard
|
||||
*/
|
||||
Long getTotalTimeSailedInMilliseconds(Competitor competitor, TimePoint timePoint);
|
||||
|
||||
/**
|
||||
* Same as {@link #getTotalPoints(Competitor, RaceColumn, TimePoint)}, only that for determining the discarded
|
||||
* results only <code>raceColumnsToConsider</code> are considered.
|
||||
*/
|
||||
Double getTotalPoints(Competitor competitor, RaceColumn raceColumn, Iterable<RaceColumn> raceColumnsToConsider,
|
||||
TimePoint timePoint) throws NoWindException;
|
||||
|
||||
}
|
||||
|
||||
+3
-2
@@ -228,10 +228,11 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
|
||||
return getTotalPoints(competitor, raceColumn, getRaceColumns(), timePoint);
|
||||
}
|
||||
|
||||
private Double getTotalPoints(Competitor competitor, RaceColumn raceColumn,
|
||||
@Override
|
||||
public Double getTotalPoints(Competitor competitor, RaceColumn raceColumn,
|
||||
Iterable<RaceColumn> raceColumnsToConsider, TimePoint timePoint) throws NoWindException {
|
||||
Double result;
|
||||
if (isDiscarded(competitor, raceColumn, timePoint)) {
|
||||
if (isDiscarded(competitor, raceColumn, raceColumnsToConsider, timePoint)) {
|
||||
result = 0.0;
|
||||
} else {
|
||||
final Double netPoints = getNetPoints(competitor, raceColumn, timePoint);
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ public class LeaderboardTotalRankComparator implements Comparator<Competitor> {
|
||||
for (Competitor competitor : leaderboard.getCompetitors()) {
|
||||
for (RaceColumn raceColumn : raceColumnsToConsider) {
|
||||
totalPointsCache.put(new Pair<Competitor, RaceColumn>(competitor, raceColumn),
|
||||
leaderboard.getTotalPoints(competitor, raceColumn, timePoint));
|
||||
leaderboard.getTotalPoints(competitor, raceColumn, raceColumnsToConsider, timePoint));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user