Skip to content

Commit c00773e

Browse files
authored
Merge branch 'main' into feature/additional-coverage-utils-edge-cases
2 parents 88f3dfc + 399d22c commit c00773e

2 files changed

Lines changed: 80 additions & 12 deletions

File tree

src/FSharp.Control.AsyncSeq/AsyncSeq.fs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,6 @@ and private AsyncSeqSrcNode<'a> =
3838
[<AutoOpen>]
3939
module internal Utils =
4040

41-
[<RequireQualifiedAccess>]
42-
module Choice =
43-
44-
/// Maps over the left result type.
45-
let mapl (f:'T -> 'U) = function
46-
| Choice1Of2 a -> f a |> Choice1Of2
47-
| Choice2Of2 e -> Choice2Of2 e
48-
4941
module Disposable =
5042

5143
let empty : IDisposable =
@@ -295,10 +287,6 @@ type AsyncSeqOp<'T> () =
295287
abstract member FoldAsync : ('S -> 'T -> Async<'S>) -> 'S -> Async<'S>
296288
abstract member MapAsync : ('T -> Async<'U>) -> AsyncSeq<'U>
297289
abstract member IterAsync : ('T -> Async<unit>) -> Async<unit>
298-
default x.MapAsync (f:'T -> Async<'U>) : AsyncSeq<'U> =
299-
x.ChooseAsync (f >> Async.map Some)
300-
default x.IterAsync (f:'T -> Async<unit>) : Async<unit> =
301-
x.FoldAsync (fun () t -> f t) ()
302290

303291
[<AutoOpen>]
304292
module AsyncSeqOp =

tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1882,6 +1882,86 @@ let ``Seq.ofAsyncSeq with exception`` () =
18821882
Seq.ofAsyncSeq asyncSeqWithError |> Seq.toList |> ignore
18831883
) |> ignore
18841884

1885+
[<Test>]
1886+
let ``AsyncSeq.intervalMs should generate sequence with timestamps``() =
1887+
let result =
1888+
AsyncSeq.intervalMs 50
1889+
|> AsyncSeq.take 3
1890+
|> AsyncSeq.toListAsync
1891+
|> AsyncOps.timeoutMs 1000
1892+
|> Async.RunSynchronously
1893+
1894+
Assert.AreEqual(3, result.Length)
1895+
// Verify timestamps are increasing
1896+
Assert.IsTrue(result.[1] > result.[0])
1897+
Assert.IsTrue(result.[2] > result.[1])
1898+
1899+
[<Test>]
1900+
let ``AsyncSeq.intervalMs with zero period should work``() =
1901+
let result =
1902+
AsyncSeq.intervalMs 0
1903+
|> AsyncSeq.take 2
1904+
|> AsyncSeq.toListAsync
1905+
|> AsyncOps.timeoutMs 500
1906+
|> Async.RunSynchronously
1907+
1908+
Assert.AreEqual(2, result.Length)
1909+
1910+
[<Test>]
1911+
let ``AsyncSeq.take with negative count should throw ArgumentException``() =
1912+
Assert.Throws<System.ArgumentException>(fun () ->
1913+
AsyncSeq.ofSeq [1;2;3]
1914+
|> AsyncSeq.take -1
1915+
|> AsyncSeq.toListAsync
1916+
|> Async.RunSynchronously
1917+
|> ignore
1918+
) |> ignore
1919+
1920+
[<Test>]
1921+
let ``AsyncSeq.skip with negative count should throw ArgumentException``() =
1922+
Assert.Throws<System.ArgumentException>(fun () ->
1923+
AsyncSeq.ofSeq [1;2;3]
1924+
|> AsyncSeq.skip -1
1925+
|> AsyncSeq.toListAsync
1926+
|> Async.RunSynchronously
1927+
|> ignore
1928+
) |> ignore
1929+
1930+
[<Test>]
1931+
let ``AsyncSeq.take zero should return empty sequence``() =
1932+
let expected = []
1933+
let actual =
1934+
AsyncSeq.ofSeq [1;2;3]
1935+
|> AsyncSeq.take 0
1936+
|> AsyncSeq.toListAsync
1937+
|> Async.RunSynchronously
1938+
1939+
Assert.AreEqual(expected, actual)
1940+
1941+
[<Test>]
1942+
let ``AsyncSeq.skip zero should return original sequence``() =
1943+
let expected = [1;2;3]
1944+
let actual =
1945+
AsyncSeq.ofSeq [1;2;3]
1946+
|> AsyncSeq.skip 0
1947+
|> AsyncSeq.toListAsync
1948+
|> Async.RunSynchronously
1949+
1950+
Assert.AreEqual(expected, actual)
1951+
1952+
[<Test>]
1953+
let ``AsyncSeq.replicateInfinite with exception should propagate exception``() =
1954+
let exceptionMsg = "test exception"
1955+
let expected = System.ArgumentException(exceptionMsg)
1956+
1957+
Assert.Throws<System.ArgumentException>(fun () ->
1958+
AsyncSeq.replicateInfinite (raise expected)
1959+
|> AsyncSeq.take 2
1960+
|> AsyncSeq.toListAsync
1961+
|> Async.RunSynchronously
1962+
|> ignore
1963+
) |> ignore
1964+
18851965
#if (NETSTANDARD2_1 || NETCOREAPP3_0)
18861966
[<Test>]
18871967
let ``AsyncSeq.ofAsyncEnum should roundtrip successfully``() =

0 commit comments

Comments
 (0)