@@ -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