@@ -10,6 +10,7 @@ import kotlin.test.*
10
10
import kotlin.time.*
11
11
import kotlin.time.Duration.Companion.days
12
12
import kotlin.time.Duration.Companion.nanoseconds
13
+ import kotlin.time.Duration.Companion.seconds
13
14
14
15
@OptIn(ExperimentalTime ::class )
15
16
class ClockTimeSourceTest {
@@ -83,4 +84,41 @@ class ClockTimeSourceTest {
83
84
assertFailsWith<IllegalArgumentException > { markFuture - Duration .INFINITE }
84
85
assertFailsWith<IllegalArgumentException > { markPast + Duration .INFINITE }
85
86
}
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
+ }
86
124
}
0 commit comments