94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
import pytest
|
|
|
|
from chrono.interval import Interval, Intervals
|
|
|
|
|
|
def test_interval_repr():
|
|
a = Interval(1, 4)
|
|
repr(a)
|
|
|
|
|
|
def test_interval_overlap():
|
|
a = Interval(1, 4)
|
|
|
|
assert not a.overlap(0, 1)
|
|
assert a.overlap(0, 2)
|
|
assert a.overlap(1, 4)
|
|
assert a.overlap(2, 3)
|
|
assert a.overlap(3, 5)
|
|
assert not a.overlap(5, 6)
|
|
|
|
|
|
def test_intervals():
|
|
intervals = Intervals()
|
|
|
|
assert len(list(intervals.search(0, 5))) == 0
|
|
|
|
for i in range(10):
|
|
intervals.add(i, i + 1, 1)
|
|
|
|
for i in range(10, 20):
|
|
intervals.add(i, i + 1, 2)
|
|
|
|
for i in range(5, 15):
|
|
intervals.add(i, i + 1, 3)
|
|
|
|
assert len(list(intervals.search(0, 5))) == 5
|
|
assert len(list(intervals.search(0, 10))) == 15
|
|
assert len(list(intervals.search(5, 15))) == 20
|
|
assert len(list(intervals.search(10, 20))) == 15
|
|
assert len(list(intervals.search(15, 20))) == 5
|
|
|
|
assert set(intervals.search_data(0, 5)) == {1}
|
|
assert set(intervals.search_data(0, 10)) == {1, 3}
|
|
assert set(intervals.search_data(5, 15)) == {1, 2, 3}
|
|
assert set(intervals.search_data(10, 20)) == {2, 3}
|
|
assert set(intervals.search_data(15, 20)) == {2}
|
|
|
|
for i in range(20):
|
|
assert intervals.overlap(i, i + 1)
|
|
|
|
intervals.remove_overlap(5, 15)
|
|
assert set(intervals.search_data(0, 20)) == {1, 2}
|
|
|
|
for i in range(5):
|
|
assert intervals.overlap(i, i + 1)
|
|
for i in range(5, 15):
|
|
assert not intervals.overlap(i, i + 1)
|
|
for i in range(15, 20):
|
|
assert intervals.overlap(i, i + 1)
|
|
|
|
|
|
def test_interval_remove():
|
|
intervals = Intervals()
|
|
intervals.remove(10, 11) # do nothing
|
|
intervals.add(9, 12)
|
|
intervals.add(14, 17)
|
|
intervals.remove(11, 24)
|
|
assert list(intervals.search(0, 24)) == [Interval(9, 11)]
|
|
intervals.remove(8, 10)
|
|
assert list(intervals.search(0, 24)) == [Interval(10, 11)]
|
|
|
|
intervals = Intervals()
|
|
intervals.add(9, 12)
|
|
intervals.add(14, 17)
|
|
intervals.remove(10, 11)
|
|
assert list(intervals.search(0, 24)) == [Interval(9, 10), Interval(11, 12), Interval(14, 17)]
|
|
|
|
|
|
def test_doc_test():
|
|
a = Interval(1, 10)
|
|
b = Interval(2, 4)
|
|
c = Interval(3, 5)
|
|
d = Interval(8, 9)
|
|
|
|
s = Intervals()
|
|
for x in [a, b, c, d]:
|
|
s.add_interval(x)
|
|
|
|
assert sorted(s.search(2, 9), key=lambda x: x.begin) == [a, b, c, d]
|
|
assert sorted(s.search(-1, 11), key=lambda x: x.begin) == [a, b, c, d]
|
|
assert sorted(s.search(1, 3), key=lambda x: x.begin) == [a, b]
|
|
assert sorted(s.search(4, 10), key=lambda x: x.begin) == [a, c, d]
|
|
assert sorted(s.search(5, 10), key=lambda x: x.begin) == [a, d]
|