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:
Axel Uhl committed 2014-02-12 01:47:22 +01:00
commit 29a804c8d3
4 files changed
+47 -5

No files matched your search

@@ -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
@@ -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)
*
@@ -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;
}
@@ -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;
}