Skip to content

Commit

Permalink
Support missing.
Browse files Browse the repository at this point in the history
  • Loading branch information
Paalon committed Jun 19, 2024
1 parent dd5fcad commit 97cb2b7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/Waveforms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ Compute ``2\pi``-periodic square wave of `x` with a peak amplitude ``1``.
"""
squarewave(x::Real) = ifelse(mod2pi(x) < π, 1.0, -1.0)

squarewave(::Missing) = missing

@doc raw"""
squarewave(x, θ)
Expand All @@ -26,13 +28,19 @@ function squarewave(x::Real, θ::Real)
ifelse(mod2pi(x) < 2π * θ, 1.0, -1.0)
end

squarewave(::Missing, ::Real) = missing
squarewave(::Real, ::Missing) = missing
squarewave(::Missing, ::Missing) = missing

@doc raw"""
squarewave1(x)
Compute ``1``-periodic square wave of `x` with a peak amplitude ``1``.
"""
squarewave1(x::Real) = ifelse(mod(x, 1) < 1/2, 1.0, -1.0)

squarewave1(::Missing) = missing

@doc raw"""
squarewave1(x, θ)
Expand All @@ -44,6 +52,10 @@ function squarewave1(x::Real, θ::Real)
ifelse(mod(x, 1) < θ, 1.0, -1.0)
end

squarewave1(::Missing, ::Real) = missing
squarewave1(::Real, ::Missing) = missing
squarewave1(::Missing, ::Missing) = missing

@doc raw"""
trianglewave(x)
Expand All @@ -54,6 +66,8 @@ function trianglewave(x::Real)
ifelse(modx < π, 2modx/π - 1, -2modx/π + 3)
end

trianglewave(::Missing) = missing

@doc raw"""
trianglewave1(x)
Expand All @@ -64,18 +78,24 @@ function trianglewave1(x::Real)
ifelse(modx < 1/2, 4modx - 1, -4modx + 3)
end

trianglewave1(::Missing) = missing

@doc raw"""
sawtoothwave(x)
Compute ``2\pi``-periodic sawtooth wave of `x` with a peak amplitude ``1``.
"""
sawtoothwave(x::Real) = rem2pi(x, RoundNearest) / π

sawtoothwave(::Missing) = missing

@doc raw"""
sawtoothwave1(x)
Compute ``1``-periodic sawtooth wave of `x` with a peak amplitude ``1``.
"""
sawtoothwave1(x::Real) = rem(x, 1.0, RoundNearest) * 2

sawtoothwave1(::Missing) = missing

end # module
12 changes: 12 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,51 @@ const θ = 0.05
@testset "squarewave" begin
@test squarewave(x) == 1.0
@test squarewave(y) == 1.0
@test isequal(squarewave(missing), missing)
@test squarewave(x, θ) == -1.0
@test squarewave(y, θ) == -1.0
@test_throws DomainError squarewave(x, -1.0)
@test_throws DomainError squarewave(x, 2.0)
@test isequal(squarewave(missing, θ), missing)
@test isequal(squarewave(x, missing), missing)
@test isequal(squarewave(missing, missing), missing)
end
@testset "squarewave1" begin
@test squarewave1(x) == 1.0
@test squarewave1(y) == 1.0
@test isequal(squarewave1(missing), missing)
@test squarewave1(x, θ) == -1.0
@test squarewave1(y, θ) == -1.0
@test_throws DomainError squarewave1(x, -1.0)
@test_throws DomainError squarewave1(x, 2.0)
@test isequal(squarewave1(missing, θ), missing)
@test isequal(squarewave1(x, missing), missing)
@test isequal(squarewave1(missing, missing), missing)
end
end

@testset "triangle waves" begin
@testset "trianglewave" begin
@test trianglewave(x) == 0.2546479089470326
@test trianglewave(y) == 0.8571428571428572
@test isequal(trianglewave(missing), missing)
end
@testset "trianglewave1" begin
@test trianglewave1(x) == 0.3999999999999999
@test trianglewave1(y) == 0.6144125938460689
@test isequal(trianglewave1(missing), missing)
end
end

@testset "sawtooth waves" begin
@testset "sawtoothwave" begin
@test sawtoothwave(x) == 0.12732395447351627
@test sawtoothwave(y) == 0.42857142857142855
@test isequal(sawtoothwave(missing), missing)
end
@testset "sawtoothwave1" begin
@test sawtoothwave1(x) == 0.8
@test sawtoothwave1(y) == 0.6927937030769655
@test isequal(sawtoothwave1(missing), missing)
end
end

0 comments on commit 97cb2b7

Please sign in to comment.