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)