Skip to content

Commit 20caf08

Browse files
committed
Preserve indexing of Blocks in BlockSlice
1 parent 129f8c8 commit 20caf08

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/blockindices.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,13 +302,13 @@ _indices(B) = B
302302

303303
@propagate_inbounds getindex(S::BlockSlice, i::Integer) = getindex(S.indices, i)
304304
@propagate_inbounds getindex(S::BlockSlice{<:Block{1}}, k::AbstractUnitRange{Int}) =
305-
BlockSlice(S.block, S.indices[_indices(k)])
305+
BlockSlice(S.block[_indices(k)], S.indices[_indices(k)])
306306
@propagate_inbounds getindex(S::BlockSlice{<:BlockIndexRange{1}}, k::AbstractUnitRange{Int}) =
307-
BlockSlice(S.block, S.indices[_indices(k)])
307+
BlockSlice(S.block[_indices(k)], S.indices[_indices(k)])
308308
show(io::IO, r::BlockSlice) = print(io, "BlockSlice(", r.block, ",", r.indices, ")")
309309

310310
# Avoid creating a SubArray wrapper in certain non-allocating cases
311-
Base.@propagate_inbounds Base.view(C::CartesianIndices{N}, bs::Vararg{BlockSlice,N}) where {N} = C[bs...]
311+
Base.@propagate_inbounds Base.view(C::CartesianIndices{N}, bs::Vararg{BlockSlice,N}) where {N} = view(C, map(x->x.indices, bs)...)
312312

313313
Block(bs::BlockSlice{<:BlockIndexRange}) = Block(bs.block)
314314

test/test_blockindices.jl

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,22 +108,24 @@ import BlockArrays: BlockIndex, BlockIndexRange, BlockSlice
108108
@test view(r, Block(1)) === r
109109
@test_throws BlockBoundsError view(r, Block(2))
110110
C = CartesianIndices((2:10, 2:10))
111-
@test view(C, Block(1,1)) === C
111+
=== VERSION >= v"1.10" ? (===) : (==)
112+
113+
@test view(C, Block(1,1)) ==ᵥ C
112114
@test view(C, Block(1), Block(1)) == C
113115
@test_throws BlockBoundsError view(C, Block(1), Block(2))
114116
@test_throws BlockBoundsError view(C, Block(1,2))
115117

116118
B = BlockArray([1:3;], [2,1])
117119
Cb = CartesianIndices(B)
118-
@test view(Cb, Block(1)) === Cb[Block(1)] === CartesianIndices((1:2,))
119-
@test view(Cb, Block(2)) === Cb[Block(2)] === CartesianIndices((3:3,))
120+
@test view(Cb, Block(1)) == Cb[Block(1)] == CartesianIndices((1:2,))
121+
@test view(Cb, Block(2)) == Cb[Block(2)] == CartesianIndices((3:3,))
120122

121123
B = BlockArray(reshape([1:9;],3,3), [2,1], [2,1])
122124
Cb = CartesianIndices(B)
123-
@test view(Cb, Block(1,1)) === Cb[Block(1,1)] === CartesianIndices((1:2,1:2))
124-
@test view(Cb, Block(1,2)) === Cb[Block(1,2)] === CartesianIndices((1:2, 3:3))
125-
@test view(Cb, Block(2,1)) === Cb[Block(2,1)] === CartesianIndices((3:3,1:2))
126-
@test view(Cb, Block(2,2)) === Cb[Block(2,2)] === CartesianIndices((3:3, 3:3))
125+
@test view(Cb, Block(1,1)) == Cb[Block(1,1)] == CartesianIndices((1:2,1:2))
126+
@test view(Cb, Block(1,2)) == Cb[Block(1,2)] == CartesianIndices((1:2, 3:3))
127+
@test view(Cb, Block(2,1)) == Cb[Block(2,1)] == CartesianIndices((3:3,1:2))
128+
@test view(Cb, Block(2,2)) == Cb[Block(2,2)] == CartesianIndices((3:3, 3:3))
127129
for i in 1:2, j in 1:2
128130
@test view(Cb, Block(j), Block(i)) == view(Cb, Block(j, i)) == Cb[Block(j, i)]
129131
end
@@ -431,9 +433,9 @@ end
431433

432434
@testset "BlockSlice" begin
433435
b = BlockSlice(Block(5),1:3)
434-
@test b[b] === b
436+
@test b[b] == b
435437
@test b[Base.Slice(1:3)] b
436-
@test b[1:2] b[1:2][1:2] BlockSlice(Block(5),1:2)
438+
@test b[1:2] b[1:2][1:2] BlockSlice(Block(5)[1:2],1:2)
437439
@test Block(b) Block(5)
438440

439441
@testset "OneTo converts" begin
@@ -448,6 +450,8 @@ end
448450
b = BlockSlice(Block(1), r)
449451
@test view(C, b) === view(C, r)
450452
@test view(1:10, b) === view(1:10, r)
453+
C = CartesianIndices((1:3, 1:3))
454+
@test view(C, b, b) === view(C, r, r)
451455
end
452456
end
453457

0 commit comments

Comments
 (0)