| /* |
| * 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) |
| |
| } |
| } |