@@ -2372,4 +2372,78 @@ let ``AsyncSeq.chooseAsync with async transformation should work`` () =
23722372 Assert.AreEqual([ 6 ; 12 ], result)
23732373 } |> Async.RunSynchronously
23742374
2375+ // Advanced Coverage Improvement Tests - targeting specific uncovered functionality
2376+
2377+ [<Test>]
2378+ let ``AsyncSeqOp.FoldAsync with unfoldAsync should work`` () =
2379+ async {
2380+ // Create an AsyncSeq using unfoldAsync to trigger UnfoldAsyncEnumerator.FoldAsync path
2381+ let generator state = async {
2382+ if state < 5 then
2383+ return Some ( state * 2 , state + 1 )
2384+ else
2385+ return None
2386+ }
2387+ let source = AsyncSeq.unfoldAsync generator 0
2388+
2389+ // This should hit the uncovered FoldAsync method in UnfoldAsyncEnumerator
2390+ let folder acc x = async { return acc + x }
2391+ let! result = AsyncSeq.foldAsync folder 0 source
2392+
2393+ // Expected: sum of [0, 2, 4, 6, 8] = 20
2394+ Assert.AreEqual( 20 , result)
2395+ } |> Async.RunSynchronously
2396+
2397+ [<Test>]
2398+ let ``AsyncSeqOp.FoldAsync with empty sequence should return init`` () =
2399+ async {
2400+ let generator _ = async { return None }
2401+ let source = AsyncSeq.unfoldAsync generator 0
2402+ let folder acc x = async { return acc + x }
2403+ let! result = AsyncSeq.foldAsync folder 42 source
2404+ Assert.AreEqual( 42 , result)
2405+ } |> Async.RunSynchronously
2406+
2407+ [<Test>]
2408+ let ``AsyncSeqOp.FoldAsync with exception in generator should propagate`` () =
2409+ async {
2410+ let generator state = async {
2411+ if state = 0 then
2412+ return Some ( 1 , 1 )
2413+ else
2414+ return failwith " generator error"
2415+ }
2416+ let source = AsyncSeq.unfoldAsync generator 0
2417+
2418+ try
2419+ let folder acc x = async { return acc + x }
2420+ let! _ = AsyncSeq.foldAsync folder 0 source
2421+ Assert.Fail( " Expected exception to be thrown" )
2422+ with
2423+ | ex when ex.Message = " generator error" ->
2424+ () // Expected
2425+ } |> Async.RunSynchronously
2426+
2427+ [<Test>]
2428+ let ``AsyncSeqOp.FoldAsync with exception in folder should propagate`` () =
2429+ async {
2430+ let generator state = async {
2431+ if state < 2 then
2432+ return Some ( state, state + 1 )
2433+ else
2434+ return None
2435+ }
2436+ let source = AsyncSeq.unfoldAsync generator 0
2437+
2438+ try
2439+ let folder acc x = async {
2440+ if x = 1 then failwith " folder error"
2441+ return acc + x
2442+ }
2443+ let! _ = AsyncSeq.foldAsync folder 0 source
2444+ Assert.Fail( " Expected exception to be thrown" )
2445+ with
2446+ | ex when ex.Message = " folder error" ->
2447+ () // Expected
2448+ } |> Async.RunSynchronously
23752449
0 commit comments