From d54f863768f3dc30da82f15b86c73701ca2947e1 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Fri, 27 Nov 2020 19:13:44 +0000 Subject: [PATCH] Special case maximum/minimum for cached fill vectors (#147) --- Project.toml | 2 +- src/cache.jl | 23 +++++++++++++++++++++++ test/cachetests.jl | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 61ba504f..565d11ff 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "LazyArrays" uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" -version = "0.19.2" +version = "0.19.3" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" diff --git a/src/cache.jl b/src/cache.jl index 2a69a344..3b728211 100644 --- a/src/cache.jl +++ b/src/cache.jl @@ -363,3 +363,26 @@ copy(a::CachedArray) = CachedArray(copy(a.data), a.array, a.datasize) copy(a::Adjoint{<:Any,<:CachedArray}) = copy(parent(a))' copy(a::Transpose{<:Any,<:CachedArray}) = transpose(copy(parent(a))) +### +# special maximum/minimum +# TODO: when view returns a Fill this can be generalised +### + + +function maximum(a::CachedVector{<:Any,<:Any,<:AbstractFill}) + data = cacheddata(a) + if length(data) < length(a) + max(maximum(data), getindex_value(a.array)) + else + maximum(data) + end +end + +function minimum(a::CachedVector{<:Any,<:Any,<:AbstractFill}) + data = cacheddata(a) + if length(data) < length(a) + min(minimum(data), getindex_value(a.array)) + else + minimum(data) + end +end \ No newline at end of file diff --git a/test/cachetests.jl b/test/cachetests.jl index 2dad28ce..b4764d46 100644 --- a/test/cachetests.jl +++ b/test/cachetests.jl @@ -317,4 +317,18 @@ import LazyArrays: CachedArray, CachedMatrix, CachedVector, PaddedLayout, Cached @test zero!(a) ≡ a @test a.datasize == (0,) end + + @testset "minimum/maximum" begin + c = cache(Fill(2,4)); + c[1] = 1; + @test maximum(c) == 2 + @test minimum(c) == 1 + c[1] = 3; + @test maximum(c) == 3 + @test minimum(c) == 2 + c[1:4] .= 1; + @test maximum(c) == 1 + c[1:4] .= 3; + @test minimum(c) == 3 + end end \ No newline at end of file