Skip to content

Commit

Permalink
Add isdisjoint (#171)
Browse files Browse the repository at this point in the history
  • Loading branch information
omus authored Jul 20, 2021
1 parent 023a0e6 commit 0513348
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/Intervals.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ using Dates: AbstractDateTime, value, coarserperiod

import Base: , , , , union, union!, merge

# Extend `Base.isdisjoint` when it exists
# https://github.com/JuliaLang/julia/pull/34427
if VERSION >= v"1.5.0-DEV.124"
import Base: isdisjoint
end

abstract type Bound end
abstract type Bounded <: Bound end
struct Closed <: Bounded end
Expand Down Expand Up @@ -57,6 +63,7 @@ export Bound,
union!,
less_than_disjoint,
greater_than_disjoint,
isdisjoint,
superset,
.., , , , , ,
end
4 changes: 4 additions & 0 deletions src/interval.jl
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,10 @@ function Base.issubset(a::AbstractInterval, b::AbstractInterval)
return LeftEndpoint(a) LeftEndpoint(b) && RightEndpoint(a) RightEndpoint(b)
end

function isdisjoint(a::AbstractInterval, b::AbstractInterval)
return RightEndpoint(a) < LeftEndpoint(b) || LeftEndpoint(a) > RightEndpoint(b)
end

Base.:(a::AbstractInterval, b::AbstractInterval) = !issubset(a, b)
Base.:(a::AbstractInterval, b::AbstractInterval) = !issubset(b, a)

Expand Down
54 changes: 54 additions & 0 deletions test/comparisons.jl
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ end
@test !issubset(earlier, later)
@test !issubset(later, earlier)

@test isdisjoint(earlier, later)
@test isdisjoint(later, earlier)

@test intersect(earlier, later) == expected_overlap
@test_throws ArgumentError merge(earlier, later)
@test union([earlier, later]) == [earlier, later]
Expand Down Expand Up @@ -125,6 +128,9 @@ end
@test !issubset(earlier, later)
@test !issubset(later, earlier)

@test isdisjoint(earlier, later)
@test isdisjoint(later, earlier)

@test intersect(earlier, later) == expected_overlap
@test_throws ArgumentError merge(earlier, later)
@test union([earlier, later]) == [earlier, later]
Expand Down Expand Up @@ -180,6 +186,9 @@ end
@test !issubset(earlier, later)
@test !issubset(later, earlier)

@test isdisjoint(earlier, later)
@test isdisjoint(later, earlier)

@test intersect(earlier, later) == expected_overlap
@test merge(earlier, later) == expected_superset
@test union([earlier, later]) == [expected_superset]
Expand Down Expand Up @@ -235,6 +244,9 @@ end
@test !issubset(earlier, later)
@test !issubset(later, earlier)

@test isdisjoint(earlier, later)
@test isdisjoint(later, earlier)

@test intersect(earlier, later) == expected_overlap
@test merge(earlier, later) == expected_superset
@test union([earlier, later]) == [expected_superset]
Expand Down Expand Up @@ -290,6 +302,9 @@ end
@test !issubset(earlier, later)
@test !issubset(later, earlier)

@test !isdisjoint(earlier, later)
@test !isdisjoint(later, earlier)

@test intersect(earlier, later) == expected_overlap
@test merge(earlier, later) == expected_superset
@test union([earlier, later]) == [expected_superset]
Expand Down Expand Up @@ -345,6 +360,9 @@ end
@test !issubset(earlier, later)
@test !issubset(later, earlier)

@test !isdisjoint(earlier, later)
@test !isdisjoint(later, earlier)

@test intersect(earlier, later) == expected_overlap
@test merge(earlier, later) == expected_superset
@test union([earlier, later]) == [expected_superset]
Expand Down Expand Up @@ -388,6 +406,9 @@ end
@test issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -431,6 +452,9 @@ end
@test !issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -474,6 +498,9 @@ end
@test !issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -517,6 +544,9 @@ end
@test !issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -560,6 +590,9 @@ end
@test issubset(a, b)
@test !issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -603,6 +636,9 @@ end
@test issubset(a, b)
@test !issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -646,6 +682,9 @@ end
@test issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -689,6 +728,9 @@ end
@test !issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -732,6 +774,9 @@ end
@test !issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -774,6 +819,9 @@ end
@test issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -808,6 +856,9 @@ end
@test issubset(a, b)
@test issubset(b, a)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(a, b) == expected_overlap
@test merge(a, b) == expected_superset
@test union([a, b]) == [expected_superset]
Expand Down Expand Up @@ -870,6 +921,9 @@ end
@test issubset(smaller, larger)
@test !issubset(larger, smaller)

@test !isdisjoint(a, b)
@test !isdisjoint(b, a)

@test intersect(smaller, larger) == expected_overlap
@test merge(smaller, larger) == expected_superset
@test union([smaller, larger]) == [expected_superset]
Expand Down

0 comments on commit 0513348

Please sign in to comment.