Mercurial > repos > public > sbplib_julia
diff LazyTensors/test/runtests.jl @ 291:0f94dc29c4bf
Merge in branch boundary_conditions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 22 Jun 2020 21:43:05 +0200 |
parents | d6edd37551ea |
children | 277dff5b071a |
line wrap: on
line diff
--- a/LazyTensors/test/runtests.jl Wed Jun 26 15:07:47 2019 +0200 +++ b/LazyTensors/test/runtests.jl Mon Jun 22 21:43:05 2020 +0200 @@ -1,12 +1,13 @@ using Test using LazyTensors +using RegionIndices @testset "Generic Mapping methods" begin struct DummyMapping{T,R,D} <: TensorMapping{T,R,D} end - LazyTensors.apply(m::DummyMapping{T,R,D}, v, i) where {T,R,D} = :apply + LazyTensors.apply(m::DummyMapping{T,R,D}, v, i::NTuple{R,Index{<:Region}}) where {T,R,D} = :apply @test range_dim(DummyMapping{Int,2,3}()) == 2 @test domain_dim(DummyMapping{Int,2,3}()) == 3 - @test apply(DummyMapping{Int,2,3}(), zeros(Int, (0,0,0)),0) == :apply + @test apply(DummyMapping{Int,2,3}(), zeros(Int, (0,0,0)),(Index{Unknown}(0),Index{Unknown}(0))) == :apply end @testset "Generic Operator methods" begin @@ -18,17 +19,19 @@ @testset "Mapping transpose" begin struct DummyMapping{T,R,D} <: TensorMapping{T,R,D} end - LazyTensors.apply(m::DummyMapping{T,R,D}, v, i) where {T,R,D} = :apply - LazyTensors.apply_transpose(m::DummyMapping{T,R,D}, v, i) where {T,R,D} = :apply_transpose + LazyTensors.apply(m::DummyMapping{T,R,D}, v, I::NTuple{R,Index{<:Region}}) where {T,R,D} = :apply + LazyTensors.apply_transpose(m::DummyMapping{T,R,D}, v, I::NTuple{D,Index{<:Region}}) where {T,R,D} = :apply_transpose - LazyTensors.range_size(m::DummyMapping{T,R,D}, domain_size) where {T,R,D} = :range_size - LazyTensors.domain_size(m::DummyMapping{T,R,D}, range_size) where {T,R,D} = :domain_size + LazyTensors.range_size(m::DummyMapping{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D} = :range_size + LazyTensors.domain_size(m::DummyMapping{T,R,D}, range_size::NTuple{R,Integer}) where {T,R,D} = :domain_size m = DummyMapping{Float64,2,3}() + I = Index{Unknown}(0) + @test m' isa TensorMapping{Float64, 3,2} @test m'' == m - @test apply(m',zeros(Float64,(0,0)),0) == :apply_transpose - @test apply(m'',zeros(Float64,(0,0,0)),0) == :apply - @test apply_transpose(m', zeros(Float64,(0,0,0)),0) == :apply + @test apply(m',zeros(Float64,(0,0)), (I,I,I)) == :apply_transpose + @test apply(m'',zeros(Float64,(0,0,0)),(I,I)) == :apply + @test apply_transpose(m', zeros(Float64,(0,0,0)),(I,I)) == :apply @test range_size(m', (0,0)) == :domain_size @test domain_size(m', (0,0,0)) == :range_size @@ -37,24 +40,53 @@ @testset "TensorApplication" begin struct DummyMapping{T,R,D} <: TensorMapping{T,R,D} end - LazyTensors.apply(m::DummyMapping{T,R,D}, v, i) where {T,R,D} = (:apply,v,i) - LazyTensors.apply_transpose(m::DummyMapping{T,R,D}, v, i) where {T,R,D} = :apply_transpose - - LazyTensors.range_size(m::DummyMapping{T,R,D}, domain_size) where {T,R,D} = 2 .* domain_size - LazyTensors.domain_size(m::DummyMapping{T,R,D}, range_size) where {T,R,D} = range_size.÷2 + LazyTensors.apply(m::DummyMapping{T,R,D}, v, i::NTuple{R,Index{<:Region}}) where {T,R,D} = (:apply,v,i) + LazyTensors.range_size(m::DummyMapping{T,R,D}, domain_size::NTuple{D,Integer}) where {T,R,D} = 2 .* domain_size + LazyTensors.domain_size(m::DummyMapping{T,R,D}, range_size::NTuple{R,Integer}) where {T,R,D} = range_size.÷2 m = DummyMapping{Int, 1, 1}() v = [0,1,2] @test m*v isa AbstractVector{Int} @test size(m*v) == 2 .*size(v) - @test (m*v)[0] == (:apply,v,0) + @test (m*v)[Index{Upper}(0)] == (:apply,v,(Index{Upper}(0),)) + @test (m*v)[0] == (:apply,v,(Index{Unknown}(0),)) @test m*m*v isa AbstractVector{Int} - @test (m*m*v)[1] == (:apply,m*v,1) - @test (m*m*v)[3] == (:apply,m*v,3) - @test (m*m*v)[6] == (:apply,m*v,6) + @test (m*m*v)[Index{Upper}(1)] == (:apply,m*v,(Index{Upper}(1),)) + @test (m*m*v)[1] == (:apply,m*v,(Index{Unknown}(1),)) + @test (m*m*v)[Index{Interior}(3)] == (:apply,m*v,(Index{Interior}(3),)) + @test (m*m*v)[3] == (:apply,m*v,(Index{Unknown}(3),)) + @test (m*m*v)[Index{Lower}(6)] == (:apply,m*v,(Index{Lower}(6),)) + @test (m*m*v)[6] == (:apply,m*v,(Index{Unknown}(6),)) @test_broken BoundsError == (m*m*v)[0] @test_broken BoundsError == (m*m*v)[7] + + m = DummyMapping{Int, 2, 1}() + @test_throws MethodError m*ones(Int,2,2) + @test_throws MethodError m*m*v + + m = DummyMapping{Float64, 2, 2}() + v = ones(3,3) + I = (Index{Lower}(1),Index{Interior}(2)); + @test size(m*v) == 2 .*size(v) + @test (m*v)[I] == (:apply,v,I) + + struct ScalingOperator{T,D} <: TensorOperator{T,D} + λ::T + end + + LazyTensors.apply(m::ScalingOperator{T,D}, v, I::NTuple{D, Index}) where {T,D} = m.λ*v[I] + + m = ScalingOperator{Int,1}(2) + v = [1,2,3] + @test m*v isa AbstractVector + @test m*v == [2,4,6] + + m = ScalingOperator{Int,2}(2) + v = [[1 2];[3 4]] + @test m*v == [[2 4];[6 8]] + I = (Index{Upper}(2),Index{Lower}(1)) + @test (m*v)[I] == 6 end @testset "TensorMapping binary operations" begin @@ -62,7 +94,7 @@ λ::T end - LazyTensors.apply(m::ScalarMapping{T,R,D}, v, i) where {T,R,D} = m.λ*v[i] + LazyTensors.apply(m::ScalarMapping{T,R,D}, v, I::Tuple{Index{<:Region}}) where {T,R,D} = m.λ*v[I...] LazyTensors.range_size(m::ScalarMapping, domain_size) = domain_size LazyTensors.domain_size(m::ScalarMapping, range_sizes) = range_sizes @@ -70,7 +102,6 @@ B = ScalarMapping{Float64,1,1}(3.0) v = [1.1,1.2,1.3] - for i ∈ eachindex(v) @test ((A+B)*v)[i] == 2*v[i] + 3*v[i] end @@ -88,24 +119,45 @@ data::T1 end Base.size(v::DummyArray) = size(v.data) - Base.getindex(v::DummyArray, I...) = v.data[I...] + Base.getindex(v::DummyArray{T,D}, I::Vararg{Int,D}) where {T,D} = v.data[I...] # Test lazy operations v1 = [1, 2.3, 4] v2 = [1., 2, 3] - r_add = v1 .+ v2 - r_sub = v1 .- v2 - r_times = v1 .* v2 - r_div = v1 ./ v2 + s = 3.4 + r_add_v = v1 .+ v2 + r_sub_v = v1 .- v2 + r_times_v = v1 .* v2 + r_div_v = v1 ./ v2 + r_add_s = v1 .+ s + r_sub_s = v1 .- s + r_times_s = v1 .* s + r_div_s = v1 ./ s @test isa(v1 +̃ v2, LazyArray) @test isa(v1 -̃ v2, LazyArray) @test isa(v1 *̃ v2, LazyArray) @test isa(v1 /̃ v2, LazyArray) + @test isa(v1 +̃ s, LazyArray) + @test isa(v1 -̃ s, LazyArray) + @test isa(v1 *̃ s, LazyArray) + @test isa(v1 /̃ s, LazyArray) + @test isa(s +̃ v1, LazyArray) + @test isa(s -̃ v1, LazyArray) + @test isa(s *̃ v1, LazyArray) + @test isa(s /̃ v1, LazyArray) for i ∈ eachindex(v1) - @test (v1 +̃ v2)[i] == r_add[i] - @test (v1 -̃ v2)[i] == r_sub[i] - @test (v1 *̃ v2)[i] == r_times[i] - @test (v1 /̃ v2)[i] == r_div[i] + @test (v1 +̃ v2)[i] == r_add_v[i] + @test (v1 -̃ v2)[i] == r_sub_v[i] + @test (v1 *̃ v2)[i] == r_times_v[i] + @test (v1 /̃ v2)[i] == r_div_v[i] + @test (v1 +̃ s)[i] == r_add_s[i] + @test (v1 -̃ s)[i] == r_sub_s[i] + @test (v1 *̃ s)[i] == r_times_s[i] + @test (v1 /̃ s)[i] == r_div_s[i] + @test (s +̃ v1)[i] == r_add_s[i] + @test (s -̃ v1)[i] == -r_sub_s[i] + @test (s *̃ v1)[i] == r_times_s[i] + @test (s /̃ v1)[i] == 1/r_div_s[i] end @test_throws BoundsError (v1 +̃ v2)[4] v2 = [1., 2, 3, 4] @@ -120,8 +172,8 @@ @test isa(v1 - v2, LazyArray) @test isa(v2 - v1, LazyArray) for i ∈ eachindex(v2) - @test (v1 + v2)[i] == (v2 + v1)[i] == r_add[i] - @test (v1 - v2)[i] == -(v2 - v1)[i] == r_sub[i] + @test (v1 + v2)[i] == (v2 + v1)[i] == r_add_v[i] + @test (v1 - v2)[i] == -(v2 - v1)[i] == r_sub_v[i] end @test_throws BoundsError (v1 + v2)[4] v2 = [1., 2, 3, 4]