Skip to content

Commit be0defc

Browse files
committed
Reduce allocations in triangular tests
1 parent fd115f4 commit be0defc

File tree

1 file changed

+47
-37
lines changed

1 file changed

+47
-37
lines changed

test/testtriag.jl

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,16 @@ function test_triangular(elty1_types)
3131
@test full!(copy(A1)) == A1
3232

3333
# similar
34-
@test isa(similar(A1), t1)
35-
@test eltype(similar(A1)) == elty1
36-
@test isa(similar(A1, Int), t1)
37-
@test eltype(similar(A1, Int)) == Int
34+
simA1 = similar(A1)
35+
@test isa(simA1, t1)
36+
@test eltype(simA1) == elty1
37+
simA1Int = similar(A1, Int)
38+
@test isa(simA1Int, t1)
39+
@test eltype(simA1Int) == Int
3840
@test isa(similar(A1, (3, 2)), Matrix{elty1})
3941
@test isa(similar(A1, Int, (3, 2)), Matrix{Int})
4042

4143
#copyto!
42-
simA1 = similar(A1)
4344
copyto!(simA1, A1)
4445
@test simA1 == A1
4546

@@ -119,23 +120,28 @@ function test_triangular(elty1_types)
119120
@test tril(A1, 0) == A1
120121
@test tril(A1, -1) == LowerTriangular(tril(M1, -1))
121122
@test tril(A1, 1) == t1(tril(tril(M1, 1)))
122-
@test tril(A1, -n - 2) == zeros(size(A1))
123+
A1tril = tril(A1, -n - 2)
124+
@test iszero(A1tril) && size(A1tril) == size(A1)
123125
@test tril(A1, n) == A1
124-
@test triu(A1, 0) == t1(diagm(0 => diag(A1)))
126+
@test triu(A1, 0) == t1(Diagonal(diagview(A1)))
125127
@test triu(A1, -1) == t1(tril(triu(A1.data, -1)))
126-
@test triu(A1, 1) == zeros(size(A1)) # or just @test iszero(triu(A1,1))?
128+
A1triu = triu(A1, 1)
129+
@test iszero(A1triu) && size(A1triu) == size(A1)
127130
@test triu(A1, -n) == A1
128-
@test triu(A1, n + 2) == zeros(size(A1))
131+
A1triu = triu(A1, n + 2)
132+
@test iszero(A1triu) && size(A1triu) == size(A1)
129133
else
130134
@test triu(A1, 0) == A1
131135
@test triu(A1, 1) == UpperTriangular(triu(M1, 1))
132136
@test triu(A1, -1) == t1(triu(triu(M1, -1)))
133137
@test triu(A1, -n) == A1
134-
@test triu(A1, n + 2) == zeros(size(A1))
135-
@test tril(A1, 0) == t1(diagm(0 => diag(A1)))
138+
A1triu = triu(A1, n + 2)
139+
@test iszero(A1triu) && size(A1triu) == size(A1)
140+
@test tril(A1, 0) == t1(Diagonal(diagview(A1)))
136141
@test tril(A1, 1) == t1(triu(tril(A1.data, 1)))
137-
@test tril(A1, -1) == zeros(size(A1)) # or just @test iszero(tril(A1,-1))?
138-
@test tril(A1, -n - 2) == zeros(size(A1))
142+
A1tril = tril(A1, -1)
143+
@test iszero(A1tril) && size(A1tril) == size(A1)
144+
@test iszero(A1tril) && size(A1tril) == size(A1)
139145
@test tril(A1, n) == A1
140146
end
141147

@@ -173,7 +179,8 @@ function test_triangular(elty1_types)
173179

174180
# zero
175181
if A1 isa UpperTriangular || A1 isa LowerTriangular
176-
@test zero(A1) == zero(parent(A1))
182+
Z = zero(A1)
183+
@test iszero(Z) && size(Z) == size(A1)
177184
end
178185

179186
# Unary operations
@@ -426,46 +433,49 @@ function test_triangular(elty1_types)
426433
mul!(C, A1, Tri)
427434
@test C M1 * Tri
428435

436+
bcol1 = B[:, 1]
437+
429438
# Triangular-dense Matrix/vector multiplication
430-
@test A1 * B[:, 1] M1 * B[:, 1]
439+
@test A1 * bcol1 M1 * bcol1
431440
@test A1 * B M1 * B
432-
@test transpose(A1) * B[:, 1] transpose(M1) * B[:, 1]
433-
@test A1'B[:, 1] M1'B[:, 1]
441+
@test transpose(A1) * bcol1 transpose(M1) * bcol1
442+
@test A1'bcol1 M1'bcol1
434443
@test transpose(A1) * B transpose(M1) * B
435444
@test A1'B M1'B
436445
@test A1 * transpose(B) M1 * transpose(B)
437446
@test adjoint(A1) * transpose(B) M1' * transpose(B)
438447
@test transpose(A1) * adjoint(B) transpose(M1) * adjoint(B)
439448
@test A1 * B' M1 * B'
440449
@test B * A1 B * M1
441-
@test transpose(B[:, 1]) * A1 transpose(B[:, 1]) * M1
442-
@test B[:, 1]'A1 B[:, 1]'M1
450+
@test transpose(bcol1) * A1 transpose(bcol1) * M1
451+
@test bcol1'A1 bcol1'M1
443452
@test transpose(B) * A1 transpose(B) * M1
444453
@test transpose(B) * adjoint(A1) transpose(B) * M1'
445454
@test adjoint(B) * transpose(A1) adjoint(B) * transpose(M1)
446455
@test B'A1 B'M1
447456
@test B * transpose(A1) B * transpose(M1)
448457
@test B * A1' B * M1'
449-
@test transpose(B[:, 1]) * transpose(A1) transpose(B[:, 1]) * transpose(M1)
450-
@test B[:, 1]'A1' B[:, 1]'M1'
458+
@test transpose(bcol1) * transpose(A1) transpose(bcol1) * transpose(M1)
459+
@test bcol1'A1' bcol1'M1'
451460
@test transpose(B) * transpose(A1) transpose(B) * transpose(M1)
452461
@test B'A1' B'M1'
453462

454463
if eltyB == elty1
455-
@test mul!(similar(B), A1, B) M1 * B
456-
@test mul!(similar(B), A1, adjoint(B)) M1 * B'
457-
@test mul!(similar(B), A1, transpose(B)) M1 * transpose(B)
458-
@test mul!(similar(B), adjoint(A1), adjoint(B)) M1' * B'
459-
@test mul!(similar(B), transpose(A1), transpose(B)) transpose(M1) * transpose(B)
460-
@test mul!(similar(B), transpose(A1), adjoint(B)) transpose(M1) * B'
461-
@test mul!(similar(B), adjoint(A1), transpose(B)) M1' * transpose(B)
462-
@test mul!(similar(B), adjoint(A1), B) M1' * B
463-
@test mul!(similar(B), transpose(A1), B) transpose(M1) * B
464+
Bsim = similar(B)
465+
@test mul!(Bsim, A1, B) M1 * B
466+
@test mul!(Bsim, A1, adjoint(B)) M1 * B'
467+
@test mul!(Bsim, A1, transpose(B)) M1 * transpose(B)
468+
@test mul!(Bsim, adjoint(A1), adjoint(B)) M1' * B'
469+
@test mul!(Bsim, transpose(A1), transpose(B)) transpose(M1) * transpose(B)
470+
@test mul!(Bsim, transpose(A1), adjoint(B)) transpose(M1) * B'
471+
@test mul!(Bsim, adjoint(A1), transpose(B)) M1' * transpose(B)
472+
@test mul!(Bsim, adjoint(A1), B) M1' * B
473+
@test mul!(Bsim, transpose(A1), B) transpose(M1) * B
464474
# test also vector methods
465-
B1 = vec(B[1, :])
466-
@test mul!(similar(B1), A1, B1) M1 * B1
467-
@test mul!(similar(B1), adjoint(A1), B1) M1' * B1
468-
@test mul!(similar(B1), transpose(A1), B1) transpose(M1) * B1
475+
bcol1sim = similar(bcol1)
476+
@test mul!(bcol1sim, A1, bcol1) M1 * bcol1
477+
@test mul!(bcol1sim, adjoint(A1), bcol1) M1' * bcol1
478+
@test mul!(bcol1sim, transpose(A1), bcol1) transpose(M1) * bcol1
469479
end
470480
#error handling
471481
Ann, Bmm, bm = A1, Matrix{eltyB}(undef, n + 1, n + 1), Vector{eltyB}(undef, n + 1)
@@ -477,10 +487,10 @@ function test_triangular(elty1_types)
477487
@test_throws DimensionMismatch rmul!(Bmm, transpose(Ann))
478488

479489
# ... and division
480-
@test A1 \ B[:, 1] M1 \ B[:, 1]
490+
@test A1 \ bcol1 M1 \ bcol1
481491
@test A1 \ B M1 \ B
482-
@test transpose(A1) \ B[:, 1] transpose(M1) \ B[:, 1]
483-
@test A1' \ B[:, 1] M1' \ B[:, 1]
492+
@test transpose(A1) \ bcol1 transpose(M1) \ bcol1
493+
@test A1' \ bcol1 M1' \ bcol1
484494
@test transpose(A1) \ B transpose(M1) \ B
485495
@test A1' \ B M1' \ B
486496
@test A1 \ transpose(B) M1 \ transpose(B)

0 commit comments

Comments
 (0)