diff --git a/src/Statistics.jl b/src/Statistics.jl index aad352b..da23c21 100644 --- a/src/Statistics.jl +++ b/src/Statistics.jl @@ -1017,7 +1017,7 @@ function _quantilesort!(v::AbstractVector, sorted::Bool, minp::Real, maxp::Real) sort!(v, 1, lv, Base.Sort.PartialQuickSort(lo:hi), Base.Sort.Forward) end if (sorted && (ismissing(v[end]) || (v[end] isa Number && isnan(v[end])))) || - any(x -> ismissing(x) || (x isa Number && isnan(x)), v) + any(x -> ismissing(x) || (applicable(isnan, v[end]) && isnan(x)), v) throw(ArgumentError("quantiles are undefined in presence of NaNs or missing values")) end return v @@ -1049,7 +1049,7 @@ end # When a ≉ b, b-a may overflow # When a ≈ b, (1-γ)*a + γ*b may not be increasing with γ due to rounding - if isfinite(a) && isfinite(b) && + if applicable(isfinite, a) && isfinite(a) && isfinite(b) && (!(a isa Number) || !(b isa Number) || a ≈ b) return a + γ*(b-a) else diff --git a/test/runtests.jl b/test/runtests.jl index 2d732d0..698fb78 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,6 +2,7 @@ using Statistics, Test, Random, LinearAlgebra, SparseArrays, Dates using Test: guardseed +using Dates Random.seed!(123) @@ -695,6 +696,8 @@ end @test quantile(skipmissing([1, missing, 2]), 0.5) === 1.5 @test quantile([1], 0.5) === 1.0 + @test quantile(Millisecond.(1:10), 0.5) == Millisecond(5) + # make sure that type inference works correctly in normal cases for T in [Int, BigInt, Float64, Float16, BigFloat, Rational{Int}, Rational{BigInt}] for S in [Float64, Float16, BigFloat, Rational{Int}, Rational{BigInt}]