@Override public HardMediumSoftLongScore extractScore(int initScore) { return HardMediumSoftLongScore.ofUninitialized(initScore, hardScore, mediumScore, softScore); }
@Override public HardMediumSoftLongScore fromLevelNumbers(int initScore, Number[] levelNumbers) { if (levelNumbers.length != getLevelsSize()) { throw new IllegalStateException("The levelNumbers (" + Arrays.toString(levelNumbers) + ")'s length (" + levelNumbers.length + ") must equal the levelSize (" + getLevelsSize() + ")."); } return HardMediumSoftLongScore.ofUninitialized(initScore, (Long) levelNumbers[0], (Long) levelNumbers[1], (Long) levelNumbers[2]); }
@Override public HardMediumSoftLongScore buildOptimisticBound(InitializingScoreTrend initializingScoreTrend, HardMediumSoftLongScore score) { InitializingScoreTrendLevel[] trendLevels = initializingScoreTrend.getTrendLevels(); return HardMediumSoftLongScore.ofUninitialized(0, trendLevels[0] == InitializingScoreTrendLevel.ONLY_DOWN ? score.getHardScore() : Long.MAX_VALUE, trendLevels[1] == InitializingScoreTrendLevel.ONLY_DOWN ? score.getMediumScore() : Long.MAX_VALUE, trendLevels[2] == InitializingScoreTrendLevel.ONLY_DOWN ? score.getSoftScore() : Long.MAX_VALUE); }
@Override public HardMediumSoftLongScore buildPessimisticBound(InitializingScoreTrend initializingScoreTrend, HardMediumSoftLongScore score) { InitializingScoreTrendLevel[] trendLevels = initializingScoreTrend.getTrendLevels(); return HardMediumSoftLongScore.ofUninitialized(0, trendLevels[0] == InitializingScoreTrendLevel.ONLY_UP ? score.getHardScore() : Long.MIN_VALUE, trendLevels[1] == InitializingScoreTrendLevel.ONLY_UP ? score.getMediumScore() : Long.MIN_VALUE, trendLevels[2] == InitializingScoreTrendLevel.ONLY_UP ? score.getSoftScore() : Long.MIN_VALUE); }
public static HardMediumSoftLongScore parseScore(String scoreString) { String[] scoreTokens = parseScoreTokens(HardMediumSoftLongScore.class, scoreString, HARD_LABEL, MEDIUM_LABEL, SOFT_LABEL); int initScore = parseInitScore(HardMediumSoftLongScore.class, scoreString, scoreTokens[0]); long hardScore = parseLevelAsLong(HardMediumSoftLongScore.class, scoreString, scoreTokens[1]); long mediumScore = parseLevelAsLong(HardMediumSoftLongScore.class, scoreString, scoreTokens[2]); long softScore = parseLevelAsLong(HardMediumSoftLongScore.class, scoreString, scoreTokens[3]); return ofUninitialized(initScore, hardScore, mediumScore, softScore); }
@Test public void feasible() { assertScoreNotFeasible( HardMediumSoftLongScore.of(-5L, -300L, -4000L), HardMediumSoftLongScore.ofUninitialized(-7, -5L, -300L, -4000L), HardMediumSoftLongScore.ofUninitialized(-7, 0L, -300L, -4000L) ); assertScoreFeasible( HardMediumSoftLongScore.of(0L, -300L, -4000L), HardMediumSoftLongScore.of(2L, -300L, -4000L), HardMediumSoftLongScore.ofUninitialized(0, 0L, -300L, -4000L) ); }
@Test public void subtract() { assertEquals(HardMediumSoftLongScore.of(21L, 280L, -8000L), HardMediumSoftLongScore.of(20L, -20L, -4000L).subtract( HardMediumSoftLongScore.of(-1L, -300L, 4000L))); assertEquals(HardMediumSoftLongScore.ofUninitialized(-63, 21L, 280L, -8000L), HardMediumSoftLongScore.ofUninitialized(-70, 20L, -20L, -4000L).subtract( HardMediumSoftLongScore.ofUninitialized(-7, -1L, -300L, 4000L))); }
@Test public void add() { assertEquals(HardMediumSoftLongScore.of(19L, -320L, 0L), HardMediumSoftLongScore.of(20L, -20L, -4000L).add( HardMediumSoftLongScore.of(-1L, -300L, 4000L))); assertEquals(HardMediumSoftLongScore.ofUninitialized(-77, 19L, -320L, 0L), HardMediumSoftLongScore.ofUninitialized(-70, 20L, -20L, -4000L).add( HardMediumSoftLongScore.ofUninitialized(-7, -1L, -300L, 4000L))); }
@Test public void persistAndMerge() { persistAndMerge(new TestJpaEntity(null), HardMediumSoftLongScore.of(-100L, -20L, -3L), HardMediumSoftLongScore.ofUninitialized(-7, -100L, -20L, -3L)); }
@Test public void withInitScore() { assertEquals(HardMediumSoftLongScore.ofUninitialized(-7, -147L, -258L, -369L), HardMediumSoftLongScore.of(-147L, -258L, -369L).withInitScore(-7)); }
@Test public void power() { assertEquals(HardMediumSoftLongScore.of(9L, 16L, 25L), HardMediumSoftLongScore.of(3L, -4L, 5L).power(2.0)); assertEquals(HardMediumSoftLongScore.of(3L, 4L, 5L), HardMediumSoftLongScore.of(9L, 16L, 25L).power(0.5)); assertEquals(HardMediumSoftLongScore.ofUninitialized(-343, 27L, -64L, 125L), HardMediumSoftLongScore.ofUninitialized(-7, 3L, -4L, 5L).power(3.0)); }
@Test public void divide() { assertEquals(HardMediumSoftLongScore.of(5L, -5L, 5L), HardMediumSoftLongScore.of(25L, -25L, 25L).divide(5.0)); assertEquals(HardMediumSoftLongScore.of(4L, -5L, 4L), HardMediumSoftLongScore.of(21L, -21L, 21L).divide(5.0)); assertEquals(HardMediumSoftLongScore.of(4L, -5L, 4L), HardMediumSoftLongScore.of(24L, -24L, 24L).divide(5.0)); assertEquals(HardMediumSoftLongScore.ofUninitialized(-7, 4L, -5L, 6L), HardMediumSoftLongScore.ofUninitialized(-14, 8L, -10L, 12L).divide(2.0)); }
@Test public void multiply() { assertEquals(HardMediumSoftLongScore.of(6L, -6L, 6L), HardMediumSoftLongScore.of(5L, -5L, 5L).multiply(1.2)); assertEquals(HardMediumSoftLongScore.of(1L, -2L, 1L), HardMediumSoftLongScore.of(1L, -1L, 1L).multiply(1.2)); assertEquals(HardMediumSoftLongScore.of(4L, -5L, 4L), HardMediumSoftLongScore.of(4L, -4L, 4L).multiply(1.2)); assertEquals(HardMediumSoftLongScore.ofUninitialized(-14, 8L, -10L, 12L), HardMediumSoftLongScore.ofUninitialized(-7, 4L, -5L, 6L).multiply(2.0)); }
@Test public void serializeAndDeserialize() { assertSerializeAndDeserialize(null, new TestHardMediumSoftLongScoreWrapper(null)); HardMediumSoftLongScore score = HardMediumSoftLongScore.of(1200L, 30L, 4L); assertSerializeAndDeserialize(score, new TestHardMediumSoftLongScoreWrapper(score)); score = HardMediumSoftLongScore.ofUninitialized(-7, 1200L, 30L, 4L); assertSerializeAndDeserialize(score, new TestHardMediumSoftLongScoreWrapper(score)); }
@Test public void serializeAndDeserialize() { assertSerializeAndDeserialize(null, new TestHardMediumSoftLongScoreWrapper(null)); HardMediumSoftLongScore score = HardMediumSoftLongScore.of(1200L, 30L, 4L); assertSerializeAndDeserialize(score, new TestHardMediumSoftLongScoreWrapper(score)); score = HardMediumSoftLongScore.ofUninitialized(-7, 1200L, 30L, 4L); assertSerializeAndDeserialize(score, new TestHardMediumSoftLongScoreWrapper(score)); }
@Test public void serializeAndDeserialize() { assertSerializeAndDeserialize(null, new TestHardMediumSoftLongScoreWrapper(null)); HardMediumSoftLongScore score = HardMediumSoftLongScore.of(1200L, 30L, 4L); assertSerializeAndDeserialize(score, new TestHardMediumSoftLongScoreWrapper(score)); score = HardMediumSoftLongScore.ofUninitialized(-7, 1200L, 30L, 4L); assertSerializeAndDeserialize(score, new TestHardMediumSoftLongScoreWrapper(score)); }
@Test public void toInitializedScore() { assertEquals(HardMediumSoftLongScore.of(-147L, -258L, -369L), HardMediumSoftLongScore.of(-147L, -258L, -369L).toInitializedScore()); assertEquals(HardMediumSoftLongScore.of(-147L, -258L, -369L), HardMediumSoftLongScore.ofUninitialized(-7, -147L, -258L, -369L).toInitializedScore()); }
@Test public void testToString() { assertEquals("0hard/-258medium/-369soft", HardMediumSoftLongScore.of(0L, -258L, -369L).toString()); assertEquals("-147hard/-258medium/-369soft", HardMediumSoftLongScore.of(-147L, -258L, -369L).toString()); assertEquals("-7init/-147hard/-258medium/-369soft", HardMediumSoftLongScore.ofUninitialized(-7, -147L, -258L, -369L).toString()); }
@Test public void toShortString() { assertEquals("0", HardMediumSoftLongScore.of(0L, 0L, 0L).toShortString()); assertEquals("-369soft", HardMediumSoftLongScore.of(0L, 0L, -369L).toShortString()); assertEquals("-258medium", HardMediumSoftLongScore.of(0L, -258L, 0L).toShortString()); assertEquals("-258medium/-369soft", HardMediumSoftLongScore.of(0L, -258L, -369L).toShortString()); assertEquals("-147hard/-258medium/-369soft", HardMediumSoftLongScore.of(-147L, -258L, -369L).toShortString()); assertEquals("-7init/-258medium", HardMediumSoftLongScore.ofUninitialized(-7, 0L, -258L, 0L).toShortString()); assertEquals("-7init/-147hard/-258medium/-369soft", HardMediumSoftLongScore.ofUninitialized(-7, -147L, -258L, -369L).toShortString()); }
@Test public void parseScore() { assertEquals(HardMediumSoftLongScore.of(-147L, -258L, -369L), HardMediumSoftLongScore.parseScore("-147hard/-258medium/-369soft")); assertEquals(HardMediumSoftLongScore.ofUninitialized(-7, -147L, -258L, -369L), HardMediumSoftLongScore.parseScore("-7init/-147hard/-258medium/-369soft")); assertEquals(HardMediumSoftLongScore.of(-147L, -258L, Long.MIN_VALUE), HardMediumSoftLongScore.parseScore("-147hard/-258medium/*soft")); assertEquals(HardMediumSoftLongScore.of(-147L, Long.MIN_VALUE, -369L), HardMediumSoftLongScore.parseScore("-147hard/*medium/-369soft")); }