コード例 #1
0
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)']),
    ]
コード例 #2
0
def test_merge_neighbors_empty():
    t = IntervalTree()
    t.merge_neighbors()
    t.verify()
    assert len(t) == 0