From bc0352452bcf5951551630b37bccefd96564aa37 Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Sun, 18 Sep 2011 22:53:22 +0000 Subject: [PATCH] more tests added + picking a seed before testing [SVN r74461] --- tests/main.cpp | 11 ++- tests/rtree_function.hpp | 150 +++++++++++++++++++++++++++------------ 2 files changed, 113 insertions(+), 48 deletions(-) diff --git a/tests/main.cpp b/tests/main.cpp index 06154803e..95dbe698f 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -10,14 +10,19 @@ #define BOOST_TEST_MODULE test_module_boost_geometry_index #include +#include + +BOOST_AUTO_TEST_CASE( first_test_case ) +{ + ::srand( (unsigned)::time(NULL) ); +} + #include #include #include -BOOST_AUTO_TEST_CASE( aaaa ) +BOOST_AUTO_TEST_CASE( last_test_case ) { - std::cout << "test\n"; - tests_rtree_filters_hpp(); #ifdef _MSC_VER diff --git a/tests/rtree_function.hpp b/tests/rtree_function.hpp index 04f56e17d..0a05a9fca 100644 --- a/tests/rtree_function.hpp +++ b/tests/rtree_function.hpp @@ -29,8 +29,8 @@ namespace helpers namespace bg = boost::geometry; typedef typename bg::index::traits::coordinate_type::type coord_t; - coord_t c1 = rand() / coord_t(RAND_MAX / m); - coord_t c2 = rand() / coord_t(RAND_MAX / w); + coord_t c1 = ::rand() / coord_t(RAND_MAX / m); + coord_t c2 = ::rand() / coord_t(RAND_MAX / w); bg::set(b, c1 - c2); bg::set(b, c1 + c2); @@ -48,7 +48,7 @@ namespace helpers namespace bg = boost::geometry; typedef typename bg::index::traits::coordinate_type::type coord_t; - coord_t c = rand() / coord_t(RAND_MAX / m); + coord_t c = ::rand() / coord_t(RAND_MAX / m); bg::set(p, c); } @@ -179,10 +179,10 @@ namespace helpers : pt(p), tr(t) {} - template - bool operator()(Indexable const& i1, Indexable const& i2) + template + bool operator()(Value const& v1, Value const& v2) { - return boost::geometry::index::mindist(pt, i1) < boost::geometry::index::mindist(pt, i2); + return boost::geometry::index::mindist(pt, tr(v1)) < boost::geometry::index::mindist(pt, tr(v2)); } Point const& pt; @@ -231,6 +231,53 @@ namespace helpers } } +template +struct tests_rtree_function_queries {}; + +template +struct tests_rtree_function_queries +{ + template + inline static void apply(Rtree const& t, Cont const& v) + { + namespace bgi = boost::geometry::index; + + helpers::random_query_check(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + + helpers::random_nearest_check(t, v, 5, helpers::value_randomizer

(10, 0), 3, bgi::empty); + helpers::random_nearest_check(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + } +}; + +template +struct tests_rtree_function_queries +{ + template + inline static void apply(Rtree const& t, Cont const& v) + { + namespace bgi = boost::geometry::index; + + helpers::random_query_check(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); + + helpers::random_nearest_check(t, v, 5, helpers::value_randomizer

(10, 0), 3, bgi::empty); + helpers::random_nearest_check(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + } +}; + template void tests_rtree_function() { @@ -240,23 +287,13 @@ void tests_rtree_function() bgi::rtree t; std::vector v; + typedef typename bgi::rtree::indexable_type I; typedef typename bgi::rtree::box_type B; typedef typename bgi::traits::point_type::type P ; helpers::random_insert(t, v, 10, helpers::value_randomizer(10, 1)); - helpers::random_query_check(t, v, 5, helpers::value_randomizer(10, 5)); - helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); - helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); - helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); - helpers::random_query_check >(t, v, 5, helpers::value_randomizer(10, 5)); - - helpers::random_nearest_check(t, v, 5, helpers::value_randomizer

(10, 0), 3, bgi::empty); - helpers::random_nearest_check(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); - helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); - helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); - helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); - helpers::random_nearest_check >(t, v, 5, helpers::value_randomizer

(10, 0), 3, helpers::value_randomizer(10, 5)); + tests_rtree_function_queries::type>::apply(t, v); } BOOST_AUTO_TEST_CASE(tests_rtree_function_box3f) @@ -291,36 +328,59 @@ BOOST_AUTO_TEST_CASE(tests_rtree_function_box2f) tests_rtree_function< val_t, bgi::rstar<4, 2> >(); } -//BOOST_AUTO_TEST_CASE(tests_rtree_function_point2f) -//{ -// std::cout << "tests/rtree_function_point2f\n"; -// -// namespace bg = boost::geometry; -// namespace bgi = bg::index; -// -// typedef bg::model::point P; -// typedef P val_t; -// -// tests_rtree_function< val_t, bgi::linear<4, 2> >(); -// tests_rtree_function< val_t, bgi::quadratic<4, 2> >(); -// tests_rtree_function< val_t, bgi::rstar<4, 2> >(); -//} +BOOST_AUTO_TEST_CASE(tests_rtree_function_point2f) +{ + std::cout << "tests/rtree_function_point2f\n"; + namespace bg = boost::geometry; + namespace bgi = bg::index; - // std::cout << "std::pair\n"; - // { - // typedef bg::model::point P; - // typedef bg::model::box

B; - // typedef std::pair V; + typedef bg::model::point P; + typedef P val_t; - // bgi::rtree t; - // bgi::insert(t, V(B(P(0, 0), P(1, 1)), 0)); - // bgi::insert(t, V(B(P(2, 2), P(3, 3)), 1)); - // bgi::insert(t, V(B(P(4, 4), P(5, 5)), 2)); - // bgi::insert(t, V(B(P(6, 6), P(7, 7)), 3)); - // bgi::insert(t, V(B(P(8, 8), P(9, 9)), 4)); - // std::cerr << t; - // } + tests_rtree_function< val_t, bgi::linear<4, 2> >(); + tests_rtree_function< val_t, bgi::quadratic<4, 2> >(); + tests_rtree_function< val_t, bgi::rstar<4, 2> >(); +} + +namespace helpers { + +template +struct value_randomizer< std::pair > +{ + typedef std::pair value_type; + + typedef typename boost::geometry::index::traits::coordinate_type::type coord_t; + + inline value_randomizer(coord_t mm, coord_t ww) + : r(mm, ww) + {} + + inline value_type operator()() const + { + return std::make_pair(r(), ::rand()); + } + + value_randomizer r; +}; + +} // namespace helpers + +BOOST_AUTO_TEST_CASE(tests_rtree_function_pair_box2f_int) +{ + std::cout << "tests/rtree_function_pair_box2f_int\n"; + + namespace bg = boost::geometry; + namespace bgi = bg::index; + + typedef bg::model::point P; + typedef bg::model::box

B; + typedef std::pair V; + + tests_rtree_function< V, bgi::linear<4, 2> >(); + tests_rtree_function< V, bgi::quadratic<4, 2> >(); + tests_rtree_function< V, bgi::rstar<4, 2> >(); +} // std::cout << "-------------------------------------------------\n"; // std::cout << "-------------------------------------------------\n";