File tree Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -807,13 +807,17 @@ let average (xs: seq<'T>) ([<Inject>] averager: IGenericAverager<'T>): 'T =
807
807
let mutable count = 0
808
808
let folder acc x = count <- count + 1 ; averager.Add( acc, x)
809
809
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)
811
813
812
814
let averageBy ( f : 'T -> 'U ) ( xs : seq < 'T >) ( [<Inject>] averager : IGenericAverager < 'U >): 'U =
813
815
let mutable count = 0
814
816
let inline folder acc x = count <- count + 1 ; averager.Add( acc, f x)
815
817
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)
817
821
818
822
let permute f ( xs : seq < 'T >) =
819
823
delay ( fun () ->
Original file line number Diff line number Diff line change @@ -80,6 +80,14 @@ let tests =
80
80
sumFirstTwo zs
81
81
|> equal 1.
82
82
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
+
83
91
testCase " Seq.average works" <| fun () ->
84
92
let xs = seq { 1. ; 2. ; 3. ; 4. }
85
93
Seq.average xs
You can’t perform that action at this time.
0 commit comments