Skip to content

Commit a8fb64c

Browse files
mbrandonwmluisbrown
authored andcommitted
Fix for flakey concurrent cancel test.
(cherry picked from commit 544228fd1bb379ef36e9c83616bd3a3ae9c9edf0) # Conflicts: # Tests/ComposableArchitectureTests/EffectCancellationTests.swift
1 parent 9a3af3f commit a8fb64c

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

Tests/ComposableArchitectureTests/EffectCancellationTests.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,15 @@ final class EffectCancellationTests: XCTestCase {
191191
DispatchQueue.global(qos: .userInteractive),
192192
DispatchQueue.global(qos: .utility),
193193
]
194+
let ids = (1...10).map { _ in UUID() }
194195

195196
let effect = Effect.merge(
196197
// Original upper bound was 1000, but it was triggering EXC_BAD_ACCESS crashes...
197198
// Enabling ThreadSanitizer reveals data races in RAS internals, more specifically
198199
// `TransformerCore.start` (accessing `hasDeliveredTerminalEvent` var), which can
199200
// be the cause?
200201
(1...300).map { idx -> Effect<Int, Never> in
201-
let id = idx % 10
202+
let id = ids[idx % 10]
202203

203204
return Effect.merge(
204205
Effect(value: idx)
@@ -226,7 +227,12 @@ final class EffectCancellationTests: XCTestCase {
226227
.start()
227228
self.wait(for: [expectation], timeout: 999)
228229

229-
XCTAssertNoDifference([:], cancellationCancellables)
230+
for id in ids {
231+
XCTAssertNil(
232+
cancellationCancellables[CancelToken(id: id)],
233+
"cancellationCancellables should not contain id \(id)"
234+
)
235+
}
230236
}
231237

232238
func testNestedCancels() {
@@ -237,8 +243,8 @@ final class EffectCancellationTests: XCTestCase {
237243
observer.sendCompleted()
238244
}
239245
}
240-
.eraseToEffect()
241-
.cancellable(id: 1)
246+
.eraseToEffect()
247+
.cancellable(id: 1)
242248

243249
for _ in 1...1_000 {
244250
effect = effect.cancellable(id: id)

0 commit comments

Comments
 (0)