def test_intersection(): a = IntervalTree.from_tuples(data.ivs1.data) b = IntervalTree.from_tuples(data.ivs2.data) e = IntervalTree() # intersections with e assert a.intersection(e) == e assert b.intersection(e) == e assert e.intersection(e) == e # intersections with self assert a.intersection(a) == a assert b.intersection(b) == b # commutativity resulting in empty ab = a.intersection(b) ba = b.intersection(a) ab.verify() ba.verify() assert ab == ba assert len(ab) == 0 # no overlaps, so empty tree # commutativity on non-overlapping sets ab = a.union(b) ba = b.union(a) aba = ab.intersection(a) # these should yield no change abb = ab.intersection(b) bab = ba.intersection(b) baa = ba.intersection(a) aba.verify() abb.verify() bab.verify() baa.verify() assert aba == a assert abb == b assert bab == b assert baa == a # commutativity with overlapping sets c = IntervalTree.from_tuples(data.ivs3.data) bc = b.intersection(c) cb = c.intersection(b) bc.verify() cb.verify() assert bc == cb assert len(bc) < len(b) assert len(bc) < len(c) assert len(bc) > 0 assert b.containsi(13, 23) assert c.containsi(13, 23) assert bc.containsi(13, 23) assert not b.containsi(819, 828) assert not c.containsi(0, 1) assert not bc.containsi(819, 820) assert not bc.containsi(0, 1)
def test_intersection(): a = IntervalTree.from_tuples(data.ivs1.data) b = IntervalTree.from_tuples(data.ivs2.data) e = IntervalTree() # intersections with e assert a.intersection(e) == e ae = a.copy() ae.intersection_update(e) assert ae == e assert b.intersection(e) == e be = b.copy() be.intersection_update(e) assert be == e assert e.intersection(e) == e ee = e.copy() ee.intersection_update(e) assert ee == e # intersections with self assert a.intersection(a) == a aa = a.copy() aa.intersection_update(a) assert aa == a assert b.intersection(b) == b bb = b.copy() bb.intersection(b) == b assert bb == b # commutativity resulting in empty ab = a.intersection(b) ba = b.intersection(a) ab.verify() ba.verify() assert ab == ba assert len(ab) == 0 # no overlaps, so empty tree ab = a.copy() ab.intersection_update(b) ba = b.copy() ba.intersection_update(a) ab.verify() ba.verify() assert ab == ba assert len(ab) == 0 # no overlaps, so empty tree # commutativity on non-overlapping sets ab = a.union(b) ba = b.union(a) aba = ab.intersection(a) # these should yield no change abb = ab.intersection(b) bab = ba.intersection(b) baa = ba.intersection(a) aba.verify() abb.verify() bab.verify() baa.verify() assert aba == a assert abb == b assert bab == b assert baa == a ab = a.union(b) ba = b.union(a) aba = ab.copy() aba.intersection_update(a) # these should yield no change abb = ab.copy() abb.intersection_update(b) bab = ba.copy() bab.intersection_update(b) baa = ba.copy() baa.intersection_update(a) aba.verify() abb.verify() bab.verify() baa.verify() assert aba == a assert abb == b assert bab == b assert baa == a # commutativity with overlapping sets c = IntervalTree.from_tuples(data.ivs3.data) bc = b.intersection(c) cb = c.intersection(b) bc.verify() cb.verify() assert bc == cb assert len(bc) < len(b) assert len(bc) < len(c) assert len(bc) > 0 assert b.containsi(13, 23) assert c.containsi(13, 23) assert bc.containsi(13, 23) assert not b.containsi(819, 828) assert not c.containsi(0, 1) assert not bc.containsi(819, 828) assert not bc.containsi(0, 1) bc = b.copy() bc.intersection_update(c) cb = c.copy() cb.intersection_update(b) bc.verify() cb.verify() assert bc == cb assert len(bc) < len(b) assert len(bc) < len(c) assert len(bc) > 0 assert b.containsi(13, 23) assert c.containsi(13, 23) assert bc.containsi(13, 23) assert not b.containsi(819, 828) assert not c.containsi(0, 1) assert not bc.containsi(819, 828) assert not bc.containsi(0, 1)