def setUp(self): iv = IntervalTree() n = 0 for i in range(1, 1000, 80): iv.insert(i, i + 10, dict(value=i * i)) # add is synonym for insert. iv.add(i + 20, i + 30, dict(astr=str(i * i))) # or insert/add an interval object with start, end attrs. iv.insert_interval( Interval(i + 40, i + 50, value=dict(astr=str(i * i)))) iv.add_interval( Interval(i + 60, i + 70, value=dict(astr=str(i * i)))) n += 4 self.intervals = self.iv = iv self.nintervals = n
class IntervalTreeIterTest(unittest.TestCase): def setUp(self): self.tree = IntervalTree() self.intervals = [] import random for i in xrange(10000): start = random.randint(0, 1000) end = start + random.randint(0, 100) iv = Interval(start, end, idx=i) self.intervals.append(iv) self.tree.insert_interval(iv) def test_iter(self): c = 0 for s, e, iv in self.tree: c += 1 exp_iv = self.intervals[iv.idx] self.assertTrue(s == exp_iv.start) self.assertTrue(e == exp_iv.end) self.assertTrue(iv is exp_iv) self.assertEqual(c, len(self.intervals))
class IntervalTreeIntersectTest(unittest.TestCase): def setUp(self): self.tree_a = IntervalTree() self.tree_a.insert_interval(Interval(0, 10, 0)) self.tree_a.insert_interval(Interval(5, 15, 1)) self.tree_a.insert_interval(Interval(20, 25, 2)) self.tree_b = IntervalTree() self.tree_b.insert_interval(Interval(0, 10, 0)) self.tree_b.insert_interval(Interval(25, 30, 1)) def test_intersect(self): a_b_overlaps = self.tree_a.intersect(self.tree_b) self.assertTrue((0, 0, 10) in a_b_overlaps) b_a_overlaps = self.tree_b.intersect(self.tree_a) self.assertTrue((0, 0, 10) in b_a_overlaps) def test_test_intersect_cutoffs(self): ab_5 = self.tree_a.intersect(self.tree_b, self_cutoff=0.5) self.assertTrue((1, 0, 5) in ab_5) self.assertEquals(len(ab_5), 2) ab_0 = self.tree_a.intersect(self.tree_b, self_cutoff=0.0) self.assertTrue(len(ab_0), 2)