blob: f1f3bf3478d21a0a93fc4309816504577e22c97f [file]
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:OptIn(ExperimentalTime::class)
package test.time
import kotlin.test.*
import kotlin.time.*
class TimeMarkTest {
@Test
fun adjustment() {
val timeSource = TestTimeSource()
fun TimeMark.assertHasPassed(hasPassed: Boolean) {
assertEquals(!hasPassed, this.hasNotPassedNow(), "Expected mark in the future")
assertEquals(hasPassed, this.hasPassedNow(), "Expected mark in the past")
assertEquals(
!hasPassed,
this.elapsedNow() < Duration.ZERO,
"Mark elapsed: ${this.elapsedNow()}, expected hasPassed: $hasPassed"
)
}
val mark = timeSource.markNow()
val markFuture1 = (mark + Duration.milliseconds(1)).apply { assertHasPassed(false) }
val markFuture2 = (mark - Duration.milliseconds((-1))).apply { assertHasPassed(false) }
val markPast1 = (mark - Duration.milliseconds(1)).apply { assertHasPassed(true) }
val markPast2 = (markFuture1 + Duration.milliseconds((-2))).apply { assertHasPassed(true) }
timeSource += Duration.nanoseconds(500_000)
val elapsed = mark.elapsedNow()
val elapsedFromFuture = elapsed - Duration.milliseconds(1)
val elapsedFromPast = elapsed + Duration.milliseconds(1)
assertEquals(Duration.milliseconds(0.5), elapsed)
assertEquals(elapsedFromFuture, markFuture1.elapsedNow())
assertEquals(elapsedFromFuture, markFuture2.elapsedNow())
assertEquals(elapsedFromPast, markPast1.elapsedNow())
assertEquals(elapsedFromPast, markPast2.elapsedNow())
markFuture1.assertHasPassed(false)
markPast1.assertHasPassed(true)
timeSource += Duration.milliseconds(1)
markFuture1.assertHasPassed(true)
markPast1.assertHasPassed(true)
}
}