diff --git a/interval/interval.go b/interval/interval.go index de97ecd..b0d558c 100644 --- a/interval/interval.go +++ b/interval/interval.go @@ -98,10 +98,13 @@ func Union(a []Interval, b []Interval) []Interval { i++ } - result = append(result, Interval{ - Start: start, - End: end, - }) + // Only append if the intervals actually overlap (start <= end) + if start <= end { + result = append(result, Interval{ + Start: start, + End: end, + }) + } } return joinSortedIntervals(result) diff --git a/interval/interval_test.go b/interval/interval_test.go index a52eb6a..92812dc 100644 --- a/interval/interval_test.go +++ b/interval/interval_test.go @@ -77,6 +77,28 @@ func TestUnion(t *testing.T) { {Start: 5, End: 5}, }, }, + { + name: "non-overlapping intervals should produce empty result", + a: []interval.Interval{ + {Start: 90, End: 95}, + }, + b: []interval.Interval{ + {Start: 80, End: 88}, + }, + e: []interval.Interval{}, + }, + { + name: "adjacent but non-overlapping intervals", + a: []interval.Interval{ + {Start: 10, End: 20}, + {Start: 50, End: 60}, + }, + b: []interval.Interval{ + {Start: 21, End: 30}, + {Start: 40, End: 49}, + }, + e: []interval.Interval{}, + }, } for _, tc := range testacses {