@@ -103,6 +103,37 @@ import BlockArrays: BlockIndex, BlockIndexRange, BlockSlice
103
103
@test intersect (Block .(2 : 5 ), Block .(3 : 6 )) ≡ Block .(3 : 5 )
104
104
end
105
105
106
+ @testset " view into CartesianIndices/ranges" begin
107
+ r = 2 : 10
108
+ @test view (r, Block (1 )) === r
109
+ @test_throws BlockBoundsError view (r, Block (2 ))
110
+ C = CartesianIndices ((2 : 10 , 2 : 10 ))
111
+ == ᵥ = VERSION >= v " 1.10" ? (=== ) : (== )
112
+
113
+ @test view (C, Block (1 ,1 )) == ᵥ C
114
+ @test view (C, Block (1 ), Block (1 )) == C
115
+ @test_throws BlockBoundsError view (C, Block (1 ), Block (2 ))
116
+ @test_throws BlockBoundsError view (C, Block (1 ,2 ))
117
+
118
+ B = BlockArray ([1 : 3 ;], [2 ,1 ])
119
+ Cb = CartesianIndices (B)
120
+ @test view (Cb, Block (1 )) == ᵥ Cb[Block (1 )] == ᵥ CartesianIndices ((1 : 2 ,))
121
+ @test view (Cb, Block (2 )) == ᵥ Cb[Block (2 )] == ᵥ CartesianIndices ((3 : 3 ,))
122
+
123
+ B = BlockArray (reshape ([1 : 9 ;],3 ,3 ), [2 ,1 ], [2 ,1 ])
124
+ Cb = CartesianIndices (B)
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 ))
129
+ for i in 1 : 2 , j in 1 : 2
130
+ @test view (Cb, Block (j), Block (i)) == ᵥ view (Cb, Block (j, i))
131
+ end
132
+ # ensure that calls with mismatched ndims don't error
133
+ @test view (Cb, Block (1 )) == view (Cb, to_indices (Cb, (Block (1 ),))... )
134
+ @test reshape (view (Cb, Block (1 ), Block (1 ), Block (1 )), 2 , 2 ) == view (Cb, Block (1 ), Block (1 ))
135
+ end
136
+
106
137
@testset " print" begin
107
138
@test sprint (show, " text/plain" , Block ()) == " Block()"
108
139
@test sprint (show, " text/plain" , Block (1 )) == " Block(1)"
405
436
406
437
@testset " BlockSlice" begin
407
438
b = BlockSlice (Block (5 ),1 : 3 )
439
+ @test b[b] == b
440
+ @test b[b] isa BlockSlice{<: BlockIndexRange }
408
441
@test b[Base. Slice (1 : 3 )] ≡ b
409
442
@test b[1 : 2 ] ≡ b[1 : 2 ][1 : 2 ] ≡ BlockSlice (Block (5 )[1 : 2 ],1 : 2 )
410
443
@test Block (b) ≡ Block (5 )
414
447
@test convert (typeof (b), Base. OneTo (1 )) ≡ b
415
448
end
416
449
end
450
+
451
+ @testset " view into CartesianIndices/ranges" begin
452
+ C = CartesianIndices ((1 : 3 ,))
453
+ r = 1 : 2
454
+ b = BlockSlice (Block (1 ), r)
455
+ @test view (C, b) === view (C, r)
456
+ @test view (1 : 10 , b) === view (1 : 10 , r)
457
+ C = CartesianIndices ((1 : 3 , 1 : 3 ))
458
+ @test view (C, b, b) === view (C, r, r)
459
+ end
417
460
end
418
461
419
462
#=
0 commit comments