@@ -3209,3 +3209,68 @@ let ``AsyncSeq.forallAsync returns true on empty sequence`` () =
32093209 |> AsyncSeq.forallAsync ( fun _ -> async { return false })
32103210 |> Async.RunSynchronously
32113211 Assert.IsTrue( result)
3212+
3213+ // ===== last =====
3214+
3215+ [<Test>]
3216+ let ``AsyncSeq.last returns last element`` () =
3217+ let source = asyncSeq { yield 1 ; yield 2 ; yield 3 }
3218+ let result = AsyncSeq.last source |> Async.RunSynchronously
3219+ Assert.AreEqual( 3 , result)
3220+
3221+ [<Test>]
3222+ let ``AsyncSeq.last on singleton returns that element`` () =
3223+ let result = AsyncSeq.last ( AsyncSeq.singleton 42 ) |> Async.RunSynchronously
3224+ Assert.AreEqual( 42 , result)
3225+
3226+ [<Test>]
3227+ let ``AsyncSeq.last raises on empty sequence`` () =
3228+ Assert.Throws< InvalidOperationException>( fun () ->
3229+ AsyncSeq.last AsyncSeq.empty< int> |> Async.RunSynchronously |> ignore) |> ignore
3230+
3231+ // ===== item =====
3232+
3233+ [<Test>]
3234+ let ``AsyncSeq.item returns element at index 0`` () =
3235+ let source = asyncSeq { yield 10 ; yield 20 ; yield 30 }
3236+ let result = AsyncSeq.item 0 source |> Async.RunSynchronously
3237+ Assert.AreEqual( 10 , result)
3238+
3239+ [<Test>]
3240+ let ``AsyncSeq.item returns element at index 2`` () =
3241+ let source = asyncSeq { yield 10 ; yield 20 ; yield 30 }
3242+ let result = AsyncSeq.item 2 source |> Async.RunSynchronously
3243+ Assert.AreEqual( 30 , result)
3244+
3245+ [<Test>]
3246+ let ``AsyncSeq.item raises when index out of bounds`` () =
3247+ Assert.Throws< ArgumentException>( fun () ->
3248+ AsyncSeq.item 5 ( AsyncSeq.ofSeq [ 1 ; 2 ; 3 ]) |> Async.RunSynchronously |> ignore) |> ignore
3249+
3250+ [<Test>]
3251+ let ``AsyncSeq.item raises when index negative`` () =
3252+ Assert.Throws< ArgumentException>( fun () ->
3253+ AsyncSeq.item - 1 ( AsyncSeq.ofSeq [ 1 ; 2 ; 3 ]) |> Async.RunSynchronously |> ignore) |> ignore
3254+
3255+ // ===== tryItem =====
3256+
3257+ [<Test>]
3258+ let ``AsyncSeq.tryItem returns Some for valid index`` () =
3259+ let source = asyncSeq { yield 10 ; yield 20 ; yield 30 }
3260+ let result = AsyncSeq.tryItem 1 source |> Async.RunSynchronously
3261+ Assert.AreEqual( Some 20 , result)
3262+
3263+ [<Test>]
3264+ let ``AsyncSeq.tryItem returns None for out - of - bounds index`` () =
3265+ let result = AsyncSeq.tryItem 10 ( AsyncSeq.ofSeq [ 1 ; 2 ; 3 ]) |> Async.RunSynchronously
3266+ Assert.AreEqual( None, result)
3267+
3268+ [<Test>]
3269+ let ``AsyncSeq.tryItem returns None for negative index`` () =
3270+ let result = AsyncSeq.tryItem - 1 ( AsyncSeq.ofSeq [ 1 ; 2 ; 3 ]) |> Async.RunSynchronously
3271+ Assert.AreEqual( None, result)
3272+
3273+ [<Test>]
3274+ let ``AsyncSeq.tryItem returns None on empty sequence`` () =
3275+ let result = AsyncSeq.tryItem 0 AsyncSeq.empty< int> |> Async.RunSynchronously
3276+ Assert.AreEqual( None, result)
0 commit comments