Mercurial > repos > public > sbplib_julia
diff test/LazyTensors/lazy_tensor_operations_test.jl @ 1954:b0915f43b122 feature/sbp_operators/laplace_curvilinear
Merge feature/grids/geometry_functions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sat, 08 Feb 2025 09:38:58 +0100 |
parents | b12e28a03b2e |
children |
line wrap: on
line diff
--- a/test/LazyTensors/lazy_tensor_operations_test.jl Sat Feb 08 09:35:13 2025 +0100 +++ b/test/LazyTensors/lazy_tensor_operations_test.jl Sat Feb 08 09:38:58 2025 +0100 @@ -22,7 +22,6 @@ LazyTensors.domain_size(m::SizeDoublingMapping) = m.domain_size - @testset "Mapping transpose" begin m = TransposableDummyMapping{Float64,2,3}() @test m' isa LazyTensor{Float64, 3,2} @@ -128,8 +127,35 @@ end end +@testset "TensorNegation" begin + A = rand(2,3) + B = rand(3,4) -@testset "LazyTensor binary operations" begin + Ã = DenseTensor(A, (1,), (2,)) + B̃ = DenseTensor(B, (1,), (2,)) + + @test -Ã isa TensorNegation + + v = rand(3) + @test (-Ã)*v == -(Ã*v) + + v = rand(4) + @test (-B̃)*v == -(B̃*v) + + v = rand(2) + @test (-Ã)'*v == -(Ã'*v) + + v = rand(3) + @test (-B̃)'*v == -(B̃'*v) + + @test domain_size(-Ã) == (3,) + @test domain_size(-B̃) == (4,) + + @test range_size(-Ã) == (2,) + @test range_size(-B̃) == (3,) +end + +@testset "TensorSum" begin A = ScalingTensor(2.0, (3,)) B = ScalingTensor(3.0, (3,)) @@ -142,6 +168,10 @@ @test ((A-B)*v)[i] == 2*v[i] - 3*v[i] end + for i ∈ eachindex(v) + @test ((A+B)'*v)[i] == 2*v[i] + 3*v[i] + end + @test range_size(A+B) == range_size(A) == range_size(B) @test domain_size(A+B) == domain_size(A) == domain_size(B) @@ -156,6 +186,30 @@ @test_throws RangeSizeMismatch ScalingTensor(2.0, (2,)) + SizeDoublingMapping{Float64,1,1}((2,)) @test_throws RangeSizeMismatch SizeDoublingMapping{Float64,1,1}((2,)) + ScalingTensor(2.0, (2,)) end + + @testset "Chained operators" begin + A = ScalingTensor(1.0, (3,)) + B = ScalingTensor(2.0, (3,)) + C = ScalingTensor(3.0, (3,)) + D = ScalingTensor(4.0, (3,)) + + @test A+B+C+D isa TensorSum + @test length((A+B+C+D).tms) == 4 + + + @test A+B-C+D isa TensorSum + @test length((A+B-C+D).tms) == 4 + + v = rand(3) + @test (A+B-C+D)*v == 1v + 2v - 3v + 4v + + + @test -A-B-C-D isa TensorSum + @test length((-A-B-C-D).tms) == 4 + + v = rand(3) + @test (-A-B-C-D)*v == -1v - 2v - 3v - 4v + end end