From ad56659ca146fe51e65cda918677aab114940b87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Rolstad=20Henriksen?= Date: Fri, 6 Jul 2018 08:24:36 +0200 Subject: [PATCH] Add truncate as an alias to mimic Seq. --- src/FSharp.Control.AsyncSeq/AsyncSeq.fs | 2 ++ src/FSharp.Control.AsyncSeq/AsyncSeq.fsi | 4 ++++ tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs | 10 ++++++++++ 3 files changed, 16 insertions(+) diff --git a/src/FSharp.Control.AsyncSeq/AsyncSeq.fs b/src/FSharp.Control.AsyncSeq/AsyncSeq.fs index 5dc1fcb..b1b36f1 100644 --- a/src/FSharp.Control.AsyncSeq/AsyncSeq.fs +++ b/src/FSharp.Control.AsyncSeq/AsyncSeq.fs @@ -1286,6 +1286,8 @@ module AsyncSeq = let! moven = ie.MoveNext() b := moven else b := None } + + let truncate count source = take count source let skip count (source : AsyncSeq<'T>) : AsyncSeq<_> = asyncSeq { if (count < 0) then invalidArg "count" "must be non-negative" diff --git a/src/FSharp.Control.AsyncSeq/AsyncSeq.fsi b/src/FSharp.Control.AsyncSeq/AsyncSeq.fsi index d4f0f76..7734451 100644 --- a/src/FSharp.Control.AsyncSeq/AsyncSeq.fsi +++ b/src/FSharp.Control.AsyncSeq/AsyncSeq.fsi @@ -390,8 +390,12 @@ module AsyncSeq = val skipWhile : predicate:('T -> bool) -> source:AsyncSeq<'T> -> AsyncSeq<'T> /// Returns the first N elements of an asynchronous sequence + /// does not cast an exception if count is larger than the sequence length. val take : count:int -> source:AsyncSeq<'T> -> AsyncSeq<'T> + /// Alias for take + val truncate : count:int -> source:AsyncSeq<'T> -> AsyncSeq<'T> + /// Skips the first N elements of an asynchronous sequence and /// then returns the rest of the sequence unmodified. val skip : count:int -> source:AsyncSeq<'T> -> AsyncSeq<'T> diff --git a/tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs b/tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs index a6bf097..03701cc 100644 --- a/tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs +++ b/tests/FSharp.Control.AsyncSeq.Tests/AsyncSeqTests.fs @@ -1388,6 +1388,16 @@ let ``AsyncSeq.take should work``() = let ls = ss |> AsyncSeq.toList () +[] +let ``AsyncSeq.truncate should work like take``() = + let s = asyncSeq { + yield ["a",1] |> Map.ofList + } + let expected = s |> AsyncSeq.take 1 + let actual = s |> AsyncSeq.truncate 1 + Assert.AreEqual(expected, actual) + + [] let ``AsyncSeq.mapAsyncParallel should maintain order`` () = for i in 0..100 do