MCPcopy Index your code
hub / github.com/OmkarPathak/pygorithm / test_retrieve

Method test_retrieve

tests/test_data_structure.py:628–679  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

626 self.assertEqual(3, len(_tree.children[0].children[0].entities)) # max_depth reached
627
628 def test_retrieve(self):
629 _tree = quadtree.QuadTree(2, 2, self.big_rect)
630
631 ent1 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(25, 25)))
632 _tree.insert_and_think(ent1)
633
634 retr = _tree.retrieve_collidables(ent1)
635 self.assertIsNotNone(retr)
636 self.assertEqual(1, len(retr))
637 self.assertEqual(25, retr[0].aabb.mincorner.x)
638 self.assertEqual(25, retr[0].aabb.mincorner.y)
639
640 # note this is not nicely in a quadrant
641 ent2 = quadtree.QuadTreeEntity(rect2.Rect2(20, 10, vector2.Vector2(490, 300)))
642 _tree.insert_and_think(ent2)
643
644 retr = _tree.retrieve_collidables(ent1)
645 self.assertIsNotNone(retr)
646 self.assertEqual(2, len(retr)) # both ent1 and ent2 are "collidable" in this quad tree
647
648 # this should cause a split (bucket_size)
649 ent3 = quadtree.QuadTreeEntity(rect2.Rect2(15, 10, vector2.Vector2(700, 450)))
650 _tree.insert_and_think(ent3)
651
652 ent4 = quadtree.QuadTreeEntity(rect2.Rect2(5, 5, vector2.Vector2(900, 900)))
653 _tree.insert_and_think(ent4)
654
655 # ent1 should collide with ent1 or ent2
656 # ent2 with ent1 or ent2, or ent3
657 # ent3 with ent2 or ent3
658 # ent4 with ent2 or ent4
659 retr = _tree.retrieve_collidables(ent1)
660 self.assertIsNotNone(retr)
661 self.assertEqual(2, len(retr))
662 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 25), None), str(retr))
663 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr))
664
665 retr = _tree.retrieve_collidables(ent2)
666 self.assertEqual(3, len(retr))
667 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 25), None), str(retr))
668 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr))
669 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 700), None), str(retr))
670
671 retr = _tree.retrieve_collidables(ent3)
672 self.assertEqual(2, len(retr))
673 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr))
674 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 700), None), str(retr))
675
676 retr = _tree.retrieve_collidables(ent4)
677 self.assertEqual(2, len(retr))
678 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 900), None), str(retr))
679 self.assertIsNotNone(next((e for e in retr if e.aabb.mincorner.x == 490), None), str(retr))
680
681 def test_ents_per_depth(self):
682 _tree = quadtree.QuadTree(3, 5, self.big_rect)

Callers

nothing calls this directly

Calls 2

insert_and_thinkMethod · 0.95
retrieve_collidablesMethod · 0.95

Tested by

no test coverage detected