chrono/tests/test_interval.py

58 lines
1.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)