diff --git a/Project.toml b/Project.toml index d0d3e60..6a51fba 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FillArrays" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.14.0" +version = "1.15.0" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/trues.jl b/src/trues.jl index 3c3f207..39088af 100644 --- a/src/trues.jl +++ b/src/trues.jl @@ -34,3 +34,12 @@ function Base.to_indices(A::AbstractArray{T,N}, inds, I::Tuple{Trues{N}}) where @boundscheck axes(A) == axes(I[1]) || Base.throw_boundserror(A, I[1]) (vec(LinearIndices(A)),) end + +Base.@propagate_inbounds function getindex(v::AbstractArray, f::AbstractFill{Bool}) + @boundscheck checkbounds(v, f) + v[range(begin, length = getindex_value(f) ? length(v) : 0)] +end +Base.@propagate_inbounds function getindex(v::AbstractFill, f::AbstractFill{Bool}) + @boundscheck checkbounds(v, f) + fillsimilar(v, getindex_value(f) ? length(v) : 0) +end diff --git a/test/runtests.jl b/test/runtests.jl index 32cd2ed..a4b64f1 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -342,6 +342,27 @@ end @test StepRangeLen(z) ≡ convert(StepRangeLen, z) ≡ convert(StepRangeLen{Int}, z) ≡ convert(typeof(s), z) ≡ convert(AbstractRange, z) ≡ s end end + @testset "indexing with a Bool AbstractFill" begin + @testset for v in ([1, 2, 3], 1:3, rand(Int,3,1), Base.IdentityUnitRange(1:3)) + n = length(v) + @test v[Trues(n)] == v[Fill(true, n)] == v[trues(n)] == vec(v) + @test v[Falses(n)] == v[Fill(false, n)] == v[falses(n)] == Int[] + @test v[Trues(n,1)] == v[Fill(true, n,1)] == v[trues(n,1)] == vec(v) + @test v[Falses(n,1)] == v[Fill(false, n,1)] == v[falses(n,1)] == Int[] + end + + for f in (Fill(3, 4), Fill(3, 4, 1)) + n = length(f) + @test f[Trues(n)] === f[Fill(true, n)] === vec(f) + @test f[Falses(n)] === f[Fill(false, n)] === Fill(3,0) + @test f[Trues(n)] == f[trues(n)] + @test f[Falses(n)] == f[falses(n)] + @test f[Trues(n,1)] === f[Fill(true, n,1)] === vec(f) + @test f[Falses(n,1)] === f[Fill(false, n,1)] === Fill(3,0) + @test f[Trues(n,1)] == f[trues(n,1)] + @test f[Falses(n,1)] == f[falses(n,1)] + end + end end @testset "RectDiagonal" begin