Skip to content

Commit 9ddf0f5

Browse files
committed
Mark broken noncontiguous slicing test
1 parent 3318622 commit 9ddf0f5

File tree

3 files changed

+93
-72
lines changed

3 files changed

+93
-72
lines changed

src/abstractblocksparsearray/wrappedabstractblocksparsearray.jl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -286,13 +286,11 @@ function Base.similar(
286286
elt::Type,
287287
axes::Tuple{Vararg{AbstractUnitRange{<:Integer}}},
288288
)
289-
# TODO: Use `@interface interface(a) similar(...)`.
290289
return @interface interface(a) similar(a, elt, axes)
291290
end
292291

293292
# Fixes ambiguity error.
294293
function Base.similar(a::AnyAbstractBlockSparseArray, elt::Type, axes::Tuple{})
295-
# TODO: Use `@interface interface(a) similar(...)`.
296294
return @interface interface(a) similar(a, elt, axes)
297295
end
298296

@@ -304,7 +302,6 @@ function Base.similar(
304302
AbstractBlockedUnitRange{<:Integer},Vararg{AbstractBlockedUnitRange{<:Integer}}
305303
},
306304
)
307-
# TODO: Use `@interface interface(a) similar(...)`.
308305
return @interface interface(a) similar(a, elt, axes)
309306
end
310307

@@ -314,7 +311,6 @@ function Base.similar(
314311
elt::Type,
315312
axes::Tuple{AbstractUnitRange{<:Integer},Vararg{AbstractUnitRange{<:Integer}}},
316313
)
317-
# TODO: Use `@interface interface(a) similar(...)`.
318314
return @interface interface(a) similar(a, elt, axes)
319315
end
320316

@@ -324,9 +320,17 @@ function Base.similar(
324320
elt::Type,
325321
axes::Tuple{AbstractBlockedUnitRange{<:Integer},Vararg{AbstractUnitRange{<:Integer}}},
326322
)
327-
# TODO: Use `@interface interface(a) similar(...)`.
328323
return @interface interface(a) similar(a, elt, axes)
329324
end
325+
function Base.similar(a::AnyAbstractBlockSparseArray, elt::Type)
326+
return @interface interface(a) similar(a, elt, axes(a))
327+
end
328+
function Base.similar(
329+
a::AnyAbstractBlockSparseArray,
330+
axes::Tuple{AbstractBlockedUnitRange{<:Integer},Vararg{AbstractUnitRange{<:Integer}}},
331+
)
332+
return @interface interface(a) similar(a, eltype(a), axes)
333+
end
330334

331335
# Fixes ambiguity errors with BlockArrays.
332336
function Base.similar(
@@ -346,7 +350,6 @@ end
346350
function Base.similar(
347351
a::AnyAbstractBlockSparseArray, elt::Type, axes::Tuple{Base.OneTo,Vararg{Base.OneTo}}
348352
)
349-
# TODO: Use `@interface interface(a) similar(...)`.
350353
return @interface interface(a) similar(a, elt, axes)
351354
end
352355

test/test_map.jl

Lines changed: 8 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ using JLArrays: JLArray
66
using SparseArraysBase: storedlength
77
using Test: @test, @test_broken, @test_throws, @testset
88

9+
elts = (Float32, Float64, ComplexF32)
910
arrayts = (Array, JLArray)
1011
@testset "map and slicing (arraytype=$arrayt, eltype=$elt)" for arrayt in arrayts,
11-
elt in (Float32, Float64, ComplexF32)
12+
elt in elts
1213

1314
dev = adapt(arrayt)
1415

@@ -407,7 +408,12 @@ arrayts = (Array, JLArray)
407408
a[Block(1, 1)] = dev(randn(elt, 2, 2))
408409
a[Block(2, 2)] = dev(randn(elt, 3, 3))
409410
I = (:, [2, 4])
410-
@test Array(a[I...]) == Array(a)[I...]
411+
if arrayt === Array
412+
@test Array(a[I...]) == Array(a)[I...]
413+
else
414+
# TODO: Broken on GPU, fix this.
415+
@test_broken a[I...]
416+
end
411417

412418
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
413419
@views for b in [Block(1, 1), Block(2, 2)]
@@ -715,67 +721,3 @@ arrayts = (Array, JLArray)
715721
# TODO: Fix this.
716722
@test_broken a[4, 2:4] == Array(a)[4, 2:4]
717723
end
718-
@testset "view!" begin
719-
for blk in ((Block(2, 2),), (Block(2), Block(2)))
720-
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
721-
b = view!(a, blk...)
722-
x = randn(elt, 3, 3)
723-
b .= x
724-
@test b == x
725-
@test a[blk...] == x
726-
@test @view(a[blk...]) == x
727-
@test view!(a, blk...) == x
728-
@test @view!(a[blk...]) == x
729-
end
730-
for blk in ((Block(2, 2),), (Block(2), Block(2)))
731-
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
732-
b = @view! a[blk...]
733-
x = randn(elt, 3, 3)
734-
b .= x
735-
@test b == x
736-
@test a[blk...] == x
737-
@test @view(a[blk...]) == x
738-
@test view!(a, blk...) == x
739-
@test @view!(a[blk...]) == x
740-
end
741-
for blk in ((Block(2, 2)[2:3, 1:2],), (Block(2)[2:3], Block(2)[1:2]))
742-
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
743-
b = view!(a, blk...)
744-
x = randn(elt, 2, 2)
745-
b .= x
746-
@test b == x
747-
@test a[blk...] == x
748-
@test @view(a[blk...]) == x
749-
@test view!(a, blk...) == x
750-
@test @view!(a[blk...]) == x
751-
end
752-
for blk in ((Block(2, 2)[2:3, 1:2],), (Block(2)[2:3], Block(2)[1:2]))
753-
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
754-
b = @view! a[blk...]
755-
x = randn(elt, 2, 2)
756-
b .= x
757-
@test b == x
758-
@test a[blk...] == x
759-
@test @view(a[blk...]) == x
760-
@test view!(a, blk...) == x
761-
@test @view!(a[blk...]) == x
762-
end
763-
# 0-dim case
764-
# Regression test for https://github.com/ITensor/BlockSparseArrays.jl/issues/148
765-
for I in ((), (Block(),))
766-
a = dev(BlockSparseArray{elt}(undef))
767-
@test !isstored(a)
768-
@test iszero(blockstoredlength(a))
769-
@test isempty(eachblockstoredindex(a))
770-
@test iszero(a)
771-
b = @view! a[I...]
772-
@test isstored(a)
773-
@test isone(blockstoredlength(a))
774-
@test issetequal(eachblockstoredindex(a), [Block()])
775-
@test iszero(adapt(Array)(a))
776-
@test b isa arrayt{elt,0}
777-
@test size(b) == ()
778-
# Converting to `Array` works around a bug in `iszero(JLArray{Float64}(undef))`.
779-
@test iszero(adapt(Array)(b))
780-
end
781-
end

test/test_view_bang.jl

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using Adapt: adapt
2+
using BlockArrays: Block
3+
using BlockSparseArrays:
4+
BlockSparseArray, @view!, blockstoredlength, eachblockstoredindex, view!
5+
using JLArrays: JLArray
6+
using SparseArraysBase: isstored
7+
using Test: @test, @testset
8+
9+
elts = (Float32, Float64, ComplexF32)
10+
arrayts = (Array, JLArray)
11+
@testset "view! (arraytype=$arrayt, eltype=$elt)" for arrayt in arrayts, elt in elts
12+
dev = adapt(arrayt)
13+
14+
for blk in ((Block(2, 2),), (Block(2), Block(2)))
15+
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
16+
b = view!(a, blk...)
17+
x = randn(elt, 3, 3)
18+
b .= x
19+
@test b == x
20+
@test a[blk...] == x
21+
@test @view(a[blk...]) == x
22+
@test view!(a, blk...) == x
23+
@test @view!(a[blk...]) == x
24+
end
25+
for blk in ((Block(2, 2),), (Block(2), Block(2)))
26+
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
27+
b = @view! a[blk...]
28+
x = randn(elt, 3, 3)
29+
b .= x
30+
@test b == x
31+
@test a[blk...] == x
32+
@test @view(a[blk...]) == x
33+
@test view!(a, blk...) == x
34+
@test @view!(a[blk...]) == x
35+
end
36+
for blk in ((Block(2, 2)[2:3, 1:2],), (Block(2)[2:3], Block(2)[1:2]))
37+
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
38+
b = view!(a, blk...)
39+
x = randn(elt, 2, 2)
40+
b .= x
41+
@test b == x
42+
@test a[blk...] == x
43+
@test @view(a[blk...]) == x
44+
@test view!(a, blk...) == x
45+
@test @view!(a[blk...]) == x
46+
end
47+
for blk in ((Block(2, 2)[2:3, 1:2],), (Block(2)[2:3], Block(2)[1:2]))
48+
a = BlockSparseArray{elt}(undef, [2, 3], [2, 3])
49+
b = @view! a[blk...]
50+
x = randn(elt, 2, 2)
51+
b .= x
52+
@test b == x
53+
@test a[blk...] == x
54+
@test @view(a[blk...]) == x
55+
@test view!(a, blk...) == x
56+
@test @view!(a[blk...]) == x
57+
end
58+
# 0-dim case
59+
# Regression test for https://github.com/ITensor/BlockSparseArrays.jl/issues/148
60+
for I in ((), (Block(),))
61+
a = dev(BlockSparseArray{elt}(undef))
62+
@test !isstored(a)
63+
@test iszero(blockstoredlength(a))
64+
@test isempty(eachblockstoredindex(a))
65+
@test iszero(a)
66+
b = @view! a[I...]
67+
@test isstored(a)
68+
@test isone(blockstoredlength(a))
69+
@test issetequal(eachblockstoredindex(a), [Block()])
70+
@test iszero(adapt(Array)(a))
71+
@test b isa arrayt{elt,0}
72+
@test size(b) == ()
73+
# Converting to `Array` works around a bug in `iszero(JLArray{Float64}(undef))`.
74+
@test iszero(adapt(Array)(b))
75+
end
76+
end

0 commit comments

Comments
 (0)