def test_merge_neighbors_reducer_with_initializer(): def reducer(old, new): return old + [new] # empty tree e = IntervalTree() e.merge_neighbors(data_reducer=reducer, data_initializer=[]) e.verify() assert not e # one Interval in tree o = IntervalTree.from_tuples([(1, 2, 'hello')]) o.merge_neighbors(data_reducer=reducer, data_initializer=[]) o.verify() assert len(o) == 1 assert sorted(o) == [Interval(1, 2, ['hello'])] # many Intervals in tree, without gap _data_no_gap = ( (1, 2, '[1,2)'), (2, 3, '[2,3)'), (3, 4, '[3,4)'), ) t = IntervalTree.from_tuples(_data_no_gap) t.merge_neighbors(data_reducer=reducer, data_initializer=[]) t.verify() assert len(t) == 1 for begin, end, _data in t.items(): assert begin == 1 assert end == 4 assert _data == ['[1,2)', '[2,3)', '[3,4)'] # many Intervals in tree, with gap and distance=2 _data_gap = ( (1, 2, '[1,2)'), (4, 6, '[4,6)'), (5, 8, '[5,8)'), (13, 15, '[13,15)'), ) t = IntervalTree.from_tuples(_data_gap) t.merge_neighbors(data_reducer=reducer, data_initializer=[], distance=2) t.verify() assert len(t) == 3 assert sorted(t) == [ Interval(1, 6, ['[1,2)', '[4,6)']), Interval(5, 8, ['[5,8)']), Interval(13, 15, ['[13,15)']), ]
def test_merge_neighbors_empty(): t = IntervalTree() t.merge_neighbors() t.verify() assert len(t) == 0