def test_update(): t = IntervalTree() interval = Interval(0, 1) s = set([interval]) t.update(s) assert isinstance(t, IntervalTree) assert len(t) == 1 assert set(t).pop() == interval t.clear() assert not t t.extend(s) t.extend(s) assert isinstance(t, IntervalTree) assert len(t) == 1 assert set(t).pop() == interval interval = Interval(2, 3) t.update([interval]) assert isinstance(t, IntervalTree) assert len(t) == 2 assert sorted(t)[1] == interval t = IntervalTree(s) t.extend([interval]) assert isinstance(t, IntervalTree) assert len(t) == 2 assert sorted(t)[1] == interval
def test_insert(): tree = IntervalTree() tree[0:1] = "data" assert len(tree) == 1 assert tree.items() == set([Interval(0, 1, "data")]) tree.add(Interval(10, 20)) assert len(tree) == 2 assert tree.items() == set([Interval(0, 1, "data"), Interval(10, 20)]) tree.addi(19.9, 20) assert len(tree) == 3 assert tree.items() == set([ Interval(0, 1, "data"), Interval(19.9, 20), Interval(10, 20), ]) tree.extend([Interval(19.9, 20.1), Interval(20.1, 30)]) assert len(tree) == 5 assert tree.items() == set([ Interval(0, 1, "data"), Interval(19.9, 20), Interval(10, 20), Interval(19.9, 20.1), Interval(20.1, 30), ])
def test_add_invalid_interval(): """ Ensure that begin < end. """ itree = IntervalTree() with pytest.raises(ValueError): itree.addi(1, 0) with pytest.raises(ValueError): itree.addi(1, 1) with pytest.raises(ValueError): itree[1:0] = "value" with pytest.raises(ValueError): itree[1:1] = "value" with pytest.raises(ValueError): itree[1.1:1.05] = "value" with pytest.raises(ValueError): itree[1.1:1.1] = "value" with pytest.raises(ValueError): itree.extend([Interval(1, 0)]) with pytest.raises(ValueError): itree.extend([Interval(1, 1)])
def test_invalid_update(): t = IntervalTree() with pytest.raises(ValueError): t.update([Interval(1, 0)]) with pytest.raises(ValueError): t.update([Interval(1, 1)]) with pytest.raises(ValueError): t.extend([Interval(1, 0)]) with pytest.raises(ValueError): t.extend([Interval(1, 1)])
def test_duplicate_insert(): tree = IntervalTree() # string data tree[-10:20] = "arbitrary data" contents = frozenset([Interval(-10, 20, "arbitrary data")]) assert len(tree) == 1 assert tree.items() == contents tree.addi(-10, 20, "arbitrary data") assert len(tree) == 1 assert tree.items() == contents tree.add(Interval(-10, 20, "arbitrary data")) assert len(tree) == 1 assert tree.items() == contents tree.extend([Interval(-10, 20, "arbitrary data")]) assert len(tree) == 1 assert tree.items() == contents # None data tree[-10:20] = None contents = frozenset([ Interval(-10, 20), Interval(-10, 20, "arbitrary data"), ]) assert len(tree) == 2 assert tree.items() == contents tree.addi(-10, 20) assert len(tree) == 2 assert tree.items() == contents tree.add(Interval(-10, 20)) assert len(tree) == 2 assert tree.items() == contents tree.extend([Interval(-10, 20), Interval(-10, 20, "arbitrary data")]) assert len(tree) == 2 assert tree.items() == contents
def test_union(): t = IntervalTree() interval = Interval(0, 1) s = set([interval]) r = t.union(s) assert len(r) == 1 assert set(r).pop() == interval t.extend(s) t.extend(s) assert len(t) == 1 assert set(t).pop() == interval interval = Interval(2, 3) t.update([interval]) assert len(t) == 2 assert sorted(t)[1] == interval t = IntervalTree(s) t.extend([interval]) assert len(t) == 2 assert sorted(t)[1] == interval
def test_union(): t = IntervalTree() interval = Interval(0, 1) s = set([interval]) # union with empty r = t.union(s) assert len(r) == 1 assert set(r).pop() == interval # update with duplicates t.update(s) t.update(s) assert len(t) == 1 assert set(t).pop() == interval # extend with duplicates t.extend(s) t.extend(s) assert len(t) == 1 assert set(t).pop() == interval # update with non-dupe interval = Interval(2, 3) t.update([interval]) assert len(t) == 2 assert sorted(t)[1] == interval # extend with non-dupe t.remove(interval) assert len(t) == 1 assert interval not in t t.extend([interval]) assert len(t) == 2 assert sorted(t)[1] == interval # commutativity with full overlaps, then no overlaps a = IntervalTree.from_tuples(data.ivs1.data) b = IntervalTree.from_tuples(data.ivs2.data) e = IntervalTree() aa = a.union(a) ae = a.union(e) ea = e.union(a) ee = e.union(e) aa.verify() ae.verify() ea.verify() ee.verify() assert aa == a assert ae == a assert ea == a assert ee == e ab = a.union(b) ba = b.union(a) ab.verify() ba.verify() assert ab == ba assert len(ab) == 109 # commutativity with strict subset overlap aba = ab.union(a) abb = ab.union(b) bab = ba.union(b) baa = ba.union(a) aba.verify() abb.verify() bab.verify() baa.verify() assert aba == abb assert abb == bab assert bab == baa assert aba == ab # commutativity with partial overlap c = IntervalTree.from_tuples(data.ivs3.data) bc = b.union(c) cb = c.union(b) bc.verify() cb.verify() assert bc == cb assert len(bc) > len(b) assert len(bc) > len(c) assert len(bc) < len(b) + len(c) for iv in b: assert iv in bc for iv in c: assert iv in bc