Skip to content

Commit b998bf2

Browse files
committed
clean-up tests
1 parent fe42262 commit b998bf2

File tree

8 files changed

+124
-111
lines changed

8 files changed

+124
-111
lines changed

docs/Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ LinearMaps = "7a12625a-238d-50fd-b39a-03d52299707e"
66
Literate = "98b081ad-f1c9-55d3-8b20-4c87d4299306"
77

88
[compat]
9-
BenchmarkTools = "0.4, 0.5"
10-
Documenter = "0.25, 0.26"
9+
BenchmarkTools = "1"
10+
Documenter = "0.25, 0.26, 0.27"
1111
Literate = "2"

test/Project.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[deps]
22
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
3-
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
43
BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
54
InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
65
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
@@ -11,7 +10,6 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1110

1211
[compat]
1312
Aqua = "0.5"
14-
BenchmarkTools = "1"
1513
BlockArrays = "0.16"
1614
Quaternions = "0.5"
1715
julia = "1.6"

test/blockmap.jl

Lines changed: 68 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,100 @@
1-
using Test, LinearMaps, LinearAlgebra, SparseArrays, BenchmarkTools, InteractiveUtils
1+
using Test, LinearMaps, LinearAlgebra, SparseArrays, InteractiveUtils
22
using LinearMaps: FiveArg
33

44
@testset "block maps" begin
55
@testset "hcat" begin
6-
for elty in (Float32, ComplexF64), n2 = (0, 20)
7-
A11 = rand(elty, 10, 10)
8-
A12 = rand(elty, 10, n2)
9-
v = rand(elty, 10)
6+
m = 3
7+
n = 4
8+
for elty in (Float32, ComplexF64), n2 in (0, 2)
9+
A11 = rand(elty, m, n)
10+
A12 = rand(elty, m, n2)
11+
a = rand(elty, m)
1012
L = @inferred hcat(LinearMap(A11), LinearMap(A12))
1113
@test L.maps isa Tuple
1214
Lv = @inferred LinearMaps.BlockMap{elty}([LinearMap(A11), LinearMap(A12)], (2,))
1315
@test Lv.maps isa Vector
1416
@test L == Lv == LinearMaps.BlockMap([LinearMap(A11), LinearMap(A12)], (2,))
15-
@test occursin("10×$(10+n2) LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
17+
@test occursin("$m×$(n+n2) LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
1618
@test @inferred(LinearMaps.MulStyle(L)) === FiveArg()
1719
@test L isa LinearMaps.BlockMap{elty}
1820
if elty <: Complex
1921
@test_throws ErrorException LinearMaps.BlockMap{Float64}((LinearMap(A11), LinearMap(A12)), (2,))
2022
end
2123
A = [A11 A12]
22-
x = rand(10+n2)
24+
x = rand(n+n2)
2325
@test size(L) == size(A) == size(Lv)
24-
@test Matrix(L) A Matrix(Lv)
26+
@test Matrix(L) == A == Matrix(Lv)
2527
@test L * x A * x Lv * x
2628
L = @inferred hcat(LinearMap(A11), LinearMap(A12), LinearMap(A11))
2729
A = [A11 A12 A11]
28-
@test Matrix(L) A
29-
A = [I I I A11 A11 A11 v]
30+
@test Matrix(L) == A
31+
A = [I I I A11 A11 A11 a]
3032
@test (@which [A11 A11 A11]).module != LinearMaps
3133
@test (@which [I I I A11 A11 A11]).module != LinearMaps
3234
@test (@which hcat(I, I, I)).module != LinearMaps
3335
@test (@which hcat(I, I, I, LinearMap(A11), A11, A11)).module == LinearMaps
34-
maps = @inferred LinearMaps.promote_to_lmaps(ntuple(i->10, 7), 1, 1, I, I, I, LinearMap(A11), A11, A11, v)
36+
maps = @inferred LinearMaps.promote_to_lmaps(ntuple(i->m, 7), 1, 1, I, I, I, LinearMap(A11), A11, A11, a)
3537
@inferred LinearMaps.rowcolranges(maps, (7,))
36-
L = @inferred hcat(I, I, I, LinearMap(A11), A11, A11, v)
37-
@test L == [I I I LinearMap(A11) LinearMap(A11) LinearMap(A11) LinearMap(v)]
38-
x = rand(elty, 61)
38+
L = @inferred hcat(I, I, I, LinearMap(A11), A11, A11, a)
39+
@test L == [I I I LinearMap(A11) LinearMap(A11) LinearMap(A11) LinearMap(a)]
40+
x = ones(elty, size(L, 2))
3941
@test L isa LinearMaps.BlockMap{elty}
4042
@test L * x A * x
41-
L = @inferred hcat(I, I, I, LinearMap(A11), A11, A11, v, v, v, v)
42-
@test occursin("10×64 LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
43-
L = @inferred hcat(I, I, I, LinearMap(A11), A11, A11, v, v, v, v, v, v, v)
44-
@test occursin("10×67 LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
45-
A11 = rand(elty, 11, 10)
46-
A12 = rand(elty, 10, n2)
47-
@test_throws DimensionMismatch hcat(LinearMap(A11), LinearMap(A12))
43+
L = @inferred hcat(I, I, I, LinearMap(A11), A11, A11, a, a, a, a)
44+
@test occursin("$m×$(3m+3n+4) LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
45+
L = @inferred hcat(I, I, I, LinearMap(A11), A11, A11, a, a, a, a, a, a, a)
46+
@test occursin("$m×$(3m+3n+7) LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
4847
end
48+
A11 = zeros(m+1, n)
49+
A12 = zeros(m, n)
50+
@test_throws DimensionMismatch hcat(LinearMap(A11), LinearMap(A12))
4951
end
5052

5153
@testset "vcat" begin
54+
m = 2
55+
n = 3
5256
for elty in (Float32, ComplexF64)
53-
A11 = rand(elty, 10, 10)
54-
v = rand(elty, 10)
57+
A11 = rand(elty, m, n)
58+
v = rand(elty, n)
5559
L = @inferred vcat(LinearMap(A11))
5660
@test L == [LinearMap(A11);]
5761
@test Matrix(L) A11
58-
A21 = rand(elty, 20, 10)
62+
A21 = rand(elty, 2m, n)
5963
L = @inferred vcat(LinearMap(A11), LinearMap(A21))
6064
@test L.maps isa Tuple
65+
@test L isa LinearMaps.BlockMap{elty}
66+
@test occursin("$(3m)×$n LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
67+
@test @inferred(LinearMaps.MulStyle(L)) === FiveArg()
6168
Lv = LinearMaps.BlockMap{elty}([LinearMap(A11), LinearMap(A21)], (1,1))
6269
@test Lv.maps isa Vector
6370
@test L == Lv
64-
@test occursin("30×10 LinearMaps.BlockMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), L))
65-
@test L isa LinearMaps.BlockMap{elty}
66-
@test @inferred(LinearMaps.MulStyle(L)) === FiveArg()
6771
@test (@which [A11; A21]).module != LinearMaps
6872
A = [A11; A21]
69-
x = rand(10)
73+
x = rand(elty, n)
7074
@test size(L) == size(A)
7175
@test Matrix(L) == Matrix(Lv) == A
7276
@test L * x Lv * x A * x
73-
A = [I; I; I; A11; A11; A11; v v v v v v v v v v]
77+
A = [I; I; I; A11; A11; A11; reduce(hcat, fill(v, n))]
7478
@test (@which [I; I; I; A11; A11; A11; v v v v v v v v v v]).module != LinearMaps
75-
L = @inferred vcat(I, I, I, LinearMap(A11), LinearMap(A11), LinearMap(A11), reduce(hcat, fill(v, 10)))
76-
@test L == [I; I; I; LinearMap(A11); LinearMap(A11); LinearMap(A11); reduce(hcat, fill(v, 10))]
77-
x = rand(elty, 10)
79+
L = @inferred vcat(I, I, I, LinearMap(A11), LinearMap(A11), LinearMap(A11), reduce(hcat, fill(v, n)))
80+
@test L == [I; I; I; LinearMap(A11); LinearMap(A11); LinearMap(A11); reduce(hcat, fill(v, n))]
7881
@test L isa LinearMaps.BlockMap{elty}
7982
@test L * x A * x
80-
A11 = rand(elty, 10, 11)
81-
A21 = rand(elty, 20, 10)
82-
@test_throws DimensionMismatch vcat(LinearMap(A11), LinearMap(A21))
8383
end
84+
A11 = zeros(m, n+1)
85+
A21 = zeros(2m, n)
86+
@test_throws DimensionMismatch vcat(LinearMap(A11), LinearMap(A21))
8487
end
8588

8689
@testset "hvcat" begin
90+
m1 = 2
91+
m2 = 3
92+
n = 3
8793
for elty in (Float32, ComplexF64)
88-
A11 = rand(elty, 10, 10)
89-
A12 = rand(elty, 10, 20)
90-
A21 = rand(elty, 20, 10)
91-
A22 = rand(elty, 20, 20)
94+
A11 = rand(elty, m1, m1)
95+
A12 = ones(elty, m1, m2)
96+
A21 = rand(elty, m2, m1)
97+
A22 = ones(elty, m2, m2)
9298
A = [A11 A12; A21 A22]
9399
@test (@which [A11 A12; A21 A22]).module != LinearMaps
94100
@inferred hvcat((2,2), LinearMap(A11), LinearMap(A12), LinearMap(A21), LinearMap(A22))
@@ -99,7 +105,7 @@ using LinearMaps: FiveArg
99105
@test @inferred(LinearMaps.MulStyle(L)) === FiveArg()
100106
@test @inferred !issymmetric(L)
101107
@test @inferred !ishermitian(L)
102-
x = rand(30)
108+
x = rand(m1+m2)
103109
@test L isa LinearMaps.BlockMap{elty}
104110
@test size(L) == size(A)
105111
@test L * x Lv * x A * x
@@ -110,32 +116,32 @@ using LinearMaps: FiveArg
110116
@inferred hvcat((2,2), I, LinearMap(A12), LinearMap(A21), I)
111117
L = @inferred hvcat((2,2), I, LinearMap(A12), LinearMap(A21), I)
112118
@test L isa LinearMaps.BlockMap{elty}
113-
@test size(L) == (30, 30)
119+
@test size(L) == (m1+m2, m1+m2)
114120
@test Matrix(L) A
115121
@test L * x A * x
116122
y = randn(elty, size(L, 1))
117123
for α in (0, 1, rand(elty)), β in (0, 1, rand(elty))
118124
@test mul!(copy(y), L, x, α, β) y*β .+ A*x*α
119125
end
120-
X = rand(elty, 30, 10)
121-
Y = randn(elty, size(L, 1), 10)
126+
X = rand(elty, m1+m2, n)
127+
Y = randn(elty, size(L, 1), n)
122128
for α in (0, 1, rand(elty)), β in (0, 1, rand(elty))
123129
@test mul!(copy(Y), L, X, α, β) Y*β .+ A*X*α
124130
end
125-
A = rand(elty, 10,10); LA = LinearMap(A)
126-
B = rand(elty, 20,30); LB = LinearMap(B)
131+
A = ones(elty, m1, m1); LA = LinearMap(A)
132+
B = zeros(elty, m2, 3m1); LB = LinearMap(B)
127133
@test [LA LA LA; LB] isa LinearMaps.BlockMap{elty}
128134
@test Matrix([LA LA LA; LB]) [A A A; B]
129135
@test [LB; LA LA LA] isa LinearMaps.BlockMap{elty}
130136
@test Matrix([LB; LA LA LA]) [B; A A A]
131137
@test [I; LA LA LA] isa LinearMaps.BlockMap{elty}
132138
@test Matrix([I; LA LA LA]) [I; A A A]
133-
A12 = LinearMap(rand(elty, 10, 21))
134-
A21 = LinearMap(rand(elty, 20, 10))
135-
@test_throws DimensionMismatch A = [I A12; A21 I]
136-
@test_throws DimensionMismatch A = [I A21; A12 I]
137-
@test_throws DimensionMismatch A = [A12 A12; A21 A21]
138-
@test_throws DimensionMismatch A = [A12 A21; A12 A21]
139+
A12 = LinearMap(zeros(elty, m1, m2+1))
140+
A21 = LinearMap(zeros(elty, m2, m1))
141+
@test_throws DimensionMismatch [I A12; A21 I]
142+
@test_throws DimensionMismatch [I A21; A12 I]
143+
@test_throws DimensionMismatch [A12 A12; A21 A21]
144+
@test_throws DimensionMismatch [A12 A21; A12 A21]
139145

140146
# basic test of "misaligned" blocks
141147
M = ones(elty, 3, 2) # non-square
@@ -199,7 +205,7 @@ using LinearMaps: FiveArg
199205

200206
@testset "block diagonal maps" begin
201207
for elty in (Float32, ComplexF64)
202-
m = 5; n = 6
208+
m = 2; n = 3
203209
M1 = 10*(1:m) .+ (1:(n+1))'; L1 = LinearMap(M1)
204210
M2 = randn(elty, m, n+2); L2 = LinearMap(M2)
205211
M3 = randn(elty, m, n+3); L3 = LinearMap(M3)
@@ -217,7 +223,7 @@ using LinearMaps: FiveArg
217223
Bdv = @inferred LinearMaps.BlockDiagonalMap{elty}([L1, L2, L3, L2, L1])
218224
@test Bdv.maps isa Vector
219225
@test @inferred(LinearMaps.MulStyle(Bd)) === FiveArg()
220-
@test occursin("25×39 LinearMaps.BlockDiagonalMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), Bd))
226+
@test occursin("$(5m)×$(5n+9) LinearMaps.BlockDiagonalMap{$elty}", sprint((t, s) -> show(t, "text/plain", s), Bd))
221227
@test Matrix(Bd) == Md
222228
@test convert(AbstractMatrix, Bd) isa SparseMatrixCSC
223229
@test sparse(Bd) == Md
@@ -227,7 +233,7 @@ using LinearMaps: FiveArg
227233
@test_throws ArgumentError cat(L1, L2, L3, L2, L1; dims=(2,2))
228234
@test Bd == Bdv == Bd2
229235
@test Bd == blockdiag(L1, M2, M3, M2, M1)
230-
@test size(Bd) == (25, 39)
236+
@test size(Bd) == (5m, 5n+9)
231237
@test !issymmetric(Bd)
232238
@test !ishermitian(Bd)
233239
@test (@inferred Bd * x) Bdv * x Md * x
@@ -240,8 +246,8 @@ using LinearMaps: FiveArg
240246
@test mul!(copy(y), Bd, x, α, β) y*β .+ Md*x*α
241247
@test mul!(copy(y), Bdv, x, α, β) y*β .+ Md*x*α
242248
end
243-
X = randn(elty, size(Md, 2), 10)
244-
Y = randn(elty, size(Md, 1), 10)
249+
X = randn(elty, size(Md, 2), 3)
250+
Y = randn(elty, size(Md, 1), 3)
245251
for α in (0, 1, rand(elty)), β in (0, 1, rand(elty))
246252
@test mul!(copy(Y), Bd, X, α, β) Y*β .+ Md*X*α
247253
@test mul!(copy(Y), Bdv, X, α, β) Y*β .+ Md*X*α
@@ -250,7 +256,7 @@ using LinearMaps: FiveArg
250256
end
251257

252258
@testset "function block map" begin
253-
N = 100
259+
N = 5
254260
T = ComplexF64
255261
CS! = LinearMap{T}(cumsum!,
256262
(y, x) -> (copyto!(y, x); reverse!(cumsum!(y, reverse!(y)))), N;
@@ -272,8 +278,11 @@ using LinearMaps: FiveArg
272278
@test mul!(copy(v), transform(L), u, α, β) transform(M)*u*α + v*β
273279
@test mul!(copy(v), transform(LinearMap(L)), u, α, β) transform(M)*u*α + v*β
274280
@test mul!(copy(v), LinearMap(transform(L)), u, α, β) transform(M)*u*α + v*β
275-
bmap = @benchmarkable mul!($(copy(v)), $(transform(L)), $u, $α, $β)
276-
transform != adjoint && @test run(bmap, samples=3).memory < 2sizeof(u)
281+
if transform != adjoint
282+
transL = transform(L)
283+
alloc = @allocated similar(v)
284+
@test (@allocated mul!(v, transL, u, α, β)) <= alloc broken = (L == L2 && α != false)
285+
end
277286
end
278287
end
279288
end

test/functionmap.jl

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Test, LinearMaps, LinearAlgebra, BenchmarkTools
1+
using Test, LinearMaps, LinearAlgebra
22

33
@testset "function maps" begin
44
N = 100
@@ -71,10 +71,12 @@ using Test, LinearMaps, LinearAlgebra, BenchmarkTools
7171
@test @inferred mul!(similar(v), transpose(CS), v) == reverse!(cumsum(reverse(v)))
7272
@test @inferred mul!(similar(v), adjoint(CS), v) == reverse!(cumsum(reverse(v)))
7373
u = similar(v)
74-
b = @benchmarkable mul!($u, $(3*CS!), $v)
75-
@test run(b, samples=3).allocs == 0
76-
b = @benchmarkable mul!($u, $(3*CS!'), $v)
77-
@test run(b, samples=3).allocs == 0
74+
CS!3 = 3*CS!
75+
mul!(u, CS!3, v)
76+
@test (@allocated mul!(u, CS!3, v)) == 0
77+
CS!3t = 3*CS!'
78+
mul!(u, CS!3t, v)
79+
@test (@allocated mul!(u, CS!3t, v)) == 0
7880
u = rand(ComplexF64, 10)
7981
v = rand(ComplexF64, 10)
8082
for α in (false, true, rand(ComplexF64)), β in (false, true, rand(ComplexF64))
@@ -83,8 +85,9 @@ using Test, LinearMaps, LinearAlgebra, BenchmarkTools
8385
@test mul!(copy(v), transform(LinearMap(CS!)), u, α, β) transform(M)*u*α + v*β
8486
@test mul!(copy(v), LinearMap(transform(CS!)), u, α, β) transform(M)*u*α + v*β
8587
if transform != transpose
86-
bm = @benchmarkable mul!($(copy(v)), $(transform(CS!)), $u, $α, $β)
87-
@test run(bm, samples=3).allocs <= 1
88+
transCS! = transform(CS!)
89+
alloc = @allocated similar(v)
90+
@test (@allocated mul!(v, transCS!, u, α, β)) <= alloc
8891
end
8992
end
9093
end

test/linearcombination.jl

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Test, LinearMaps, LinearAlgebra, SparseArrays, BenchmarkTools, Statistics
1+
using Test, LinearMaps, LinearAlgebra, SparseArrays, Statistics
22
using LinearMaps: FiveArg, LinearMapTuple, LinearMapVector
33

44
@testset "linear combinations" begin
@@ -7,8 +7,8 @@ using LinearMaps: FiveArg, LinearMapTuple, LinearMapVector
77
ismutating=true)
88
v = rand(ComplexF64, 10)
99
u = similar(v)
10-
b = @benchmarkable mul!($u, $CS!, $v)
11-
@test run(b, samples=3).allocs == 0
10+
mul!(u, CS!, v)
11+
@test (@allocated mul!(u, CS!, v)) == 0
1212
n = 10
1313
L = @inferred sum(ntuple(_ -> CS!, n))
1414
@test (@inferred sum(L.maps::LinearMapTuple)) == L
@@ -45,10 +45,11 @@ using LinearMaps: FiveArg, LinearMapTuple, LinearMapVector
4545
@test occursin("10×10 $LinearMaps.LinearCombination{$(eltype(L))}", sprint((t, s) -> show(t, "text/plain", s), L+CS!))
4646
@test mul!(u, L, v) n * cumsum(v)
4747
@test mul!(u, Lv, v) n * cumsum(v)
48-
b = @benchmarkable mul!($u, $L, $v, 2, 2)
49-
@test run(b, samples=5).allocs <= 1
50-
b = @benchmarkable mul!($u, $Lv, $v, 2, 2)
51-
@test run(b, samples=5).allocs <= 1
48+
alloc = @allocated similar(u)
49+
mul!(u, L, v, 2, 2)
50+
@test (@allocated mul!(u, L, v, 2, 2)) <= alloc
51+
mul!(u, Lv, v, 2, 2)
52+
@test (@allocated mul!(u, Lv, v, 2, 2)) <= alloc
5253
for α in (false, true, rand(ComplexF64)), β in (false, true, rand(ComplexF64))
5354
for transform in (identity, adjoint, transpose)
5455
@test mul!(copy(u), transform(L), v, α, β) transform(M)*v*α + u*β
@@ -78,20 +79,21 @@ using LinearMaps: FiveArg, LinearMapTuple, LinearMapVector
7879
@test sparse(LC) == Matrix(LC) == A+B
7980
v = rand(ComplexF64, 10)
8081
w = similar(v)
81-
b = @benchmarkable mul!($w, $M, $v)
82-
@test run(b, samples=3).allocs == 0
83-
b = @benchmarkable mul!($w, $LC, $v)
84-
@test run(b, samples=3).allocs == 0
82+
mul!(w, M, v)
83+
@test (@allocated mul!(w, M, v)) == 0
84+
mul!(w, LC, v)
85+
@test (@allocated mul!(w, LC, v)) == 0
8586
for α in (false, true, rand(ComplexF64)), β in (false, true, rand(ComplexF64))
86-
b = @benchmarkable mul!($w, $LC, $v, $α, $β)
87-
@test run(b, samples=3).allocs == 0
88-
b = @benchmarkable mul!($w, $(I + LC), $v, $α, $β)
89-
@test run(b, samples=3).allocs == 0
90-
b = @benchmarkable mul!($w, $(LC + I), $v, $α, $β)
91-
@test run(b, samples=3).allocs == 0
9287
y = rand(ComplexF64, size(v))
93-
@test mul!(copy(y), LC, v, α, β) Matrix(LC)*v*α + y*β
94-
@test mul!(copy(y), LC+I, v, α, β) Matrix(LC + I)*v*α + y*β
88+
MC = Matrix(LC)
89+
@test mul!(copy(y), LC, v, α, β) MC*v*α + y*β
90+
@test mul!(copy(y), LC+I, v, α, β) (MC+I)*v*α + y*β
91+
@test mul!(copy(y), I+LC, v, α, β) (I+MC)*v*α + y*β
92+
@test (@allocated mul!(w, LC, v, α, β)) == 0
93+
ILC = I + LC
94+
@test (@allocated mul!(w, ILC, v, α, β)) == 0
95+
LCI = LC + I
96+
@test (@allocated mul!(w, LCI, v, α, β)) == 0
9597
end
9698
# @test_throws ErrorException LinearMaps.LinearCombination{ComplexF64}((M, N), (1, 2, 3))
9799
@test @inferred size(3M + 2.0N) == size(A)

test/linearmaps.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using Test, LinearMaps, LinearAlgebra, SparseArrays, BenchmarkTools
1+
using Test, LinearMaps, LinearAlgebra, SparseArrays
22

33
@testset "basic functionality" begin
44
A = 2 * rand(ComplexF64, (20, 10)) .- 1

0 commit comments

Comments
 (0)