diff --git a/libraries/stdlib/test/time/ClockMarkTest.kt b/libraries/stdlib/test/time/ClockMarkTest.kt new file mode 100644 index 00000000000..4c743d6126f --- /dev/null +++ b/libraries/stdlib/test/time/ClockMarkTest.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2019 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. + */ + +package test.time + +import kotlin.test.* +import kotlin.time.* + +class ClockMarkTest { + + @Test + fun adjustment() { + val clock = TestClock(unit = DurationUnit.NANOSECONDS) + + val mark = clock.mark() + val markFuture1 = mark + 1.milliseconds + val markFuture2 = mark - (-1).milliseconds + + val markPast1 = mark - 1.milliseconds + val markPast2 = markFuture1 + (-2).milliseconds + + clock.reading = 500_000L + + val elapsed = mark.elapsed() + val elapsedFromFuture = elapsed - 1.milliseconds + val elapsedFromPast = elapsed + 1.milliseconds + + assertEquals(0.5.milliseconds, elapsed) + assertEquals(elapsedFromFuture, markFuture1.elapsed()) + assertEquals(elapsedFromFuture, markFuture2.elapsed()) + + assertEquals(elapsedFromPast, markPast1.elapsed()) + assertEquals(elapsedFromPast, markPast2.elapsed()) + } +} \ No newline at end of file diff --git a/libraries/stdlib/test/time/MeasureTimeTest.kt b/libraries/stdlib/test/time/MeasureTimeTest.kt index fa68d1e2021..73fe8d58117 100644 --- a/libraries/stdlib/test/time/MeasureTimeTest.kt +++ b/libraries/stdlib/test/time/MeasureTimeTest.kt @@ -44,4 +44,26 @@ class MeasureTimeTest { assertEquals(someResult, result) assertTrue(elapsed > Duration.ZERO) } + + + @Test fun measureTimeTestClock() { + val clock = TestClock(unit = DurationUnit.NANOSECONDS) + val expectedNs = Random.nextLong(1_000_000_000L) + val elapsed = clock.measureTime { + clock.reading += expectedNs + } + + assertEquals(expectedNs.nanoseconds, elapsed) + + val expectedResult: Long + + val (result, elapsed2) = clock.withMeasureTime { + clock.reading += expectedNs + expectedResult = expectedNs + expectedNs + } + + assertEquals(expectedResult, result) + assertEquals(result.nanoseconds, elapsed2) + } } \ No newline at end of file