Duration: reject NaN duration values (KT-44168)

This commit is contained in:
Ilya Gorbunov
2020-12-24 02:04:09 +03:00
parent 1d40ed39d0
commit ae6f10df3b
2 changed files with 96 additions and 25 deletions
+18 -4
View File
@@ -34,9 +34,7 @@ class DurationTest {
assertEquals(expected, value.toDouble().toDuration(unit).value)
}
todo {
assertFails { Double.NaN.toDuration(DurationUnit.SECONDS) }
}
assertFailsWith<IllegalArgumentException> { Double.NaN.toDuration(DurationUnit.SECONDS) }
}
@Test
@@ -226,13 +224,16 @@ class DurationTest {
assertEquals(1.5.hours, 1.hours + 30.minutes)
assertEquals(0.5.days, 6.hours + 360.minutes)
assertEquals(0.5.seconds, 200.milliseconds + 300_000.microseconds)
assertFailsWith<IllegalArgumentException> { Duration.INFINITE + (-Duration.INFINITE) }
}
@Test
fun subtraction() {
assertEquals(10.hours, 0.5.days - 120.minutes)
assertEquals(850.milliseconds, 1.seconds - 150.milliseconds)
// TODO decide on INFINITE - INFINITE
assertFailsWith<IllegalArgumentException> { Duration.INFINITE - Duration.INFINITE }
}
@Test
@@ -244,6 +245,12 @@ class DurationTest {
assertEquals(1.days, 2 * 12.hours)
assertEquals(12.5.hours, 12.5 * 60.minutes)
assertEquals(1.microseconds, 50 * 20.nanoseconds)
assertEquals(Duration.ZERO, 0 * 1.hours)
assertEquals(Duration.ZERO, 1.seconds * 0.0)
assertFailsWith<IllegalArgumentException> { Duration.INFINITE * 0 }
assertFailsWith<IllegalArgumentException> { 0 * Duration.INFINITE }
}
@Test
@@ -251,6 +258,11 @@ class DurationTest {
assertEquals(12.hours, 1.days / 2)
assertEquals(60.minutes, 1.days / 24.0)
assertEquals(20.seconds, 2.minutes / 6)
assertEquals(Duration.INFINITE, 1.seconds / 0.0)
assertEquals(-Duration.INFINITE, -1.seconds / 0.0)
assertFailsWith<IllegalArgumentException> { Duration.INFINITE / Double.POSITIVE_INFINITY }
assertFailsWith<IllegalArgumentException> { Duration.ZERO / 0 }
}
@Test
@@ -258,6 +270,8 @@ class DurationTest {
assertEquals(24.0, 1.days / 1.hours)
assertEquals(0.1, 9.minutes / 1.5.hours)
assertEquals(50.0, 1.microseconds / 20.nanoseconds)
assertTrue((Duration.INFINITE / Duration.INFINITE).isNaN())
}
@Test