chrono/tests/test_interval.py

93 lines
2.5 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.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]