Skip to content

Commit 209d6c4

Browse files
committed
Refactored the test cases of concurrent interruption.
1 parent cdb60ea commit 209d6c4

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

Tests/ReactiveSwiftTests/SignalSpec.swift

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,13 +228,15 @@ class SignalSpec: QuickSpec {
228228
let (signal, observer) = Signal<Int, NoError>.pipe()
229229

230230
var hasSlept = false
231-
var events = [Event<Int, NoError>]()
231+
var events: [Event<Int, NoError>] = []
232232

233-
let sema = DispatchSemaphore(value: 0)
233+
// Used to synchronize the `interrupt` sender to only act after the
234+
// chosen observer has started sending its event, but before it is done.
235+
let semaphore = DispatchSemaphore(value: 0)
234236

235237
signal.observe { event in
236238
if !hasSlept {
237-
sema.signal()
239+
semaphore.signal()
238240
// 100000 us = 0.1 s
239241
usleep(100000)
240242
hasSlept = true
@@ -250,15 +252,18 @@ class SignalSpec: QuickSpec {
250252
}
251253

252254
if index == 0 {
253-
sema.wait()
255+
semaphore.wait()
254256
observer.sendInterrupted()
255257
}
256258
}
257259

258260
group.wait()
259261

260262
expect(events.count) == 2
261-
expect(events.count >= 2 ? events[1].isTerminating : false) == true
263+
264+
if events.count >= 2 {
265+
expect(events[1].isTerminating) == true
266+
}
262267
}
263268

264269
it("should interrupt concurrently") {
@@ -282,16 +287,18 @@ class SignalSpec: QuickSpec {
282287
var isInterrupted = false
283288
signal.observeInterrupted { counter.modify { $0 += 1 } }
284289

285-
let sema = DispatchSemaphore(value: 0)
290+
// Used to synchronize the `value` sender and the `interrupt`
291+
// sender, giving a slight priority to the former.
292+
let semaphore = DispatchSemaphore(value: 0)
286293

287294
queue.async(group: group) {
288-
sema.signal()
295+
semaphore.signal()
289296
observer.send(value: ())
290297
executionCounter.modify { $0 += 1 }
291298
}
292299

293300
queue.async(group: group) {
294-
sema.wait()
301+
semaphore.wait()
295302
observer.sendInterrupted()
296303
executionCounter.modify { $0 += 1 }
297304
}

0 commit comments

Comments
 (0)