| /* |
| * Copyright 2010-2020 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 + 1.milliseconds).apply { assertHasPassed(false) } |
| val markFuture2 = (mark - (-1).milliseconds).apply { assertHasPassed(false) } |
| |
| val markPast1 = (mark - 1.milliseconds).apply { assertHasPassed(true) } |
| val markPast2 = (markFuture1 + (-2).milliseconds).apply { assertHasPassed(true) } |
| |
| timeSource += 500_000.nanoseconds |
| |
| val elapsed = mark.elapsedNow() |
| val elapsedFromFuture = elapsed - 1.milliseconds |
| val elapsedFromPast = elapsed + 1.milliseconds |
| |
| assertEquals(0.5.milliseconds, elapsed) |
| assertEquals(elapsedFromFuture, markFuture1.elapsedNow()) |
| assertEquals(elapsedFromFuture, markFuture2.elapsedNow()) |
| |
| assertEquals(elapsedFromPast, markPast1.elapsedNow()) |
| assertEquals(elapsedFromPast, markPast2.elapsedNow()) |
| |
| markFuture1.assertHasPassed(false) |
| markPast1.assertHasPassed(true) |
| |
| timeSource += 1.milliseconds |
| |
| markFuture1.assertHasPassed(true) |
| markPast1.assertHasPassed(true) |
| |
| } |
| } |