/home/martin/workspace/OpenStreetNav/src/test/projection.cpp
Go to the documentation of this file.
00001 /*
00002  * projection.cpp
00003  *
00004  *  Created on: Nov 12, 2011
00005  *      Author: martin
00006  */
00007 
00008 #include <boost/test/unit_test.hpp>
00009 #include <boost/test/floating_point_comparison.hpp>
00010 #include "../projection/projection.h"
00011 
00012 BOOST_AUTO_TEST_SUITE(projection)
00013 
00014 BOOST_AUTO_TEST_CASE(some)
00015 {
00016     proj::OrthoProjection proj(geo::Point(36, 50), 1);
00017     auto res = proj.project(36, 48);
00018     BOOST_CHECK_LT(res.x, 0);
00019     BOOST_CHECK_GT(res.y, 0);
00020     res = proj.project(37, 50);
00021     BOOST_CHECK(abs(res.x) < 0.0000001);
00022     BOOST_CHECK_GT(res.y, 0);
00023     proj = proj::OrthoProjection(geo::Point(-36, 50), 1);
00024     res = proj.project(-36, 48);
00025     BOOST_CHECK_LT(res.x, 0);
00026     BOOST_CHECK_LT(res.y, 0);
00027     res = proj.project(-37, 50);
00028     BOOST_CHECK(abs(res.x) < 0.0000001);
00029     BOOST_CHECK_LT(res.y, 0);
00030     proj = proj::OrthoProjection(geo::Point(-36, -50), 1);
00031     res = proj.project(-36, -48);
00032     BOOST_CHECK_GT(res.x, 0);
00033     BOOST_CHECK_LT(res.y, 0);
00034     res = proj.project(-37, -50);
00035     BOOST_CHECK(abs(res.x) < 0.0000001);
00036     BOOST_CHECK_LT(res.y, 0);
00037     proj = proj::OrthoProjection(geo::Point(36, -50), 1);
00038     res = proj.project(36, -48);
00039     BOOST_CHECK_GT(res.x, 0);
00040     BOOST_CHECK_GT(res.y, 0);
00041     res = proj.project(37, -50);
00042     BOOST_CHECK(abs(res.x) < 0.0000001);
00043     BOOST_CHECK_GT(res.y, 0);
00044 }
00045 
00046 BOOST_AUTO_TEST_CASE(border)
00047 {
00048     proj::OrthoProjection proj(geo::Point(0, 0), 1);
00049     auto res = proj.project(90, 0);
00050     BOOST_CHECK(abs(res.x) < 0.0000001);
00051     BOOST_CHECK(abs(res.y - 1) < 0.0000001);
00052     res = proj.project(0, 90);
00053     BOOST_CHECK(abs(res.x - 1) < 0.0000001);
00054     BOOST_CHECK(abs(res.y) < 0.0000001);
00055     res = proj.project(-90, 0);
00056     BOOST_CHECK(abs(res.x) < 0.0000001);
00057     BOOST_CHECK(abs(res.y + 1) < 0.0000001);
00058     res = proj.project(0, -90);
00059     BOOST_CHECK(abs(res.x + 1) < 0.0000001);
00060     BOOST_CHECK(abs(res.y) < 0.0000001);
00061 }
00062 
00063 BOOST_AUTO_TEST_CASE(zero)
00064 {
00065     proj::OrthoProjection proj(geo::Point(0, 0), 1);
00066     auto res = proj.project(0, 0);
00067     BOOST_CHECK(abs(res.x) < 0.0000001);
00068     BOOST_CHECK(abs(res.y) < 0.0000001);
00069     auto res2 = proj.unproject(0, 0);
00070     BOOST_CHECK(abs(res2.lat) < 0.0000001);
00071     BOOST_CHECK(abs(res2.lon) < 0.0000001);
00072     proj = proj::OrthoProjection(geo::Point(90, 0), 1);
00073     res = proj.project(90, 0);
00074     BOOST_CHECK(abs(res.x) < 0.0000001);
00075     BOOST_CHECK(abs(res.y) < 0.0000001);
00076     proj = proj::OrthoProjection(geo::Point(45, 100), 1);
00077     res = proj.project(45, 100);
00078     BOOST_CHECK(abs(res.x) < 0.0000001);
00079     BOOST_CHECK(abs(res.y) < 0.0000001);
00080 }
00081 
00082 BOOST_AUTO_TEST_CASE(inverse)
00083 {
00084 
00085     proj::OrthoProjection proj(geo::Point(-43, 65), 100);
00086     for (int i = -10; i <= 10; ++i)
00087     {
00088         for (int j = -10; j <= 10; ++j)
00089         {
00090             proj::FlatPoint p2 = proj.project(-43 + i, 65 + j);
00091             geo::Point p = proj.unproject(p2);
00092             BOOST_CHECK(abs(p.lat - (-43.0 + i)) <= 0.0000001);
00093             BOOST_CHECK(abs(p.lon - (65.0 + j)) <= 0.0000001);
00094             p = proj.unproject(i, j);
00095             p2 = proj.project(p);
00096             if (abs(p2.y - j) > 0)
00097             {
00098                 std::cout << abs(p2.y - j) << std::endl;
00099             }
00100             BOOST_CHECK(abs(p2.x - i) <= 0.0000001);
00101             BOOST_CHECK(abs(p2.y - j) <= 0.0000001);
00102         }
00103     }
00104 }
00105 
00106 BOOST_AUTO_TEST_SUITE_END()
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines