Forráskód Böngészése

Reduce complexity of Duration.

Sam Jaffe 5 éve
szülő
commit
a460dc4168

+ 5 - 5
src/main/lombok/org/leumasjaffe/recipe/model/Duration.java

@@ -13,7 +13,7 @@ import lombok.Setter;
 public class Duration {
 	@AllArgsConstructor
 	public enum Display {
-		SECONDS("s", 1), MINUTES("min", 60), HALF_HOURS("hr", 3600), HOURS("hr", 3600);
+		SECONDS("s", 1), MINUTES("min", 60), HOURS("hr", 3600);
 		String abbreviation;
 		int inSeconds;
 	}
@@ -40,12 +40,12 @@ public class Duration {
 	
 	private Duration smartScale() {
 		final int toCheck = minSeconds == 0 ? maxSeconds : minSeconds;
-		if (toCheck > Display.HOURS.inSeconds * 4) {
+		if (toCheck > Display.HOURS.inSeconds * 1.5) {
 			displayAs = Display.HOURS;
-		} else if (toCheck > Display.HOURS.inSeconds * 1) {
-			displayAs = Display.HALF_HOURS;
 		} else if (toCheck > Display.MINUTES.inSeconds * 2) {
 			displayAs = Display.MINUTES;
+		} else {
+			displayAs = Display.SECONDS;
 		}
 		return this;
 	}
@@ -66,7 +66,7 @@ public class Duration {
 	private static String convert(float seconds, Display as) {
 		// X * 3600 + (901, 2399) => X.5
 		int rounded = Math.round(2 * seconds / as.inSeconds);
-		if (as == Display.HALF_HOURS && (rounded % 2) == 1) {
+		if (as == Display.HOURS && (rounded % 2) == 1) {
 			return Float.toString(rounded / 2.f);
 		}
 		return Integer.toString(Math.round(seconds / as.inSeconds));

+ 5 - 12
src/test/java/org/leumasjaffe/recipe/model/DurationTest.java

@@ -36,10 +36,8 @@ class DurationTest {
 	void testPlusCanUseHigherUnitOnLargeRanges() {
 		assertEquals(SECONDS, new Duration(SECONDS, 0, 120).plus(Duration.ZERO).getDisplayAs());
 		assertEquals(MINUTES, new Duration(SECONDS, 0, 121).plus(Duration.ZERO).getDisplayAs());
-		assertEquals(MINUTES, new Duration(SECONDS, 0, 3600).plus(Duration.ZERO).getDisplayAs());
-		assertEquals(HALF_HOURS, new Duration(SECONDS, 0, 3601).plus(Duration.ZERO).getDisplayAs());
-		assertEquals(HALF_HOURS, new Duration(SECONDS, 0, 14400).plus(Duration.ZERO).getDisplayAs());
-		assertEquals(HOURS, new Duration(SECONDS, 0, 14401).plus(Duration.ZERO).getDisplayAs());
+		assertEquals(MINUTES, new Duration(SECONDS, 0, 5400).plus(Duration.ZERO).getDisplayAs());
+		assertEquals(HOURS, new Duration(SECONDS, 0, 5401).plus(Duration.ZERO).getDisplayAs());
 	}
 	
 	@Test
@@ -78,30 +76,25 @@ class DurationTest {
 	@Test
 	void testPerformsRoundingOnHigherDisplay() {
 		assertEquals("0 min", new Duration(MINUTES, 0, 29).toString());
-		assertEquals("0 hr", new Duration(HOURS, 0, 1799).toString());
 		assertEquals("1 min", new Duration(MINUTES, 0, 30).toString());
-		assertEquals("1 hr", new Duration(HOURS, 0, 1800).toString());
 	}
 	
 	@Test
 	void testCanDisplayHalfHours() {
-		assertEquals("1 hr", new Duration(HALF_HOURS, 0, 3600).toString());
 		assertEquals("1 hr", new Duration(HOURS, 0, 3600).toString());
-
-		assertEquals("1.5 hr", new Duration(HALF_HOURS, 0, 5400).toString());
-		assertEquals("2 hr", new Duration(HOURS, 0, 5400).toString());
+		assertEquals("1.5 hr", new Duration(HOURS, 0, 5400).toString());
 	}
 	
 	@ParameterizedTest
 	@ValueSource(ints= {900, 2699})
 	void testHalfHourDisplayIsUsedForRoundNear(int value) {
-		assertEquals("0.5 hr", new Duration(HALF_HOURS, 0, value).toString());
+		assertEquals("0.5 hr", new Duration(HOURS, 0, value).toString());
 	}
 
 	@ParameterizedTest
 	@ValueSource(ints= {899, 2700})
 	void testHalfHourDisplayIsNotUsedForCloserToWhole(int value) {
-		assertNotEquals("0.5 hr", new Duration(HALF_HOURS, 0, value).toString());
+		assertNotEquals("0.5 hr", new Duration(HOURS, 0, value).toString());
 	}
 
 }