1"""pyrtree Unittest."""
2from ..rtree import RTree, Rect
3import unittest
4
5
6class Pyrtree_Tester(unittest.TestCase):
7    def setUp(self):
8        k = 10
9        w = 20
10        objects = {}
11        id = 0
12        for i in range(k):
13            mn_y = i * w
14            mx_y = mn_y + w
15            for j in range(k):
16                mn_x = j * w
17                mx_x = mn_x + w
18                objects[id] = Rect(mn_x, mn_y, mx_x, mx_y)
19                id += 1
20        self.objects = objects
21
22    def test_rtree(self):
23        t = RTree()
24        for object in self.objects:
25            t.insert(object, self.objects[object])
26        self.assertEqual(len(self.objects), 100)
27
28        qr = Rect(5, 5, 25, 25)
29
30        # find objects with mbrs intersecting with qr
31        res = [r.leaf_obj() for r in t.query_rect(qr) if r.is_leaf()]
32        self.assertEqual(len(res), 4)
33        res.sort()
34        self.assertEqual(res, [0, 1, 10, 11])
35
36        # vertices are shared by all coincident rectangles
37        res = [r.leaf_obj() for r in t.query_point((20.0, 20.0)) if r.is_leaf()]
38        self.assertEqual(len(res), 4)
39
40        res = [r.leaf_obj() for r in t.query_point((21, 20)) if r.is_leaf()]
41        self.assertEqual(len(res), 2)
42
43        # single internal point
44        res = [r.leaf_obj() for r in t.query_point((21, 21)) if r.is_leaf()]
45        self.assertEqual(len(res), 1)
46
47        # single external point
48        res = [r.leaf_obj() for r in t.query_point((-12, 21)) if r.is_leaf()]
49        self.assertEqual(len(res), 0)
50
51        qr = Rect(5, 6, 65, 7)
52
53        res = [r.leaf_obj() for r in t.query_rect((qr)) if r.is_leaf()]
54        self.assertEqual(len(res), 4)
55
56
57suite = unittest.TestSuite()
58test_classes = [Pyrtree_Tester]
59for i in test_classes:
60    a = unittest.TestLoader().loadTestsFromTestCase(i)
61    suite.addTest(a)
62
63if __name__ == "__main__":
64    runner = unittest.TextTestRunner()
65    runner.run(suite)
66