mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-24 13:03:55 +00:00
Merge branch 'master' into bug1260
Conflicts: java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPoint.java
This commit is contained in:
commit
29a804c8d3
4 files changed
+47
-5
No files matched your search
+42
-1
@@ -45,6 +45,7 @@ import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl;
|
||||
import com.sap.sailing.domain.leaderboard.impl.HighPoint;
|
||||
import com.sap.sailing.domain.leaderboard.impl.HighPointExtremeSailingSeriesOverall;
|
||||
import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets10LastBreaksTie;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
|
||||
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
||||
import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl;
|
||||
@@ -766,7 +767,7 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
|
||||
assertEquals(leaderboard.getTotalPoints(c[0], later), leaderboard.getTotalPoints(c[1], later), 0.000000001);
|
||||
assertEquals(rankedCompetitors.indexOf(c[0]), rankedCompetitors.indexOf(c[1])-1);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testTieBreakWithEqualWinsAndTwoVersusOneSecondsWithHighPointScoringScheme() throws NoWindException {
|
||||
Competitor[] c = createCompetitors(4).toArray(new Competitor[0]);
|
||||
@@ -787,6 +788,46 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest {
|
||||
assertEquals(rankedCompetitors.indexOf(c[0]), rankedCompetitors.indexOf(c[1])-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCompetitorsRankedEleventhOrLowerGetOnePointScore() throws NoWindException {
|
||||
Competitor[] competitors = createCompetitors(16).toArray(new Competitor[0]);
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
TimePoint later = new MillisecondsTimePoint(now.asMillis()+1000);
|
||||
FlexibleLeaderboard leaderboardHighPoint10LastBreaksTie = new FlexibleLeaderboardImpl("Test ESS Highpoint 10LastBreaksTie", new ThresholdBasedResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]),
|
||||
new HighPointFirstGets10LastBreaksTie(), null);
|
||||
leaderboardHighPoint10LastBreaksTie.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(competitors)), "R1", /* medalRace */ false,
|
||||
leaderboardHighPoint10LastBreaksTie.getFleet(null));
|
||||
assertTrue(leaderboardHighPoint10LastBreaksTie.getScoringScheme().getScoreComparator(/* nullScoresAreBetter */ false).compare(
|
||||
leaderboardHighPoint10LastBreaksTie.getTotalPoints(competitors[0], later), leaderboardHighPoint10LastBreaksTie.getTotalPoints(competitors[3], later)) < 0); // c0 better than c3
|
||||
assertEquals(16, leaderboardHighPoint10LastBreaksTie.getCompetitorsFromBestToWorst(later).size());
|
||||
assertEquals(new Double(10), leaderboardHighPoint10LastBreaksTie.getTotalPoints(competitors[0], later));
|
||||
assertEquals(new Double(1), leaderboardHighPoint10LastBreaksTie.getTotalPoints(competitors[15], later));
|
||||
// Normal HighPoint leaderboard has no max so that winner gets as many points as there are competitors
|
||||
FlexibleLeaderboard leaderboardHighPoint = new FlexibleLeaderboardImpl("Test ESS Highpoint", new ThresholdBasedResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]),
|
||||
new HighPoint(), null);
|
||||
leaderboardHighPoint.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(competitors)), "R1", /* medalRace */ false,
|
||||
leaderboardHighPoint.getFleet(null));
|
||||
assertEquals(16, leaderboardHighPoint.getCompetitorsFromBestToWorst(later).size());
|
||||
assertEquals(new Double(16), leaderboardHighPoint.getTotalPoints(competitors[0], later));
|
||||
FlexibleLeaderboard leaderboardHighPointESSOverall = new FlexibleLeaderboardImpl("Test ESS Highpoint Overall", new ThresholdBasedResultDiscardingRuleImpl(/* discarding thresholds */ new int[0]),
|
||||
new HighPointExtremeSailingSeriesOverall(), null);
|
||||
leaderboardHighPointESSOverall.addRace(new MockedTrackedRaceWithStartTimeAndRanks(now, Arrays.asList(competitors)), "R1", /* medalRace */ false,
|
||||
leaderboardHighPointESSOverall.getFleet(null));
|
||||
assertEquals(16, leaderboardHighPointESSOverall.getCompetitorsFromBestToWorst(later).size());
|
||||
assertEquals(new Double(10), leaderboardHighPointESSOverall.getTotalPoints(competitors[0], later));
|
||||
assertEquals(new Double(9), leaderboardHighPointESSOverall.getTotalPoints(competitors[1], later));
|
||||
assertEquals(new Double(8), leaderboardHighPointESSOverall.getTotalPoints(competitors[2], later));
|
||||
assertEquals(new Double(7), leaderboardHighPointESSOverall.getTotalPoints(competitors[3], later));
|
||||
assertEquals(new Double(6), leaderboardHighPointESSOverall.getTotalPoints(competitors[4], later));
|
||||
assertEquals(new Double(5), leaderboardHighPointESSOverall.getTotalPoints(competitors[5], later));
|
||||
assertEquals(new Double(4), leaderboardHighPointESSOverall.getTotalPoints(competitors[6], later));
|
||||
assertEquals(new Double(3), leaderboardHighPointESSOverall.getTotalPoints(competitors[7], later));
|
||||
assertEquals(new Double(2), leaderboardHighPointESSOverall.getTotalPoints(competitors[8], later));
|
||||
assertEquals(new Double(1), leaderboardHighPointESSOverall.getTotalPoints(competitors[9], later));
|
||||
assertEquals(new Double(1), leaderboardHighPointESSOverall.getTotalPoints(competitors[14], later));
|
||||
assertEquals(new Double(1), leaderboardHighPointESSOverall.getTotalPoints(competitors[15], later));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOverallLeaderboardWithESSHighPointScoring() throws NoWindException {
|
||||
// Let c0 lead the series, c3 trail it, c1 and c2 are one-time competitors which are then suppressed in the
|
||||
|
||||
+2
-1
@@ -13,7 +13,8 @@ import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetche
|
||||
|
||||
/**
|
||||
* The scoring system as used by the Extreme Sailing Series. Disqualified competitors get 0 points; the winner gets as
|
||||
* many points as there are competitors in the race. Higher scores are better.
|
||||
* many points as there are competitors in the race. Higher scores are better. No negative scores are returned. Worst
|
||||
* score a competitor can get is 1.0.
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
*
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ public class HighPointExtremeSailingSeriesOverall extends HighPoint {
|
||||
if (rank == 0) {
|
||||
result = null;
|
||||
} else {
|
||||
result = Math.max(0.0, (double) (MAX_POINTS - rank + 1));
|
||||
result = Math.max(1.0, (double) (MAX_POINTS - rank + 1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetche
|
||||
|
||||
/**
|
||||
* A variant of the {@link HighPoint} scoring system where the winner gets a fixed number of points, and
|
||||
* all subsequent ranks get one point less. No negative scores are returned. 0.0 is the worst score a
|
||||
* all subsequent ranks get one point less. No negative scores are returned. 1.0 is the worst score a
|
||||
* competitor can score.
|
||||
*
|
||||
* @author Axel Uhl (D043530)
|
||||
@@ -30,7 +30,7 @@ public abstract class HighPointFirstGetsFixedScore extends HighPoint {
|
||||
if (rank == 0) {
|
||||
result = null;
|
||||
} else {
|
||||
result = Math.max(0.0, (double) (scoreForRaceWinner - rank + 1));
|
||||
result = Math.max(1.0, (double) (scoreForRaceWinner - rank + 1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user