Skip to content

Commit 4875af3

Browse files
add tests
1 parent cd41a88 commit 4875af3

File tree

4 files changed

+48
-32
lines changed

4 files changed

+48
-32
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "FastTransforms"
22
uuid = "057dd010-8810-581a-b7be-e3fc3b93f78c"
3-
version = "0.14.7"
3+
version = "0.14.8"
44

55
[deps]
66
AbstractFFTs = "621f4979-c628-5d54-868e-fcf4e3e8185c"
@@ -20,7 +20,7 @@ ToeplitzMatrices = "c751599d-da0a-543b-9d20-d0a503d91d24"
2020
AbstractFFTs = "1.0"
2121
FFTW = "1"
2222
FastGaussQuadrature = "0.4, 0.5"
23-
FastTransforms_jll = "0.6.1"
23+
FastTransforms_jll = "0.6.2"
2424
FillArrays = "0.9, 0.10, 0.11, 0.12, 0.13"
2525
GenericFFT = "0.1"
2626
Reexport = "0.2, 1.0"

docs/src/dev.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ This lets the developer experiment with new features through `ccall`ing into ble
3737
To get from a C library release to a Julia package release, the developer needs to update Yggdrasil's [build_tarballs.jl](https://github.com/JuliaPackaging/Yggdrasil/blob/master/F/FastTransforms/build_tarballs.jl) script for the new version and its 256-bit SHA. On macOS, the SHA can be found by:
3838
3939
```julia
40-
shell> curl https://codeload.github.com/MikaelSlevinsky/FastTransforms/tar.gz/v0.6.1 --output FastTransforms.tar.gz
40+
shell> curl https://codeload.github.com/MikaelSlevinsky/FastTransforms/tar.gz/v0.6.2 --output FastTransforms.tar.gz
4141
% Total % Received % Xferd Average Speed Time Time Time Current
4242
Dload Upload Total Spent Left Speed
4343
100 168k 0 168k 0 0 429k 0 --:--:-- --:--:-- --:--:-- 429k
4444

4545
shell> shasum -a 256 FastTransforms.tar.gz
46-
4ee42f264626b335e3f8bed7a10935d54393589813d8558802f0eae9ca46d36e FastTransforms.tar.gz
46+
fd00befcb0c20ba962a8744a7b9139355071ee95be70420de005b7c0f6e023aa FastTransforms.tar.gz
4747

4848
shell> rm -f FastTransforms.tar.gz
4949

@@ -52,7 +52,7 @@ shell> rm -f FastTransforms.tar.gz
5252
Using [SHA.jl](https://github.com/JuliaCrypto/SHA.jl), the SHA can also be found by:
5353
5454
```julia
55-
shell> curl https://codeload.github.com/MikaelSlevinsky/FastTransforms/tar.gz/v0.6.1 --output FastTransforms.tar.gz
55+
shell> curl https://codeload.github.com/MikaelSlevinsky/FastTransforms/tar.gz/v0.6.2 --output FastTransforms.tar.gz
5656
% Total % Received % Xferd Average Speed Time Time Time Current
5757
Dload Upload Total Spent Left Speed
5858
100 168k 0 168k 0 0 442k 0 --:--:-- --:--:-- --:--:-- 443k
@@ -62,7 +62,7 @@ julia> using SHA
6262
julia> open("FastTransforms.tar.gz") do f
6363
bytes2hex(sha256(f))
6464
end
65-
"4ee42f264626b335e3f8bed7a10935d54393589813d8558802f0eae9ca46d36e"
65+
"fd00befcb0c20ba962a8744a7b9139355071ee95be70420de005b7c0f6e023aa"
6666

6767
shell> rm -f FastTransforms.tar.gz
6868

src/libfasttransforms.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,9 @@ for (fJ, fadJ, fC, fE, K) in ((:plan_sph_synthesis, :plan_sph_analysis, :ft_plan
785785
end
786786
end
787787

788+
ft_get_rho_annulus_fftw_plan(p::FTPlan{Float64, 2, ANNULUSSYNTHESIS}) = ccall((:ft_get_rho_annulus_fftw_plan, libfasttransforms), Float64, (Ptr{ft_plan_struct}, ), p)
789+
ft_get_rho_annulus_fftw_plan(p::FTPlan{Float64, 2, ANNULUSANALYSIS}) = ccall((:ft_get_rho_annulus_fftw_plan, libfasttransforms), Float64, (Ptr{ft_plan_struct}, ), p)
790+
788791
for (fJ, fadJ, fC, fE, K) in ((:plan_annulus_synthesis, :plan_annulus_analysis, :ft_plan_annulus_synthesis, :ft_execute_annulus_synthesis, ANNULUSSYNTHESIS),
789792
(:plan_annulus_analysis, :plan_annulus_synthesis, :ft_plan_annulus_analysis, :ft_execute_annulus_analysis, ANNULUSANALYSIS))
790793
@eval begin
@@ -794,8 +797,8 @@ for (fJ, fadJ, fC, fE, K) in ((:plan_annulus_synthesis, :plan_annulus_analysis,
794797
plan = ccall(($(string(fC)), libfasttransforms), Ptr{ft_plan_struct}, (Cint, Cint, Float64, Cuint), n, m, ρ, flags)
795798
return FTPlan{Float64, 2, $K}(plan, n, m)
796799
end
797-
adjoint(p::FTPlan{T, 2, $K}) where T = AdjointFTPlan(p, $fadJ(T, p.n, p.m, ρ))
798-
transpose(p::FTPlan{T, 2, $K}) where T = TransposeFTPlan(p, $fadJ(T, p.n, p.m, ρ))
800+
adjoint(p::FTPlan{T, 2, $K}) where T = AdjointFTPlan(p, $fadJ(T, p.n, p.m, ft_get_rho_annulus_fftw_plan(p)))
801+
transpose(p::FTPlan{T, 2, $K}) where T = TransposeFTPlan(p, $fadJ(T, p.n, p.m, ft_get_rho_annulus_fftw_plan(p)))
799802
function lmul!(p::FTPlan{Float64, 2, $K}, x::Matrix{Float64})
800803
checksize(p, x)
801804
ccall(($(string(fE)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint), 'N', p, x, size(x, 1), size(x, 2))

test/libfasttransformstests.jl

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ FastTransforms.ft_set_num_threads(ceil(Int, Base.Sys.CPU_THREADS/2))
2323
@test f fd
2424
end
2525

26-
α, β, γ, δ, λ, μ = 0.1, 0.2, 0.3, 0.4, 0.5, 0.6
26+
α, β, γ, δ, λ, μ, ρ = 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7
2727
function test_1d_plans(p1, p2, x)
2828
y = p1*x
2929
z = p2*y
@@ -104,29 +104,31 @@ FastTransforms.ft_set_num_threads(ceil(Int, Base.Sys.CPU_THREADS/2))
104104

105105
@testset "Modified classical orthonormal polynomial transforms" begin
106106
(n, α, β) = (16, 0, 0)
107-
P1 = plan_modifiedjac2jac(Float64, n, α, β, [0.9428090415820636, -0.32659863237109055, -0.42163702135578396, 0.2138089935299396]) # u1(x) = (1-x)^2*(1+x)
108-
P2 = plan_modifiedjac2jac(Float64, n, α, β, [0.9428090415820636, -0.32659863237109055, -0.42163702135578396, 0.2138089935299396], [1.4142135623730951]) # u2(x) = (1-x)^2*(1+x)
109-
P3 = plan_modifiedjac2jac(Float64, n, α, β, [-0.9428090415820636, 0.32659863237109055, 0.42163702135578396, -0.2138089935299396], [-5.185449728701348, 0.0, 0.42163702135578374]) # u3(x) = -(1-x)^2*(1+x), v3(x) = -(2-x)*(2+x)
110-
P4 = plan_modifiedjac2jac(Float64, n, α+2, β+1, [1.1547005383792517], [4.387862045841156, 0.1319657758147716, -0.20865621238292037]) # v4(x) = (2-x)*(2+x)
111-
112-
@test P1*I P2*I
113-
@test P1\I P2\I
114-
@test P3*I P2*(P4*I)
115-
@test P3\I P4\(P2\I)
116-
117-
P5 = plan_modifiedlag2lag(Float64, n, α, [2.0, -4.0, 2.0]) # u5(x) = x^2
118-
P6 = plan_modifiedlag2lag(Float64, n, α, [2.0, -4.0, 2.0], [1.0]) # u6(x) = x^2
119-
P7 = plan_modifiedlag2lag(Float64, n, α, [2.0, -4.0, 2.0], [7.0, -7.0, 2.0]) # u7(x) = x^2, v7(x) = (1+x)*(2+x)
120-
P8 = plan_modifiedlag2lag(Float64, n, α+2, [sqrt(2.0)], [sqrt(1058.0), -sqrt(726.0), sqrt(48.0)]) # v8(x) = (1+x)*(2+x)
121-
122-
@test P5*I P6*I
123-
@test P5\I P6\I
124-
@test P7*I P6*(P8*I)
125-
@test P7\I P8\(P6\I)
126-
127-
P9 = plan_modifiedherm2herm(Float64, n, [2.995504568550877, 0.0, 3.7655850551068593, 0.0, 1.6305461589167827], [2.995504568550877, 0.0, 3.7655850551068593, 0.0, 1.6305461589167827]) # u9(x) = 1+x^2+x^4, v9(x) = 1+x^2+x^4
128-
129-
@test P9*I P9\I
107+
for T in (Float32, Float64)
108+
P1 = plan_modifiedjac2jac(T, n, α, β, T[0.9428090415820636, -0.32659863237109055, -0.42163702135578396, 0.2138089935299396]) # u1(x) = (1-x)^2*(1+x)
109+
P2 = plan_modifiedjac2jac(T, n, α, β, T[0.9428090415820636, -0.32659863237109055, -0.42163702135578396, 0.2138089935299396], T[1.4142135623730951]) # u2(x) = (1-x)^2*(1+x)
110+
P3 = plan_modifiedjac2jac(T, n, α, β, T[-0.9428090415820636, 0.32659863237109055, 0.42163702135578396, -0.2138089935299396], T[-5.185449728701348, 0.0, 0.42163702135578374]) # u3(x) = -(1-x)^2*(1+x), v3(x) = -(2-x)*(2+x)
111+
P4 = plan_modifiedjac2jac(T, n, α+2, β+1, T[1.1547005383792517], T[4.387862045841156, 0.1319657758147716, -0.20865621238292037]) # v4(x) = (2-x)*(2+x)
112+
113+
@test P1*I P2*I
114+
@test P1\I P2\I
115+
@test P3*I P2*(P4*I)
116+
@test P3\I P4\(P2\I)
117+
118+
P5 = plan_modifiedlag2lag(T, n, α, T[2.0, -4.0, 2.0]) # u5(x) = x^2
119+
P6 = plan_modifiedlag2lag(T, n, α, T[2.0, -4.0, 2.0], T[1.0]) # u6(x) = x^2
120+
P7 = plan_modifiedlag2lag(T, n, α, T[2.0, -4.0, 2.0], T[7.0, -7.0, 2.0]) # u7(x) = x^2, v7(x) = (1+x)*(2+x)
121+
P8 = plan_modifiedlag2lag(T, n, α+2, T[sqrt(2.0)], T[sqrt(1058.0), -sqrt(726.0), sqrt(48.0)]) # v8(x) = (1+x)*(2+x)
122+
123+
@test P5*I P6*I
124+
@test P5\I P6\I
125+
@test isapprox(P7*I, P6*(P8*I); rtol = eps(T)^(1/4))
126+
@test isapprox(P7\I, P8\(P6\I); rtol = eps(T)^(1/4))
127+
128+
P9 = plan_modifiedherm2herm(T, n, T[2.995504568550877, 0.0, 3.7655850551068593, 0.0, 1.6305461589167827], T[2.995504568550877, 0.0, 3.7655850551068593, 0.0, 1.6305461589167827]) # u9(x) = 1+x^2+x^4, v9(x) = 1+x^2+x^4
129+
130+
@test P9*I P9\I
131+
end
130132
end
131133

132134
function test_nd_plans(p, ps, pa, A)
@@ -175,6 +177,17 @@ FastTransforms.ft_set_num_threads(ceil(Int, Base.Sys.CPU_THREADS/2))
175177
pa = plan_disk_analysis(A)
176178
test_nd_plans(p, ps, pa, A)
177179

180+
A = diskones(Float64, n, 4n-3)
181+
p = plan_ann2cxf(A, α, β, 0, ρ)
182+
ps = plan_annulus_synthesis(A, ρ)
183+
pa = plan_annulus_analysis(A, ρ)
184+
test_nd_plans(p, ps, pa, A)
185+
A = diskones(Float64, n, 4n-3) + im*diskones(Float64, n, 4n-3)
186+
p = plan_ann2cxf(A, α, β, 0, ρ)
187+
ps = plan_annulus_synthesis(A, ρ)
188+
pa = plan_annulus_analysis(A, ρ)
189+
test_nd_plans(p, ps, pa, A)
190+
178191
A = rectdiskones(Float64, n, n)
179192
p = plan_rectdisk2cheb(A, β)
180193
ps = plan_rectdisk_synthesis(A)

0 commit comments

Comments
 (0)