Test refactor: extract big duration adjustment to a separate test
This commit is contained in:
committed by
Space Team
parent
f8f3862f0c
commit
e11ebcadb4
@@ -92,6 +92,42 @@ class TimeMarkTest {
|
|||||||
markPast1.assertHasPassed(true)
|
markPast1.assertHasPassed(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testAdjustmentBig(timeSource: TimeSource.WithComparableMarks) {
|
||||||
|
val baseMark = timeSource.markNow()
|
||||||
|
val longDuration = Long.MAX_VALUE.nanoseconds
|
||||||
|
val long2Duration = longDuration + 1001.milliseconds
|
||||||
|
|
||||||
|
val pastMark = baseMark - longDuration
|
||||||
|
val futureMark = pastMark + long2Duration
|
||||||
|
val sameMark = futureMark - (long2Duration - longDuration)
|
||||||
|
|
||||||
|
val elapsedMark = timeSource.markNow()
|
||||||
|
run {
|
||||||
|
val iterations = 1..100
|
||||||
|
for (i in iterations) {
|
||||||
|
val elapsedDiff1 = (sameMark.elapsedNow() - baseMark.elapsedNow()).absoluteValue
|
||||||
|
val elapsedDiff2 = (baseMark.elapsedNow() - sameMark.elapsedNow()).absoluteValue
|
||||||
|
// some iterations of this assertion can fail due to an unpredictable delay between subsequent elapsedNow calls
|
||||||
|
// but if the mark adjustment arithmetic was wrong, all of them will fail
|
||||||
|
if (maxOf(elapsedDiff1, elapsedDiff2) < 1.milliseconds) break
|
||||||
|
if (i == iterations.last) fail("$elapsedDiff1, $elapsedDiff2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// may not pass exactly for double-based value time marks in JS/WASM due to rounding
|
||||||
|
// assertEquals(elapsedMark - baseMark, elapsedMark - sameMark, "$elapsedMark; $baseMark; $sameMark")
|
||||||
|
val elapsedBaseDiff = elapsedMark - baseMark
|
||||||
|
val elapsedSameDiff = elapsedMark - sameMark
|
||||||
|
assertTrue((elapsedBaseDiff - elapsedSameDiff).absoluteValue < 1.milliseconds, "elapsedMark=$elapsedMark; baseMark=$baseMark; sameMark=$sameMark")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun adjustmentBig() {
|
||||||
|
testAdjustmentBig(TestTimeSource())
|
||||||
|
for (unit in units) {
|
||||||
|
testAdjustmentBig(LongTimeSource(unit))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun testAdjustmentInfinite(timeSource: TimeSource.WithComparableMarks) {
|
fun testAdjustmentInfinite(timeSource: TimeSource.WithComparableMarks) {
|
||||||
val baseMark = timeSource.markNow()
|
val baseMark = timeSource.markNow()
|
||||||
val infiniteFutureMark = baseMark + Duration.INFINITE
|
val infiniteFutureMark = baseMark + Duration.INFINITE
|
||||||
@@ -122,32 +158,6 @@ class TimeMarkTest {
|
|||||||
assertEqualMarks(infiniteMark, infiniteMark - offset)
|
assertEqualMarks(infiniteMark, infiniteMark - offset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val longDuration = Long.MAX_VALUE.nanoseconds
|
|
||||||
val long2Duration = longDuration + 1001.milliseconds
|
|
||||||
|
|
||||||
val pastMark = baseMark - longDuration
|
|
||||||
val futureMark = pastMark + long2Duration
|
|
||||||
val sameMark = futureMark - (long2Duration - longDuration)
|
|
||||||
|
|
||||||
val elapsedMark = timeSource.markNow()
|
|
||||||
run {
|
|
||||||
val iterations = 1..100
|
|
||||||
for (i in iterations) {
|
|
||||||
val elapsedDiff1 = (sameMark.elapsedNow() - baseMark.elapsedNow()).absoluteValue
|
|
||||||
val elapsedDiff2 = (baseMark.elapsedNow() - sameMark.elapsedNow()).absoluteValue
|
|
||||||
// some iterations of this assertion can fail due to an unpredictable delay between subsequent elapsedNow calls
|
|
||||||
// but if the mark adjustment arithmetic was wrong, all of them will fail
|
|
||||||
if (maxOf(elapsedDiff1, elapsedDiff2) < 1.milliseconds) break
|
|
||||||
if (i == iterations.last) fail("$elapsedDiff1, $elapsedDiff2")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// TODO: doesn't pass exactly for double-based value time marks in JS/WASM due to rounding
|
|
||||||
// assertEquals(elapsedMark - baseMark, elapsedMark - sameMark, "$elapsedMark; $baseMark; $sameMark")
|
|
||||||
val elapsedBaseDiff = elapsedMark - baseMark
|
|
||||||
val elapsedSameDiff = elapsedMark - sameMark
|
|
||||||
assertTrue((elapsedBaseDiff - elapsedSameDiff).absoluteValue < 1.milliseconds, "elapsedMark=$elapsedMark; baseMark=$baseMark; sameMark=$sameMark")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -356,23 +366,11 @@ class TimeMarkTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun defaultTimeMarkAdjustmentInfinite() {
|
fun defaultTimeMarkAdjustmentBig() {
|
||||||
testAdjustmentInfinite(TimeSource.Monotonic)
|
testAdjustmentBig(TimeSource.Monotonic)
|
||||||
|
|
||||||
// do the same with specialized methods
|
// do the same with specialized methods
|
||||||
val baseMark = TimeSource.Monotonic.markNow()
|
val baseMark = TimeSource.Monotonic.markNow()
|
||||||
val infiniteFutureMark = baseMark + Duration.INFINITE
|
|
||||||
val infinitePastMark = baseMark - Duration.INFINITE
|
|
||||||
|
|
||||||
assertEquals(-Duration.INFINITE, infiniteFutureMark.elapsedNow())
|
|
||||||
assertTrue(infiniteFutureMark.hasNotPassedNow())
|
|
||||||
|
|
||||||
assertEquals(Duration.INFINITE, infinitePastMark.elapsedNow())
|
|
||||||
assertTrue(infinitePastMark.hasPassedNow())
|
|
||||||
|
|
||||||
assertFailsWith<IllegalArgumentException> { infiniteFutureMark - Duration.INFINITE }
|
|
||||||
assertFailsWith<IllegalArgumentException> { infinitePastMark + Duration.INFINITE }
|
|
||||||
|
|
||||||
val longDuration = Long.MAX_VALUE.nanoseconds
|
val longDuration = Long.MAX_VALUE.nanoseconds
|
||||||
val long2Duration = longDuration + 1001.milliseconds
|
val long2Duration = longDuration + 1001.milliseconds
|
||||||
|
|
||||||
@@ -397,6 +395,25 @@ class TimeMarkTest {
|
|||||||
assertTrue((elapsedBaseDiff - elapsedSameDiff).absoluteValue < 1.milliseconds, "elapsedMark=$elapsedMark; baseMark=$baseMark; sameMark=$sameMark")
|
assertTrue((elapsedBaseDiff - elapsedSameDiff).absoluteValue < 1.milliseconds, "elapsedMark=$elapsedMark; baseMark=$baseMark; sameMark=$sameMark")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun defaultTimeMarkAdjustmentInfinite() {
|
||||||
|
testAdjustmentInfinite(TimeSource.Monotonic)
|
||||||
|
|
||||||
|
// do the same with specialized methods
|
||||||
|
val baseMark = TimeSource.Monotonic.markNow()
|
||||||
|
val infiniteFutureMark = baseMark + Duration.INFINITE
|
||||||
|
val infinitePastMark = baseMark - Duration.INFINITE
|
||||||
|
|
||||||
|
assertEquals(-Duration.INFINITE, infiniteFutureMark.elapsedNow())
|
||||||
|
assertTrue(infiniteFutureMark.hasNotPassedNow())
|
||||||
|
|
||||||
|
assertEquals(Duration.INFINITE, infinitePastMark.elapsedNow())
|
||||||
|
assertTrue(infinitePastMark.hasPassedNow())
|
||||||
|
|
||||||
|
assertFailsWith<IllegalArgumentException> { infiniteFutureMark - Duration.INFINITE }
|
||||||
|
assertFailsWith<IllegalArgumentException> { infinitePastMark + Duration.INFINITE }
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun defaultTimeMarkDifferenceAndComparison() {
|
fun defaultTimeMarkDifferenceAndComparison() {
|
||||||
val baseMark = TimeSource.Monotonic.markNow()
|
val baseMark = TimeSource.Monotonic.markNow()
|
||||||
|
|||||||
Reference in New Issue
Block a user