changeset 1456:f13857f37b8f bugfix/sbp_operators/stencil_return_type

Fix broken tests using mapreduce(f,+,...). Needs to be evaluated for performance
author Jonatan Werpers <jonatan@werpers.com>
date Sun, 26 Nov 2023 22:30:44 +0100
parents d744b01be520
children 9da4ab4fb85e
files src/SbpOperators/stencil.jl test/SbpOperators/stencil_test.jl
diffstat 2 files changed, 20 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/SbpOperators/stencil.jl	Fri Nov 24 21:49:07 2023 +0100
+++ b/src/SbpOperators/stencil.jl	Sun Nov 26 22:30:44 2023 +0100
@@ -69,20 +69,15 @@
 end
 
 Base.@propagate_inbounds @inline function apply_stencil(s::Stencil, v::AbstractVector, i::Int)
-    w = zero(promote_type(eltype(s),eltype(v)))
-    @simd for k ∈ 1:length(s)
-        w += s.weights[k]*v[i + s.range[k]]
+    return mapreduce(+, 1:length(s)) do k
+        s.weights[k]*v[i + s.range[k]]
     end
-
-    return w
 end
 
 Base.@propagate_inbounds @inline function apply_stencil_backwards(s::Stencil, v::AbstractVector, i::Int)
-    w = zero(promote_type(eltype(s),eltype(v)))
-    @simd for k ∈ length(s):-1:1
-        w += s.weights[k]*v[i - s.range[k]]
+    return mapreduce(+, length(s):-1:1) do k
+        s.weights[k]*v[i - s.range[k]]
     end
-    return w
 end
 
 function left_pad(s::Stencil, N)
--- a/test/SbpOperators/stencil_test.jl	Fri Nov 24 21:49:07 2023 +0100
+++ b/test/SbpOperators/stencil_test.jl	Sun Nov 26 22:30:44 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