Skip to content

Commit 548121f

Browse files
committed
Simplify ActorQueue and MainActor multi-task cancellation tests
We only need to wait for task1 to start. Whether task2 and task3 are pending or already executing when cancelTasks() is called, they will be cancelled either way.
1 parent 36b2b19 commit 548121f

File tree

1 file changed

+24
-46
lines changed

1 file changed

+24
-46
lines changed

Tests/AsyncQueueTests/CancellableQueueTests.swift

Lines changed: 24 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -171,39 +171,28 @@ struct CancellableQueueTests {
171171
let counter = Counter()
172172
actorQueue.adoptExecutionContext(of: counter)
173173
let systemUnderTest = CancellableQueue(underlyingQueue: actorQueue)
174-
let task1Started = Semaphore()
175-
let task2Started = Semaphore()
176-
let task3Started = Semaphore()
177-
let tasksAllowedToEnd = Semaphore()
174+
let taskStarted = Semaphore()
175+
let taskAllowedToEnd = Semaphore()
178176

179-
// Create tasks that signal when they start, then wait.
177+
// Create a task that signals when it starts, then waits.
180178
let task1 = Task(on: systemUnderTest) { _ in
181-
await task1Started.signal()
182-
await tasksAllowedToEnd.wait()
179+
await taskStarted.signal()
180+
await taskAllowedToEnd.wait()
183181
}
184182

185-
let task2 = Task(on: systemUnderTest) { _ in
186-
await task2Started.signal()
187-
await tasksAllowedToEnd.wait()
188-
}
183+
// Create additional tasks.
184+
let task2 = Task(on: systemUnderTest) { _ in }
189185

190-
let task3 = Task(on: systemUnderTest) { _ in
191-
await task3Started.signal()
192-
await tasksAllowedToEnd.wait()
193-
}
186+
let task3 = Task(on: systemUnderTest) { _ in }
194187

195-
// Wait for all tasks to start executing.
196-
await task1Started.wait()
197-
await task2Started.wait()
198-
await task3Started.wait()
188+
// Wait for the first task to start executing.
189+
await taskStarted.wait()
199190

200191
// Cancel all tasks.
201192
systemUnderTest.cancelTasks()
202193

203-
// Allow tasks to end now that we've cancelled them.
204-
await tasksAllowedToEnd.signal()
205-
await tasksAllowedToEnd.signal()
206-
await tasksAllowedToEnd.signal()
194+
// Allow the task to end now that we've cancelled it.
195+
await taskAllowedToEnd.signal()
207196

208197
#expect(task1.isCancelled)
209198
#expect(task2.isCancelled)
@@ -273,39 +262,28 @@ struct CancellableQueueTests {
273262
@Test
274263
func cancelTasks_mainActorQueue_cancelsCurrentlyExecutingAndPendingTasks() async {
275264
let systemUnderTest = CancellableQueue(underlyingQueue: MainActor.queue)
276-
let task1Started = Semaphore()
277-
let task2Started = Semaphore()
278-
let task3Started = Semaphore()
279-
let tasksAllowedToEnd = Semaphore()
265+
let taskStarted = Semaphore()
266+
let taskAllowedToEnd = Semaphore()
280267

281-
// Create tasks that signal when they start, then wait.
268+
// Create a task that signals when it starts, then waits.
282269
let task1 = Task(on: systemUnderTest) {
283-
await task1Started.signal()
284-
await tasksAllowedToEnd.wait()
270+
await taskStarted.signal()
271+
await taskAllowedToEnd.wait()
285272
}
286273

287-
let task2 = Task(on: systemUnderTest) {
288-
await task2Started.signal()
289-
await tasksAllowedToEnd.wait()
290-
}
274+
// Create additional tasks.
275+
let task2 = Task(on: systemUnderTest) {}
291276

292-
let task3 = Task(on: systemUnderTest) {
293-
await task3Started.signal()
294-
await tasksAllowedToEnd.wait()
295-
}
277+
let task3 = Task(on: systemUnderTest) {}
296278

297-
// Wait for all tasks to start executing.
298-
await task1Started.wait()
299-
await task2Started.wait()
300-
await task3Started.wait()
279+
// Wait for the first task to start executing.
280+
await taskStarted.wait()
301281

302282
// Cancel all tasks.
303283
systemUnderTest.cancelTasks()
304284

305-
// Allow tasks to end now that we've cancelled them.
306-
await tasksAllowedToEnd.signal()
307-
await tasksAllowedToEnd.signal()
308-
await tasksAllowedToEnd.signal()
285+
// Allow the task to end now that we've cancelled it.
286+
await taskAllowedToEnd.signal()
309287

310288
#expect(task1.isCancelled)
311289
#expect(task2.isCancelled)

0 commit comments

Comments
 (0)