Skip to content

Commit 8a88755

Browse files
committed
add tests
1 parent 2b60a83 commit 8a88755

File tree

2 files changed

+61
-4
lines changed

2 files changed

+61
-4
lines changed

test/TestPlans.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ function LinearAlgebra.mul!(
9595
dft!(y, x, p.region, 1)
9696
end
9797

98-
Base.:*(p::TestPlan, x::AbstractArray) = mul!(similar(x, complex(float(eltype(x)))), p, x)
99-
Base.:*(p::InverseTestPlan, x::AbstractArray) = mul!(similar(x, complex(float(eltype(x)))), p, x)
98+
Base.:*(p::TestPlan{T}, x::AbstractArray{T}) where T = mul!(similar(x, complex(float(eltype(x)))), p, x)
99+
Base.:*(p::InverseTestPlan{T}, x::AbstractArray{T}) where T = mul!(similar(x, complex(float(eltype(x)))), p, x)
100100

101101
mutable struct TestRPlan{T,N,G} <: Plan{T}
102102
region::G
@@ -219,7 +219,7 @@ function LinearAlgebra.mul!(y::AbstractArray{<:Complex, N}, p::TestRPlan, x::Abs
219219
return y
220220
end
221221

222-
function Base.:*(p::TestRPlan, x::AbstractArray)
222+
function Base.:*(p::TestRPlan{T}, x::AbstractArray{T}) where T
223223
# create output array
224224
firstdim = first(p.region)::Int
225225
d = size(x, firstdim)
@@ -241,7 +241,7 @@ function LinearAlgebra.mul!(y::AbstractArray{<:Real, N}, p::InverseTestRPlan, x:
241241
real_invdft!(y, x, p.region)
242242
end
243243

244-
function Base.:*(p::InverseTestRPlan, x::AbstractArray)
244+
function Base.:*(p::InverseTestRPlan{T}, x::AbstractArray{T}) where T
245245
# create output array
246246
firstdim = first(p.region)::Int
247247
d = p.d

test/abstractfftsforwarddiff.jl

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
using AbstractFFTs
2+
using ForwardDiff
3+
using Test
4+
using ForwardDiff: Dual, partials, value
5+
6+
@testset "ForwardDiff extension tests" begin
7+
x1 = Dual.(1:4.0, 2:5, 3:6)
8+
9+
@test AbstractFFTs.complexfloat(x1)[1] === AbstractFFTs.complexfloat(x1[1]) === Dual(1.0, 2.0, 3.0) + 0im
10+
@test AbstractFFTs.realfloat(x1)[1] === AbstractFFTs.realfloat(x1[1]) === Dual(1.0, 2.0, 3.0)
11+
12+
@test fft(x1, 1)[1] isa Complex{<:Dual}
13+
14+
@testset "$f" for f in (fft, ifft, rfft, bfft)
15+
@test value.(f(x1)) == f(value.(x1))
16+
@test partials.(real(f(x1)), 1) + im*partials.(imag(f(x1)), 1) == f(partials.(x1, 1))
17+
@test partials.(real(f(x1)), 2) + im*partials.(imag(f(x1)), 2) == f(partials.(x1, 2))
18+
end
19+
20+
@test ifft(fft(x1)) x1
21+
@test irfft(rfft(x1), length(x1)) x1
22+
@test brfft(rfft(x1), length(x1)) 4x1
23+
24+
f = x -> real(fft([x; 0; 0])[1])
25+
@test derivative(f,0.1) 1
26+
27+
r = x -> real(rfft([x; 0; 0])[1])
28+
@test derivative(r,0.1) 1
29+
30+
31+
n = 100
32+
θ = range(0,2π; length=n+1)[1:end-1]
33+
# emperical from Mathematical
34+
@test derivative-> fft(exp.(ω .* cos.(θ)))[1]/n, 1) 0.565159103992485
35+
36+
# c = x -> dct([x; 0; 0])[1]
37+
# @test derivative(c,0.1) ≈ 1
38+
39+
@testset "matrix" begin
40+
A = x1 * (1:10)'
41+
@test value.(fft(A)) == fft(value.(A))
42+
@test partials.(fft(A), 1) == fft(partials.(A, 1))
43+
@test partials.(fft(A), 2) == fft(partials.(A, 2))
44+
45+
@test value.(fft(A, 1)) == fft(value.(A), 1)
46+
@test partials.(fft(A, 1), 1) == fft(partials.(A, 1), 1)
47+
@test partials.(fft(A, 1), 2) == fft(partials.(A, 2), 1)
48+
49+
@test value.(fft(A, 2)) == fft(value.(A), 2)
50+
@test partials.(fft(A, 2), 1) == fft(partials.(A, 1), 2)
51+
@test partials.(fft(A, 2), 2) == fft(partials.(A, 2), 2)
52+
end
53+
54+
c1 = complex.(x1)
55+
@test mul!(similar(c1), FFTW.plan_fft(x1), x1) == fft(x1)
56+
@test mul!(similar(c1), FFTW.plan_fft(c1), c1) == fft(c1)
57+
end

0 commit comments

Comments
 (0)