Mercurial > repos > public > sbplib_julia
comparison test/SbpOperators/stencil_test.jl @ 1553:f1eacb923f45
Merge bugfix/sbp_operators/stencil_return_type
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sat, 13 Apr 2024 23:44:56 +0200 |
parents | 4f79ab676ebc |
children | 471a948cd2b2 |
comparison
equal
deleted
inserted
replaced
1536:5193e6cd6c6a | 1553:f1eacb923f45 |
---|---|
1 using Test | 1 using Test |
2 using Sbplib.SbpOperators | 2 using Sbplib.SbpOperators |
3 using StaticArrays | |
3 import Sbplib.SbpOperators.Stencil | 4 import Sbplib.SbpOperators.Stencil |
4 import Sbplib.SbpOperators.NestedStencil | 5 import Sbplib.SbpOperators.NestedStencil |
5 import Sbplib.SbpOperators.scale | 6 import Sbplib.SbpOperators.scale |
7 import Sbplib.SbpOperators: apply_stencil, apply_stencil_backwards | |
6 | 8 |
7 @testset "Stencil" begin | 9 @testset "Stencil" begin |
8 s = Stencil(-2:2, (1.,2.,2.,3.,4.)) | 10 s = Stencil(-2:2, (1.,2.,2.,3.,4.)) |
9 @test s isa Stencil{Float64, 5} | 11 @test s isa Stencil{Float64, 5} |
10 | 12 |
40 @test Stencil(1,2//2; center = 1) isa Stencil{Rational{Int64}, 2} | 42 @test Stencil(1,2//2; center = 1) isa Stencil{Rational{Int64}, 2} |
41 end | 43 end |
42 | 44 |
43 @testset "promotion" begin | 45 @testset "promotion" begin |
44 @test promote(Stencil(1,1;center=1), Stencil(2.,2.;center=2)) == (Stencil(1.,1.;center=1), Stencil(2.,2.;center=2)) | 46 @test promote(Stencil(1,1;center=1), Stencil(2.,2.;center=2)) == (Stencil(1.,1.;center=1), Stencil(2.,2.;center=2)) |
47 end | |
48 | |
49 @testset "apply_stencil" begin | |
50 v = [1, 2, 4, 8, 16, 32, 64, 128] | |
51 s = Stencil(1,2,3,4, center = 2) | |
52 @test apply_stencil(s,v, 2) == v[1] + 2*v[2] + 3*v[3] + 4*v[4] | |
53 @test apply_stencil(s,v, 4) == v[3] + 2*v[4] + 3*v[5] + 4*v[6] | |
54 @test apply_stencil_backwards(s,v, 3) == 4*v[1] + 3*v[2] + 2*v[3] + 1*v[4] | |
55 @test apply_stencil_backwards(s,v, 7) == 4*v[5] + 3*v[6] + 2*v[7] + 1*v[8] | |
56 @test apply_stencil(s,v, 2) isa Int | |
57 @test apply_stencil_backwards(s,v, 7) isa Int | |
58 | |
59 v = [1, 2, 4, 8, 16, 32, 64, 128] | |
60 s = Stencil(1.,2.,3.,4., center = 2) | |
61 @test apply_stencil(s,v, 4) == v[3] + 2. *v[4] + 3. *v[5] + 4. *v[6] | |
62 @test apply_stencil_backwards(s,v, 7) == 4. *v[5] + 3. *v[6] + 2. *v[7] + v[8] | |
63 @test apply_stencil(s,v, 2) isa Float64 | |
64 @test apply_stencil_backwards(s,v, 7) isa Float64 | |
65 | |
66 v = [1., 2., 4., 8., 16., 32., 64., 128.] | |
67 s = Stencil(1,2,3,4, center = 2) | |
68 @test apply_stencil(s,v, 2) == v[1] + 2*v[2] + 3*v[3] + 4*v[4] | |
69 @test apply_stencil_backwards(s,v, 3) == 4*v[1] + 3*v[2] + 2*v[3] + 1*v[4] | |
70 @test apply_stencil(s,v, 2) isa Float64 | |
71 @test apply_stencil_backwards(s,v, 3) isa Float64 | |
72 | |
73 v = [@SVector[1, 2], @SVector[3, 4], @SVector[5, 6], @SVector[7, 8]] | |
74 s = Stencil(1,2, center = 1) | |
75 @test apply_stencil(s,v,1) == @SVector[7, 10] | |
76 @test apply_stencil_backwards(s,v,3) == @SVector[11, 14] | |
77 @test apply_stencil(s,v,1) isa SVector{2, Int} | |
78 @test apply_stencil_backwards(s,v,3) isa SVector{2, Int} | |
79 | |
80 v = [@SVector[1., 2.], @SVector[3., 4.], @SVector[5., 6.], @SVector[7., 8.]] | |
81 s = Stencil(1,2, center = 1) | |
82 @test apply_stencil(s,v,1) == @SVector[7., 10.] | |
83 @test apply_stencil_backwards(s,v,3) == @SVector[11., 14.] | |
84 @test apply_stencil(s,v,1) isa SVector{2, Float64} | |
85 @test apply_stencil_backwards(s,v,3) isa SVector{2, Float64} | |
86 | |
87 v = [@SVector[1, 2], @SVector[3, 4], @SVector[5, 6], @SVector[7, 8]] | |
88 s = Stencil(1.,2., center = 1) | |
89 @test apply_stencil(s,v,1) == @SVector[7., 10.] | |
90 @test apply_stencil_backwards(s,v,3) == @SVector[11., 14.] | |
91 @test apply_stencil(s,v,1) isa SVector{2, Float64} | |
92 @test apply_stencil_backwards(s,v,3) isa SVector{2, Float64} | |
45 end | 93 end |
46 | 94 |
47 @testset "type stability" begin | 95 @testset "type stability" begin |
48 s_int = CenteredStencil(1,2,3) | 96 s_int = CenteredStencil(1,2,3) |
49 s_float = CenteredStencil(1.,2.,3.) | 97 s_float = CenteredStencil(1.,2.,3.) |
153 @test SbpOperators.apply_inner_stencils(ns, c, 4) == Stencil(5,11,6; center=1) | 201 @test SbpOperators.apply_inner_stencils(ns, c, 4) == Stencil(5,11,6; center=1) |
154 @test SbpOperators.apply_inner_stencils_backwards(ns, c, 4) == Stencil(-4,-7,-3; center=1) | 202 @test SbpOperators.apply_inner_stencils_backwards(ns, c, 4) == Stencil(-4,-7,-3; center=1) |
155 | 203 |
156 @test SbpOperators.apply_stencil(ns, c, v, 4) == 5*7 + 11*11 + 6*13 | 204 @test SbpOperators.apply_stencil(ns, c, v, 4) == 5*7 + 11*11 + 6*13 |
157 @test SbpOperators.apply_stencil_backwards(ns, c, v, 4) == -3*3 - 7*5 - 4*7 | 205 @test SbpOperators.apply_stencil_backwards(ns, c, v, 4) == -3*3 - 7*5 - 4*7 |
206 | |
207 # Different types in vector and stencil | |
208 ns = NestedStencil((-1.,1.,0.),(-1.,0.,1.),(0.,-2.,2.), center=2) | |
209 @test SbpOperators.apply_inner_stencils(ns, c, 4) isa Stencil{Float64, 3} | |
210 @test SbpOperators.apply_inner_stencils(ns, c, 4) == Stencil(4.,9.,10.; center=2) | |
211 @test SbpOperators.apply_inner_stencils_backwards(ns, c, 4) isa Stencil{Float64, 3} | |
212 @test SbpOperators.apply_inner_stencils_backwards(ns, c, 4) == Stencil(-5.,-9.,-8.; center=2) | |
213 | |
214 @test SbpOperators.apply_stencil(ns, c, v, 4) isa Float64 | |
215 @test SbpOperators.apply_stencil(ns, c, v, 4) == 193. | |
216 @test SbpOperators.apply_stencil_backwards(ns, c, v, 4) isa Float64 | |
217 @test SbpOperators.apply_stencil_backwards(ns, c, v, 4) == -158. | |
218 | |
219 # Arrays of vectors | |
220 ns = NestedStencil((-1.,1.,0.),(-1.,0.,1.),(0.,-2.,2.), center=2) | |
221 c = [ 1, 3, 6, 10] | |
222 v = [@SVector[1, 2], @SVector[3, 4], @SVector[5, 6], @SVector[7, 8]] | |
223 @test SbpOperators.apply_stencil(ns, c, v, 2) isa SVector{2,Float64} | |
224 @test SbpOperators.apply_stencil(ns, c, v, 2) == 2v[1] + 5v[2] + 6v[3] | |
225 @test SbpOperators.apply_stencil_backwards(ns, c, v, 2) isa SVector{2,Float64} | |
226 @test SbpOperators.apply_stencil_backwards(ns, c, v, 2) == -4v[1] - 5v[2] - 3v[3] | |
158 end | 227 end |
159 | 228 |
160 @testset "type stability" begin | 229 @testset "type stability" begin |
161 s_int = CenteredNestedStencil((1,2,3),(1,2,3),(1,2,3)) | 230 s_int = CenteredNestedStencil((1,2,3),(1,2,3),(1,2,3)) |
162 s_float = CenteredNestedStencil((1.,2.,3.),(1.,2.,3.),(1.,2.,3.)) | 231 s_float = CenteredNestedStencil((1.,2.,3.),(1.,2.,3.),(1.,2.,3.)) |