@@ -10,6 +10,7 @@ import kotlin.test.*
1010import kotlin.time.*
1111import kotlin.time.Duration.Companion.days
1212import kotlin.time.Duration.Companion.nanoseconds
13+ import kotlin.time.Duration.Companion.seconds
1314
1415@OptIn(ExperimentalTime ::class )
1516class ClockTimeSourceTest {
@@ -83,4 +84,41 @@ class ClockTimeSourceTest {
8384 assertFailsWith<IllegalArgumentException > { markFuture - Duration .INFINITE }
8485 assertFailsWith<IllegalArgumentException > { markPast + Duration .INFINITE }
8586 }
87+
88+ @Test
89+ fun timeSourceAsClock () {
90+ val timeSource = TestTimeSource ()
91+ val clock = timeSource.asClock(origin = Instant .fromEpochSeconds(0 ))
92+
93+ assertEquals(Instant .fromEpochSeconds(0 ), clock.now())
94+ assertEquals(Instant .fromEpochSeconds(0 ), clock.now())
95+
96+ timeSource + = 1 .seconds
97+ assertEquals(Instant .fromEpochSeconds(1 ), clock.now())
98+ assertEquals(Instant .fromEpochSeconds(1 ), clock.now())
99+ }
100+
101+ @Test
102+ fun syncMultipleClocksFromTimeSource () {
103+ val timeSource = TestTimeSource ()
104+ val clock1 = timeSource.asClock(origin = Instant .fromEpochSeconds(0 ))
105+
106+ assertEquals(0 , clock1.now().epochSeconds)
107+
108+ timeSource + = 1 .seconds
109+ assertEquals(1 , clock1.now().epochSeconds)
110+
111+ val clock2 = timeSource.asClock(origin = Instant .fromEpochSeconds(1 ))
112+ assertEquals(clock1.now(), clock2.now())
113+
114+ timeSource + = 1 .seconds
115+ assertEquals(2 , clock1.now().epochSeconds)
116+ assertEquals(clock1.now(), clock2.now())
117+
118+ val clock3 = timeSource.asClock(origin = clock2.now())
119+ timeSource + = 1 .seconds
120+ assertEquals(3 , clock3.now().epochSeconds)
121+ assertEquals(clock1.now(), clock2.now())
122+ assertEquals(clock1.now(), clock3.now())
123+ }
86124}
0 commit comments