changeset 1151:56bc2c6a17fd refactor/sbpoperators/inflation

Fix tests after review comment
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 21 Oct 2022 23:07:30 +0200
parents 58cb7cb02d9a
children f1bb1b6d85dd
files test/SbpOperators/volumeops/volume_operator_test.jl
diffstat 1 files changed, 47 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/test/SbpOperators/volumeops/volume_operator_test.jl	Fri Oct 21 22:11:04 2022 +0200
+++ b/test/SbpOperators/volumeops/volume_operator_test.jl	Fri Oct 21 23:07:30 2022 +0200
@@ -10,13 +10,12 @@
 import Sbplib.SbpOperators.odd
 import Sbplib.SbpOperators.even
 
-# REVIEW: Remove the commented tests for 2D (it is tested in the user code), but
-# change testset Regions and testset Inferred, to test the 1D operators.
 
 @testset "VolumeOperator" begin
     inner_stencil = CenteredStencil(1/4, 2/4, 1/4)
-    closure_stencils = (Stencil(1/2, 1/2; center=1), Stencil(0.,1.; center=2))
+    closure_stencils = (Stencil(1/2, 1/2; center=1), Stencil(2.,1.; center=2))
     g = EquidistantGrid(11,0.,1.)
+
     @testset "Constructors" begin
         op = VolumeOperator(inner_stencil,closure_stencils,(11,),even)
         @test op == VolumeOperator(g,inner_stencil,closure_stencils,even)
@@ -28,55 +27,56 @@
         @test range_size(op) == domain_size(op) == size(g)
     end
 
-    # op_x = volume_operator(g_2D,inner_stencil,closure_stencils,even,1)
-    # op_y = volume_operator(g_2D,inner_stencil,closure_stencils,odd,2)
-    # v = zeros(size(g_2D))
-    # Nx = size(g_2D)[1]
-    # Ny = size(g_2D)[2]
-    # for i = 1:Nx
-    #     v[i,:] .= i
-    # end
-    # rx = copy(v)
-    # rx[1,:] .= 1.5
-    # rx[Nx,:] .= (2*Nx-1)/2
-    # ry = copy(v)
-    # ry[:,Ny-1:Ny] = -v[:,Ny-1:Ny]
+
+    op_even = VolumeOperator(g, inner_stencil, closure_stencils, even)
+    op_odd =  VolumeOperator(g, inner_stencil, closure_stencils, odd)
+
+    N = size(g)[1]
+    v = rand(N)
+
+    r_even = copy(v)
+    r_odd  = copy(v)
+
+    r_even[1] = (v[1] + v[2])/2
+    r_odd[1]  = (v[1] + v[2])/2
 
-    # @testset "Application" begin
-    #     @test op_x*v ≈ rx rtol = 1e-14
-    #     @test op_y*v ≈ ry rtol = 1e-14
+    r_even[2] = 2v[1] + v[2]
+    r_odd[2]  = 2v[1] + v[2]
 
-    #     @test (op_x*rand(ComplexF64,size(g_2D)))[2,2] isa ComplexF64
-    # end
+    for i ∈ 3:N-2
+        r_even[i] = (v[i-1] + 2v[i] + v[i+1])/4
+        r_odd[i]  = (v[i-1] + 2v[i] + v[i+1])/4
+    end
+
+    r_even[N-1] =  v[N-1] + 2v[N]
+    r_odd[N-1]  = -v[N-1] - 2v[N]
+
+    r_even[N] =  (v[N-1] + v[N])/2
+    r_odd[N]  = -(v[N-1] + v[N])/2
 
-    # @testset "Regions" begin
-    #     @test (op_x*v)[Index(1,Lower),Index(3,Interior)] ≈ rx[1,3] rtol = 1e-14
-    #     @test (op_x*v)[Index(2,Lower),Index(3,Interior)] ≈ rx[2,3] rtol = 1e-14
-    #     @test (op_x*v)[Index(6,Interior),Index(3,Interior)] ≈ rx[6,3] rtol = 1e-14
-    #     @test (op_x*v)[Index(10,Upper),Index(3,Interior)] ≈ rx[10,3] rtol = 1e-14
-    #     @test (op_x*v)[Index(11,Upper),Index(3,Interior)] ≈ rx[11,3] rtol = 1e-14
 
-    #     @test_throws BoundsError (op_x*v)[Index(3,Lower),Index(3,Interior)]
-    #     @test_throws BoundsError (op_x*v)[Index(9,Upper),Index(3,Interior)]
+    @testset "Application" begin
+        @test op_even*v ≈ r_even
+        @test op_odd*v  ≈ r_odd
 
-    #     @test (op_y*v)[Index(3,Interior),Index(1,Lower)] ≈ ry[3,1] rtol = 1e-14
-    #     @test (op_y*v)[Index(3,Interior),Index(2,Lower)] ≈ ry[3,2] rtol = 1e-14
-    #     @test (op_y*v)[Index(3,Interior),Index(6,Interior)] ≈ ry[3,6] rtol = 1e-14
-    #     @test (op_y*v)[Index(3,Interior),Index(11,Upper)] ≈ ry[3,11] rtol = 1e-14
-    #     @test (op_y*v)[Index(3,Interior),Index(12,Upper)] ≈ ry[3,12] rtol = 1e-14
+        @test (op_even*rand(ComplexF64,size(g)))[2] isa ComplexF64
+    end
 
-    #     @test_throws BoundsError (op_y*v)[Index(3,Interior),Index(10,Upper)]
-    #     @test_throws BoundsError (op_y*v)[Index(3,Interior),Index(3,Lower)]
-    # end
+    @testset "Regions" begin
+        @test (op_even*v)[Index(1,Lower)]    ≈ r_even[1]
+        @test (op_even*v)[Index(2,Lower)]    ≈ r_even[2]
+        @test (op_even*v)[Index(6,Interior)] ≈ r_even[6]
+        @test (op_even*v)[Index(10,Upper)]   ≈ r_even[10]
+        @test (op_even*v)[Index(11,Upper)]   ≈ r_even[11]
 
-    # @testset "Inferred" begin
-    #     @test_skip @inferred apply(op_x, v,1,1)
-    #     @inferred apply(op_x, v, Index(1,Lower),Index(1,Lower))
-    #     @inferred apply(op_x, v, Index(6,Interior),Index(1,Lower))
-    #     @inferred apply(op_x, v, Index(11,Upper),Index(1,Lower))
-    #     @test_skip @inferred apply(op_y, v,1,1)
-    #     @inferred apply(op_y, v, Index(1,Lower),Index(1,Lower))
-    #     @inferred apply(op_y, v, Index(1,Lower),Index(6,Interior))
-    #     @inferred apply(op_y, v, Index(1,Lower),Index(11,Upper))
-    # end
+        @test_throws BoundsError (op_even*v)[Index(3,Lower)]
+        @test_throws BoundsError (op_even*v)[Index(9,Upper)]
+    end
+
+    @testset "Inferred" begin
+        @inferred apply(op_even, v, 1)
+        @inferred apply(op_even, v, Index(1,Lower))
+        @inferred apply(op_even, v, Index(6,Interior))
+        @inferred apply(op_even, v, Index(11,Upper))
+    end
 end