@@ -6,176 +6,61 @@ import kotlin.test.assertTrue
6
6
import kotlin.time.measureTime
7
7
import kotlin.IllegalStateException
8
8
import kotlin.time.Duration.Companion.milliseconds
9
- import kotlin.time.Duration.Companion.nanoseconds
9
+ import kotlin.time.TimeSource
10
10
11
11
class TimedParkingTest {
12
12
13
13
@Test
14
- fun testNanosFirstUnpark400 () = retry(3 ) {
15
- var handle1: ParkingHandle ? = null
16
-
17
- val thread1 = Fut {
18
- handle1 = ParkingSupport .currentThreadHandle()
19
- val t = measureTime {
20
- ParkingSupport .park(600 .milliseconds)
21
- }
22
- assertTrue(t.inWholeMilliseconds > 300 )
23
- assertTrue(t.inWholeMilliseconds < 500 )
24
- }
25
-
26
- sleepMillis(400 )
27
- ParkingSupport .unpark(handle1!! )
28
-
29
- thread1.waitThrowing()
30
- }
31
-
14
+ fun testFirstUnpark400 () = testFirstUnpark(400 )
32
15
@Test
33
- fun testNanosFirstUnpark700 () = retry(3 ) {
34
- var handle1: ParkingHandle ? = null
35
-
36
- val thread1 = Fut {
37
- handle1 = ParkingSupport .currentThreadHandle()
38
- val t = measureTime {
39
- ParkingSupport .park(900 .milliseconds)
40
- }
41
- assertTrue(t.inWholeMilliseconds > 600 )
42
- assertTrue(t.inWholeMilliseconds < 800 )
43
- }
44
-
45
- sleepMillis(700 )
46
- ParkingSupport .unpark(handle1!! )
47
-
48
- thread1.waitThrowing()
49
- }
50
-
16
+ fun testFirstUnpark700 () = testFirstUnpark(700 )
51
17
@Test
52
- fun testNanosFirstUnpark1000 () = retry(3 ) {
53
- var handle1: ParkingHandle ? = null
54
-
55
- val thread1 = Fut {
56
- handle1 = ParkingSupport .currentThreadHandle()
57
- val t = measureTime {
58
- ParkingSupport .park(1200 .milliseconds)
59
- }
60
- assertTrue(t.inWholeMilliseconds > 900 )
61
- assertTrue(t.inWholeMilliseconds < 1100 )
62
- }
63
-
64
- sleepMillis(1000 )
65
- ParkingSupport .unpark(handle1!! )
66
-
67
- thread1.waitThrowing()
68
- }
69
-
18
+ fun testFirstUnpark1000 () = testFirstUnpark(1000 )
70
19
@Test
71
- fun testNanosFirstUnparkLongMax () = retry(3 ) {
72
- var handle1: ParkingHandle ? = null
73
-
74
- val thread1 = Fut {
75
- handle1 = ParkingSupport .currentThreadHandle()
76
- val t = measureTime {
77
- ParkingSupport .park(Long .MAX_VALUE .nanoseconds)
78
- }
79
- assertTrue(t.inWholeMilliseconds > 900 )
80
- assertTrue(t.inWholeMilliseconds < 1100 )
81
- }
82
-
83
- sleepMillis(1000 )
84
- ParkingSupport .unpark(handle1!! )
85
-
86
- thread1.waitThrowing()
87
- }
88
-
20
+ fun testFirstUnparkLongMax () = testFirstUnpark(1000 , Long .MAX_VALUE )
89
21
@Test
90
- fun testNanosFirstUnparkIntMax () = retry(3 ) {
91
- var handle1: ParkingHandle ? = null
92
-
93
- val thread1 = Fut {
94
- handle1 = ParkingSupport .currentThreadHandle()
95
- val t = measureTime {
96
- ParkingSupport .park(Int .MAX_VALUE .toLong().nanoseconds)
97
- }
98
- assertTrue(t.inWholeMilliseconds > 900 )
99
- assertTrue(t.inWholeMilliseconds < 1100 )
100
- }
22
+ fun testFirstUnpark3rdLong () = testFirstUnpark(1000 , Long .MAX_VALUE / 3 )
101
23
102
- sleepMillis(1000 )
103
- ParkingSupport .unpark(handle1!! )
104
-
105
- thread1.waitThrowing()
106
- }
107
-
108
24
@Test
109
- fun testNanosFirstUnpark3rdLong () = retry(3 ) {
110
- var handle1: ParkingHandle ? = null
111
-
112
- val thread1 = Fut {
113
- handle1 = ParkingSupport .currentThreadHandle()
114
- val t = measureTime {
115
- ParkingSupport .park((Long .MAX_VALUE / 3 ).nanoseconds)
116
- }
117
- assertTrue(t.inWholeMilliseconds > 900 )
118
- assertTrue(t.inWholeMilliseconds < 1100 )
119
- }
120
-
121
- sleepMillis(1000 )
122
- ParkingSupport .unpark(handle1!! )
123
-
124
- thread1.waitThrowing()
125
- }
126
-
25
+ fun testFirstTimeout400 () = testFirstTimeout(400 )
127
26
@Test
128
- fun testNanosFirstDeadline400 () = retry(3 ) {
129
- var handle1: ParkingHandle ? = null
27
+ fun testFirstTimeout700 () = testFirstTimeout(700 )
28
+ @Test
29
+ fun testFirstTimeout1200 () = testFirstTimeout(1200 )
130
30
31
+ @Test
32
+ fun testFirstDeadline400 () = testFirstDeadline(400 )
33
+ @Test
34
+ fun testFirstDeadline700 () = testFirstDeadline(700 )
35
+ @Test
36
+ fun testFirstDeadline1200 () = testFirstDeadline(1200 )
37
+
38
+ private fun testFirstTimeout (timeOutMillis : Long ) = retry(3 ) {
131
39
val thread1 = Fut {
132
- handle1 = ParkingSupport .currentThreadHandle()
133
- val t = measureTime {
134
- ParkingSupport .park(400 .milliseconds)
135
- }
136
- assertTrue(t.inWholeMilliseconds > 300 )
137
- assertTrue(t.inWholeMilliseconds < 500 )
40
+ val t = measureTime { ParkingSupport .park(timeOutMillis.milliseconds) }
41
+ assertTrue(t.inWholeMilliseconds > timeOutMillis - 50 )
138
42
}
139
-
140
- sleepMillis(600 )
141
- ParkingSupport .unpark(handle1!! )
142
-
143
43
thread1.waitThrowing()
144
44
}
145
-
146
- @Test
147
- fun testNanosFirstDeadline700 () = retry(3 ) {
148
- var handle1: ParkingHandle ? = null
149
-
45
+
46
+ private fun testFirstDeadline (timeOutMillis : Long ) = retry(3 ) {
150
47
val thread1 = Fut {
151
- handle1 = ParkingSupport .currentThreadHandle()
152
- val t = measureTime {
153
- ParkingSupport .park(700 .milliseconds)
154
- }
155
- assertTrue(t.inWholeMilliseconds > 600 )
156
- assertTrue(t.inWholeMilliseconds < 800 )
48
+ val mark = TimeSource .Monotonic .markNow() + timeOutMillis.milliseconds
49
+ val t = measureTime { ParkingSupport .parkUntil(mark) }
50
+ assertTrue(t.inWholeMilliseconds > timeOutMillis - 50 )
157
51
}
158
-
159
- sleepMillis(900 )
160
- ParkingSupport .unpark(handle1!! )
161
-
162
52
thread1.waitThrowing()
163
53
}
164
54
165
- @Test
166
- fun testNanosFirstDeadline1200 () = retry(3 ) {
55
+ private fun testFirstUnpark (unparkAfterMillis : Long , parkForMillis : Long = unparkAfterMillis + 500) = retry(3 ) {
167
56
var handle1: ParkingHandle ? = null
168
-
169
57
val thread1 = Fut {
170
58
handle1 = ParkingSupport .currentThreadHandle()
171
- val t = measureTime {
172
- ParkingSupport .park(1000 .milliseconds)
173
- }
174
- assertTrue(t.inWholeMilliseconds > 900 )
175
- assertTrue(t.inWholeMilliseconds < 1100 )
59
+ val t = measureTime { ParkingSupport .park((parkForMillis).milliseconds) }
60
+ assertTrue(t.inWholeMilliseconds < parkForMillis )
176
61
}
177
62
178
- sleepMillis(1200 )
63
+ sleepMillis(unparkAfterMillis )
179
64
ParkingSupport .unpark(handle1!! )
180
65
181
66
thread1.waitThrowing()
0 commit comments