Make TimeMark adjustment test more stable

This commit is contained in:
Ilya Gorbunov
2023-05-23 05:37:59 +02:00
committed by Space Team
parent fd76a34277
commit f8f3862f0c
+22 -7
View File
@@ -132,9 +132,17 @@ class TimeMarkTest {
val sameMark = futureMark - (long2Duration - longDuration)
val elapsedMark = timeSource.markNow()
val elapsedDiff = (sameMark.elapsedNow() - baseMark.elapsedNow()).absoluteValue
val elapsedDiff2 = (baseMark.elapsedNow() - sameMark.elapsedNow()).absoluteValue
assertTrue(maxOf(elapsedDiff, elapsedDiff2) < 1.milliseconds, "$elapsedDiff, $elapsedDiff2")
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
@@ -372,10 +380,17 @@ class TimeMarkTest {
val futureMark = pastMark + long2Duration
val sameMark = futureMark - (long2Duration - longDuration)
val elapsedDiff = (sameMark.elapsedNow() - baseMark.elapsedNow()).absoluteValue
val elapsedDiff2 = (baseMark.elapsedNow() - sameMark.elapsedNow()).absoluteValue
assertTrue(maxOf(elapsedDiff, elapsedDiff2) < 1.milliseconds, "$elapsedDiff, $elapsedDiff2")
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")
}
}
val elapsedMark = TimeSource.Monotonic.markNow()
val elapsedBaseDiff = elapsedMark - baseMark
val elapsedSameDiff = elapsedMark - sameMark