Skip to content

Commit a3f4b66

Browse files
committed
Introduce test_share_with_no_buffering
1 parent 6c050d5 commit a3f4b66

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

Tests/AsyncAlgorithmsTests/TestShare.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,42 @@ final class TestShare: XCTestCase {
129129
XCTAssertEqual(results1.withLock { $0 }.sorted(), [1, 2, 3, 4, 5])
130130
XCTAssertEqual(results2.withLock { $0 }.sorted(), [1, 2, 3, 4, 5])
131131
}
132+
133+
func test_share_with_no_buffering() async {
134+
let shared = [1, 2, 3, 4, 5].async.share(bufferingPolicy: .bounded(0))
135+
136+
let results1 = Mutex([Int]())
137+
let results2 = Mutex([Int]())
138+
139+
let consumer1 = Task {
140+
// Consumer 1 reads first element
141+
for await value in shared {
142+
results1.withLock { $0.append(value) }
143+
// Delay to allow consumer 2 to get ahead
144+
try? await Task.sleep(for: .milliseconds(10))
145+
}
146+
}
147+
148+
let consumer2 = Task {
149+
// Consumer 2 reads all elements quickly
150+
for await value in shared {
151+
results2.withLock { $0.append(value) }
152+
}
153+
}
154+
155+
await consumer1.value
156+
await consumer2.value
157+
158+
// Both consumers should receive all elements
159+
XCTAssertEqual(results1.withLock { $0 }.sorted(), [1, 2, 3, 4, 5])
160+
XCTAssertEqual(results2.withLock { $0 }.sorted(), [1, 2, 3, 4, 5])
161+
}
162+
163+
func test_share_with_no_buffering_multiple() async {
164+
for _ in 0..<10 {
165+
await test_share_with_no_buffering()
166+
}
167+
}
132168

133169
func test_share_with_unbounded_buffering() async {
134170
let source = [1, 2, 3, 4, 5]

0 commit comments

Comments
 (0)