|
@@ -0,0 +1,86 @@
|
|
|
+"""
|
|
|
+TEST: box.c
|
|
|
+
|
|
|
+AUTHOR(S): Vaclav Petras
|
|
|
+
|
|
|
+PURPOSE: Test functions related to bounding box
|
|
|
+
|
|
|
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
|
|
|
+
|
|
|
+ This program is free software under the GNU General Public
|
|
|
+ License (>=v2). Read the file COPYING that comes with GRASS
|
|
|
+ for details.
|
|
|
+"""
|
|
|
+
|
|
|
+import ctypes
|
|
|
+import grass.lib.vector as libvect
|
|
|
+
|
|
|
+from grass.gunittest.case import TestCase
|
|
|
+from grass.gunittest.main import test
|
|
|
+
|
|
|
+
|
|
|
+class TestPointInBoundingBox(TestCase):
|
|
|
+ """Test functions related to point in bounding box"""
|
|
|
+
|
|
|
+ def setUp(self):
|
|
|
+ """Create bbox object"""
|
|
|
+ self.c_bbox = ctypes.pointer(libvect.bound_box())
|
|
|
+ # x range
|
|
|
+ self.c_bbox.contents.E = 220
|
|
|
+ self.c_bbox.contents.W = 215
|
|
|
+ # y range
|
|
|
+ self.c_bbox.contents.N = 135
|
|
|
+ self.c_bbox.contents.S = 125
|
|
|
+ # z range
|
|
|
+ self.c_bbox.contents.T = 340
|
|
|
+ self.c_bbox.contents.B = 330
|
|
|
+
|
|
|
+ def test_bbox_3d_in(self):
|
|
|
+ """Check Vect_point_in_box() function with 3D points inside bbox"""
|
|
|
+ self.check_point_in_3d(217, 130, 335)
|
|
|
+ self.check_point_in_3d(219.999999, 125.000001, 339.999999)
|
|
|
+
|
|
|
+ def test_bbox_3d_out(self):
|
|
|
+ """Check Vect_point_in_box() function with 3D points outside bbox"""
|
|
|
+ self.check_point_out_3d(100, 100, 100)
|
|
|
+ self.check_point_out_3d(500, 593, 900)
|
|
|
+ self.check_point_out_3d(-220, 130, 335)
|
|
|
+ self.check_point_out_3d(220, -130, 335)
|
|
|
+ self.check_point_out_3d(220, 130, -335)
|
|
|
+
|
|
|
+ def check_point_in_3d(self, x, y, z):
|
|
|
+ """Wraps Vect_point_in_box() with assert and a message"""
|
|
|
+ self.assertTrue(libvect.Vect_point_in_box(x, y, z, self.c_bbox),
|
|
|
+ msg="Point should be inside the bbox")
|
|
|
+
|
|
|
+ def check_point_out_3d(self, x, y, z):
|
|
|
+ """Wraps Vect_point_in_box() with assert and a message"""
|
|
|
+ self.assertFalse(libvect.Vect_point_in_box(x, y, z, self.c_bbox),
|
|
|
+ msg="Point should be outside the bbox")
|
|
|
+
|
|
|
+ def test_bbox_2d_in(self):
|
|
|
+ """Check Vect_point_in_box_2d() function with 2D points inside bbox"""
|
|
|
+ self.check_point_in_2d(217, 130)
|
|
|
+ self.check_point_in_2d(219.999999, 125.000001)
|
|
|
+
|
|
|
+ def test_bbox_2d_out(self):
|
|
|
+ """Check Vect_point_in_box_2d() function with 2D points outside bbox"""
|
|
|
+ self.check_point_out_2d(100, 100)
|
|
|
+ self.check_point_out_2d(500, 593)
|
|
|
+ self.check_point_out_2d(-220, 130)
|
|
|
+ self.check_point_out_2d(220, -130)
|
|
|
+ self.check_point_out_2d(-220, -130)
|
|
|
+
|
|
|
+ def check_point_in_2d(self, x, y):
|
|
|
+ """Wraps Vect_point_in_box_2d() with assert, message and bbox"""
|
|
|
+ self.assertTrue(libvect.Vect_point_in_box_2d(x, y, self.c_bbox),
|
|
|
+ msg="Point should be inside the bbox")
|
|
|
+
|
|
|
+ def check_point_out_2d(self, x, y):
|
|
|
+ """Wraps Vect_point_in_box_2d() with assert, message and bbox"""
|
|
|
+ self.assertFalse(libvect.Vect_point_in_box_2d(x, y, self.c_bbox),
|
|
|
+ msg="Point should be outside the bbox")
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ test()
|