Skip to content

Commit dbc6254

Browse files
committed
add interval checks for CloseOpen & co.
1 parent 51458e8 commit dbc6254

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

src/distributions.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,23 +171,33 @@ struct OpenOpen01{ T<:AbstractFloat} <: OpenOpen{T} end # interval (0,1)
171171
struct CloseOpenAB{T<:AbstractFloat} <: CloseOpen{T} # interval [a,b)
172172
a::T
173173
b::T
174+
175+
CloseOpenAB{T}(a::T, b::T) where {T} = (check_interval(a, b); new{T}(a, b))
174176
end
175177

176178
struct OpenCloseAB{T<:AbstractFloat} <: OpenClose{T} # interval (a,b]
177179
a::T
178180
b::T
181+
182+
OpenCloseAB{T}(a::T, b::T) where {T} = (check_interval(a, b); new{T}(a, b))
179183
end
180184

181185
struct CloseCloseAB{T<:AbstractFloat} <: CloseClose{T} # interval [a,b]
182186
a::T
183187
b::T
188+
189+
CloseCloseAB{T}(a::T, b::T) where {T} = (check_interval(a, b); new{T}(a, b))
184190
end
185191

186192
struct OpenOpenAB{T<:AbstractFloat} <: OpenOpen{T} # interval (a,b)
187193
a::T
188194
b::T
195+
196+
OpenOpenAB{T}(a::T, b::T) where {T} = (check_interval(a, b); new{T}(a, b))
189197
end
190198

199+
check_interval(a, b) = a >= b && throw(ArgumentError("invalid interval specification"))
200+
191201
const FloatInterval_64 = FloatInterval{Float64}
192202
const CloseOpen01_64 = CloseOpen01{Float64}
193203
const CloseOpen12_64 = CloseOpen12{Float64}

test/runtests.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,11 @@ end
265265
@test CloseOpen(1, 2.0) === CloseOpen(1.0, 2.0)
266266
@test CloseOpen(1.0, Float32(2)) === CloseOpen(1.0, 2.0)
267267
@test CloseOpen(big(1), 2) isa CloseOpen{BigFloat}
268+
269+
for CO in (CloseOpen, CloseClose, OpenOpen, OpenClose)
270+
@test_throws ArgumentError CO(1, 1)
271+
@test_throws ArgumentError CO(2, 1)
272+
end
268273
end
269274

270275
@testset "rand(::Type{<:Tuple})" begin

0 commit comments

Comments
 (0)