mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-06 20:33:54 +00:00
added test cases for medal race scoring predecende
This commit is contained in:
1 parent
920743bdd5
commit
9c24993816
2 files changed
+100
-4
No files matched your search
+97
-3
@@ -1,6 +1,8 @@
|
||||
package com.sap.sailing.domain.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -35,10 +37,12 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllTrackedAndStartedWithDifferentScores() {
|
||||
public void testOneStartedRaceWithDifferentScores() {
|
||||
List<Competitor> competitors = createCompetitors(10);
|
||||
Regatta regatta = createRegatta(/* qualifying */ 0, new String[] { "Yellow", "Green" }, /* final */ 1, new String[] { "Gold", "Silver" },
|
||||
/* medal */ false, "testAllTrackedAndStartedWithDifferentScores", DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */ true));
|
||||
Regatta regatta = createRegatta(/* qualifying */0, new String[] { "Default" }, /* final */1,
|
||||
new String[] { "Default" },
|
||||
/* medal */false, "testOneStartedRaceWithDifferentScores",
|
||||
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true));
|
||||
Leaderboard leaderboard = createLeaderboard(regatta, /* discarding thresholds */ new int[0]);
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
TimePoint later = new MillisecondsTimePoint(now.asMillis()+1000);
|
||||
@@ -49,6 +53,96 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
|
||||
assertEquals(competitors, rankedCompetitors);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistributionAcrossQualifyingFleetsWithDifferentScores() {
|
||||
List<Competitor> competitors = createCompetitors(10);
|
||||
List<Competitor> yellow = new ArrayList<Competitor>();
|
||||
List<Competitor> blue = new ArrayList<Competitor>();
|
||||
for (int i=0; i<5; i++) {
|
||||
yellow.add(competitors.get(2*i));
|
||||
blue.add(competitors.get(2*i+1));
|
||||
}
|
||||
Regatta regatta = createRegatta(/* qualifying */1, new String[] { "Yellow", "Blue" }, /* final */0,
|
||||
new String[] { "Default" },
|
||||
/* medal */false, "testAllTrackedAndStartedWithDifferentScores",
|
||||
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true));
|
||||
Leaderboard leaderboard = createLeaderboard(regatta, /* discarding thresholds */ new int[0]);
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
TimePoint later = new MillisecondsTimePoint(now.asMillis()+1000);
|
||||
RaceColumn q1Column = series.get(0).getRaceColumnByName("Q1");
|
||||
TrackedRace q1Yellow = new MockedTrackedRaceWithStartTimeAndRanks(now, yellow);
|
||||
q1Column.setTrackedRace(q1Column.getFleetByName("Yellow"), q1Yellow);
|
||||
TrackedRace q1Blue = new MockedTrackedRaceWithStartTimeAndRanks(now, blue);
|
||||
q1Column.setTrackedRace(q1Column.getFleetByName("Blue"), q1Blue);
|
||||
List<Competitor> rankedCompetitors = leaderboard.getCompetitorsFromBestToWorst(later);
|
||||
for (int i=0; i<5; i++) {
|
||||
Competitor first = rankedCompetitors.get(2*i);
|
||||
Competitor second = rankedCompetitors.get(2*i+1);
|
||||
assertTrue(first == yellow.get(i) || first == blue.get(i));
|
||||
assertTrue(second == yellow.get(i) || second == blue.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistributionAcrossFinalFleetsWithDifferentScores() {
|
||||
List<Competitor> competitors = createCompetitors(10);
|
||||
List<Competitor> gold = new ArrayList<Competitor>();
|
||||
List<Competitor> silver = new ArrayList<Competitor>();
|
||||
for (int i=0; i<5; i++) {
|
||||
gold.add(competitors.get(2*i));
|
||||
silver.add(competitors.get(2*i+1));
|
||||
}
|
||||
Regatta regatta = createRegatta(/* qualifying */0, new String[] { "Default" }, /* final */1, new String[] {
|
||||
"Gold", "Silver" },
|
||||
/* medal */false, "testDistributionAcrossFinalFleetsWithDifferentScores",
|
||||
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true));
|
||||
Leaderboard leaderboard = createLeaderboard(regatta, /* discarding thresholds */ new int[0]);
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
TimePoint later = new MillisecondsTimePoint(now.asMillis()+1000);
|
||||
RaceColumn f1Column = series.get(1).getRaceColumnByName("F1");
|
||||
TrackedRace f1Gold = new MockedTrackedRaceWithStartTimeAndRanks(now, gold);
|
||||
f1Column.setTrackedRace(f1Column.getFleetByName("Gold"), f1Gold);
|
||||
TrackedRace f1Silver = new MockedTrackedRaceWithStartTimeAndRanks(now, silver);
|
||||
f1Column.setTrackedRace(f1Column.getFleetByName("Silver"), f1Silver);
|
||||
List<Competitor> rankedCompetitors = leaderboard.getCompetitorsFromBestToWorst(later);
|
||||
for (int i=0; i<5; i++) {
|
||||
assertSame(gold.get(i), rankedCompetitors.get(i));
|
||||
assertSame(silver.get(i), rankedCompetitors.get(i+5));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMedalTakesPrecedence() {
|
||||
final int firstMedalCompetitorIndex = 3;
|
||||
List<Competitor> competitors = createCompetitors(20);
|
||||
List<Competitor> medal = competitors.subList(firstMedalCompetitorIndex, firstMedalCompetitorIndex+10);
|
||||
Regatta regatta = createRegatta(/* qualifying */ 0, new String[] { "Default" }, /* final */ 1, new String[] { "Default" },
|
||||
/* medal */ true, "testDistributionAcrossFinalFleetsWithDifferentScores",
|
||||
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */ true));
|
||||
Leaderboard leaderboard = createLeaderboard(regatta, /* discarding thresholds */ new int[0]);
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
TimePoint later = new MillisecondsTimePoint(now.asMillis()+1000);
|
||||
RaceColumn f1Column = series.get(1).getRaceColumnByName("F1");
|
||||
TrackedRace q1Default = new MockedTrackedRaceWithStartTimeAndRanks(now, competitors);
|
||||
f1Column.setTrackedRace(f1Column.getFleetByName("Default"), q1Default);
|
||||
TrackedRace medalTrackedRace = new MockedTrackedRaceWithStartTimeAndRanks(now, medal);
|
||||
RaceColumn medalColumn = series.get(2).getRaceColumnByName("M");
|
||||
medalColumn.setTrackedRace(medalColumn.getFleetByName("Medal"), medalTrackedRace);
|
||||
List<Competitor> rankedCompetitors = leaderboard.getCompetitorsFromBestToWorst(later);
|
||||
// medalists rank top
|
||||
for (int i=0; i<10; i++) {
|
||||
assertSame(medal.get(i), rankedCompetitors.get(i));
|
||||
}
|
||||
// others rank according to their non-medal ranking in the final round
|
||||
for (int i=10; i<competitors.size(); i++) {
|
||||
if (i<10+firstMedalCompetitorIndex) {
|
||||
assertSame(competitors.get(i-10), rankedCompetitors.get(i));
|
||||
} else {
|
||||
assertSame(competitors.get(i), rankedCompetitors.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Competitor> createCompetitors(int numberOfCompetitorsToCreate) {
|
||||
List<Competitor> result = new ArrayList<Competitor>();
|
||||
for (int i=1; i<=numberOfCompetitorsToCreate; i++) {
|
||||
|
||||
+3
-1
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.domain.test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.NavigableSet;
|
||||
@@ -52,7 +53,8 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace {
|
||||
public MockedTrackedRaceWithStartTimeAndRanks(TimePoint startTime, List<Competitor> competitorsFromBestToWorst) {
|
||||
super();
|
||||
this.startTime = startTime;
|
||||
this.competitorsFromBestToWorst = competitorsFromBestToWorst;
|
||||
// copies the list to make sure that later modifications to the list passed to this constructor don't affect the ranking produced by this race
|
||||
this.competitorsFromBestToWorst = new ArrayList<Competitor>(competitorsFromBestToWorst);
|
||||
final List<Waypoint> waypoints = Collections.emptyList();
|
||||
this.race = new RaceDefinitionImpl("Mocked Race", new CourseImpl("Mock Course", waypoints), /* boat class */ null,
|
||||
competitorsFromBestToWorst);
|
||||
|
||||
Reference in new issue
Block a user