Mercurial > repos > public > sbplib_julia
changeset 1447:6baed7b081f2 bugfix/sbp_operators/stencil_return_type
Fix broken test by performing an actual multiplication and passing it to typeof. Needs to be evaluated for performance
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 24 Nov 2023 23:02:48 +0100 |
parents | d744b01be520 |
children | 0eee3a4140a6 |
files | src/SbpOperators/stencil.jl test/SbpOperators/stencil_test.jl |
diffstat | 2 files changed, 20 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/SbpOperators/stencil.jl Fri Nov 24 21:49:07 2023 +0100 +++ b/src/SbpOperators/stencil.jl Fri Nov 24 23:02:48 2023 +0100 @@ -69,7 +69,8 @@ end Base.@propagate_inbounds @inline function apply_stencil(s::Stencil, v::AbstractVector, i::Int) - w = zero(promote_type(eltype(s),eltype(v))) + T = typeof(s.weights[1]*v[i]) + w = zero(T) @simd for k ∈ 1:length(s) w += s.weights[k]*v[i + s.range[k]] end @@ -78,7 +79,8 @@ end Base.@propagate_inbounds @inline function apply_stencil_backwards(s::Stencil, v::AbstractVector, i::Int) - w = zero(promote_type(eltype(s),eltype(v))) + T = typeof(s.weights[1]*v[i]) + w = zero(T) @simd for k ∈ length(s):-1:1 w += s.weights[k]*v[i - s.range[k]] end
--- a/test/SbpOperators/stencil_test.jl Fri Nov 24 21:49:07 2023 +0100 +++ b/test/SbpOperators/stencil_test.jl Fri Nov 24 23:02:48 2023 +0100 @@ -72,24 +72,24 @@ v = [@SVector[1, 2], @SVector[3, 4], @SVector[5, 6], @SVector[7, 8]] s = Stencil(1,2, center = 1) - @test_broken apply_stencil(s,v,1) == @SVector[7, 10] - @test_broken apply_stencil_backwards(s,v,3) == @SVector[11, 14] - @test_broken apply_stencil(s,v,1) isa SVector{2, Int} - @test_broken apply_stencil_backwards(s,v,3) isa SVector{2, Int} + @test apply_stencil(s,v,1) == @SVector[7, 10] + @test apply_stencil_backwards(s,v,3) == @SVector[11, 14] + @test apply_stencil(s,v,1) isa SVector{2, Int} + @test apply_stencil_backwards(s,v,3) isa SVector{2, Int} v = [@SVector[1., 2.], @SVector[3., 4.], @SVector[5., 6.], @SVector[7., 8.]] s = Stencil(1,2, center = 1) - @test_broken apply_stencil(s,v,1) == @SVector[7., 10.] - @test_broken apply_stencil_backwards(s,v,3) == @SVector[11., 14.] - @test_broken apply_stencil(s,v,1) isa SVector{2, Float64} - @test_broken apply_stencil_backwards(s,v,3) isa SVector{2, Float64} + @test apply_stencil(s,v,1) == @SVector[7., 10.] + @test apply_stencil_backwards(s,v,3) == @SVector[11., 14.] + @test apply_stencil(s,v,1) isa SVector{2, Float64} + @test apply_stencil_backwards(s,v,3) isa SVector{2, Float64} v = [@SVector[1, 2], @SVector[3, 4], @SVector[5, 6], @SVector[7, 8]] s = Stencil(1.,2., center = 1) - @test_broken apply_stencil(s,v,1) == @SVector[7., 10.] - @test_broken apply_stencil_backwards(s,v,3) == @SVector[11., 14.] - @test_broken apply_stencil(s,v,1) isa SVector{2, Float64} - @test_broken apply_stencil_backwards(s,v,3) isa SVector{2, Float64} + @test apply_stencil(s,v,1) == @SVector[7., 10.] + @test apply_stencil_backwards(s,v,3) == @SVector[11., 14.] + @test apply_stencil(s,v,1) isa SVector{2, Float64} + @test apply_stencil_backwards(s,v,3) isa SVector{2, Float64} end @testset "type stability" begin @@ -220,10 +220,10 @@ ns = NestedStencil((-1.,1.,0.),(-1.,0.,1.),(0.,-2.,2.), center=2) c = [ 1, 3, 6, 10] v = [@SVector[1, 2], @SVector[3, 4], @SVector[5, 6], @SVector[7, 8]] - @test_broken SbpOperators.apply_stencil(ns, c, v, 2) isa SVector{2,Float64} - @test_broken SbpOperators.apply_stencil(ns, c, v, 2) == 2v[1] + 5v[2] + 6v[3] - @test_broken SbpOperators.apply_stencil_backwards(ns, c, v, 2) isa SVector{2,Float64} - @test_broken SbpOperators.apply_stencil_backwards(ns, c, v, 2) == -4v[1] - 5v[2] - 3v[3] + @test SbpOperators.apply_stencil(ns, c, v, 2) isa SVector{2,Float64} + @test SbpOperators.apply_stencil(ns, c, v, 2) == 2v[1] + 5v[2] + 6v[3] + @test SbpOperators.apply_stencil_backwards(ns, c, v, 2) isa SVector{2,Float64} + @test SbpOperators.apply_stencil_backwards(ns, c, v, 2) == -4v[1] - 5v[2] - 3v[3] end @testset "type stability" begin