Skip to content

Commit 0633c4c

Browse files
Michał Niegrzybowskialfonsogarciacaro
authored andcommitted
#2451 throw exception when sequence is empty
1 parent 18447c3 commit 0633c4c

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/fable-library/Seq.fs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -807,13 +807,17 @@ let average (xs: seq<'T>) ([<Inject>] averager: IGenericAverager<'T>): 'T =
807807
let mutable count = 0
808808
let folder acc x = count <- count + 1; averager.Add(acc, x)
809809
let total = fold folder (averager.GetZero()) xs
810-
averager.DivideByInt(total, count)
810+
if count = 0 then
811+
invalidArg "xs" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString
812+
else averager.DivideByInt(total, count)
811813

812814
let averageBy (f: 'T -> 'U) (xs: seq<'T>) ([<Inject>] averager: IGenericAverager<'U>): 'U =
813815
let mutable count = 0
814816
let inline folder acc x = count <- count + 1; averager.Add(acc, f x)
815817
let total = fold folder (averager.GetZero()) xs
816-
averager.DivideByInt(total, count)
818+
if count = 0 then
819+
invalidArg "xs" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString
820+
else averager.DivideByInt(total, count)
817821

818822
let permute f (xs: seq<'T>) =
819823
delay (fun () ->

tests/Main/SeqTests.fs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ let tests =
8080
sumFirstTwo zs
8181
|> equal 1.
8282

83+
testCase "Seq.average for empty sequence" <| fun () ->
84+
let xs = Seq.empty<float>
85+
(try Seq.average xs |> ignore; false with | _ -> true) |> equal true
86+
87+
testCase "Seq.averageBy for empty sequence" <| fun () ->
88+
let xs = Seq.empty<float>
89+
(try Seq.averageBy ((*) 2.) xs |> ignore; false with | _ -> true) |> equal true
90+
8391
testCase "Seq.average works" <| fun () ->
8492
let xs = seq {1.; 2.; 3.; 4.}
8593
Seq.average xs

0 commit comments

Comments
 (0)