Add test for new GetMinDist
This commit is contained in:
		
							parent
							
								
									782baf54a3
								
							
						
					
					
						commit
						84a604f70b
					
				| @ -436,5 +436,72 @@ BOOST_AUTO_TEST_CASE(regression_test) | ||||
|     BOOST_CHECK_EQUAL(result_ln, result); | ||||
| } | ||||
| 
 | ||||
| void TestRectangle(double width, double height, double center_lat, double center_lon) | ||||
| { | ||||
|     FixedPointCoordinate center(center_lat*COORDINATE_PRECISION, center_lon*COORDINATE_PRECISION); | ||||
| 
 | ||||
|     TestStaticRTree::RectangleT rect; | ||||
|     rect.min_lat = center.lat - height/2.0 * COORDINATE_PRECISION; | ||||
|     rect.max_lat = center.lat + height/2.0 * COORDINATE_PRECISION; | ||||
|     rect.min_lon = center.lon - width/2.0  * COORDINATE_PRECISION; | ||||
|     rect.max_lon = center.lon + width/2.0  * COORDINATE_PRECISION; | ||||
| 
 | ||||
|     unsigned offset = 5*COORDINATE_PRECISION; | ||||
|     FixedPointCoordinate north(rect.max_lat + offset, center.lon); | ||||
|     FixedPointCoordinate south(rect.min_lat - offset, center.lon); | ||||
|     FixedPointCoordinate west(center.lat, rect.min_lon - offset); | ||||
|     FixedPointCoordinate east(center.lat, rect.max_lon + offset); | ||||
|     FixedPointCoordinate north_east(rect.max_lat + offset, rect.max_lon + offset); | ||||
|     FixedPointCoordinate north_west(rect.max_lat + offset, rect.min_lon - offset); | ||||
|     FixedPointCoordinate south_east(rect.min_lat - offset, rect.max_lon + offset); | ||||
|     FixedPointCoordinate south_west(rect.min_lat - offset, rect.min_lon - offset); | ||||
| 
 | ||||
| 
 | ||||
|     /* Distance to line segments of rectangle */ | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(north), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(north, FixedPointCoordinate(rect.max_lat, north.lon)) | ||||
|     ); | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(south), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(south, FixedPointCoordinate(rect.min_lat, south.lon)) | ||||
|     ); | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(west), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(west, FixedPointCoordinate(west.lat, rect.min_lon)) | ||||
|     ); | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(east), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(east, FixedPointCoordinate(east.lat, rect.max_lon)) | ||||
|     ); | ||||
| 
 | ||||
|     /* Distance to corner points */ | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(north_east), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(north_east, FixedPointCoordinate(rect.max_lat, rect.max_lon)) | ||||
|     ); | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(north_west), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(north_west, FixedPointCoordinate(rect.max_lat, rect.min_lon)) | ||||
|     ); | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(south_east), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(south_east, FixedPointCoordinate(rect.min_lat, rect.max_lon)) | ||||
|     ); | ||||
|     BOOST_CHECK_EQUAL( | ||||
|         rect.GetMinDist(south_west), | ||||
|         FixedPointCoordinate::ApproximateEuclideanDistance(south_west, FixedPointCoordinate(rect.min_lat, rect.min_lon)) | ||||
|     ); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(rectangle_test) | ||||
| { | ||||
|     TestRectangle(10, 10, 5, 5); | ||||
|     TestRectangle(10, 10, -5, 5); | ||||
|     TestRectangle(10, 10, 5, -5); | ||||
|     TestRectangle(10, 10, -5, -5); | ||||
|     TestRectangle(10, 10, 0, 0); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_SUITE_END() | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user