123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // Boost.Geometry Index
- // Rtree tests generator
- // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
- // Use, modification and distribution is subject to the Boost Software License,
- // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #include <fstream>
- #include <vector>
- #include <string>
- #include <boost/foreach.hpp>
- #include <boost/assert.hpp>
- #include <boost/tuple/tuple.hpp>
- int main()
- {
- typedef boost::tuple<std::string, std::string> CT;
- std::vector<CT> coordinate_types;
- coordinate_types.push_back(boost::make_tuple("double", "d"));
- //coordinate_types.push_back(boost::make_tuple("int", "i"));
- //coordinate_types.push_back(boost::make_tuple("float", "f"));
- std::vector<std::string> dimensions;
- dimensions.push_back("2");
- dimensions.push_back("3");
- typedef boost::tuple<std::string, std::string> P;
- std::vector<P> parameters;
- parameters.push_back(boost::make_tuple("bgi::linear<5, 2>()", "lin"));
- parameters.push_back(boost::make_tuple("bgi::dynamic_linear(5, 2)", "dlin"));
- parameters.push_back(boost::make_tuple("bgi::quadratic<5, 2>()", "qua"));
- parameters.push_back(boost::make_tuple("bgi::dynamic_quadratic(5, 2)", "dqua"));
- parameters.push_back(boost::make_tuple("bgi::rstar<5, 2>()", "rst"));
- parameters.push_back(boost::make_tuple("bgi::dynamic_rstar(5, 2)","drst"));
-
- std::vector<std::string> indexables;
- indexables.push_back("p");
- indexables.push_back("b");
- indexables.push_back("s");
- typedef std::pair<std::string, std::string> TS;
- std::vector<TS> testsets;
- testsets.push_back(std::make_pair("testset::modifiers", "mod"));
- testsets.push_back(std::make_pair("testset::queries", "que"));
- testsets.push_back(std::make_pair("testset::additional", "add"));
- BOOST_FOREACH(P const& p, parameters)
- {
- BOOST_FOREACH(TS const& ts, testsets)
- {
- BOOST_FOREACH(std::string const& i, indexables)
- {
- BOOST_FOREACH(std::string const& d, dimensions)
- {
- // If the I is Segment, generate only for 2d
- if ( i == "s" && d != "2" )
- {
- continue;
- }
- BOOST_FOREACH(CT const& c, coordinate_types)
- {
- std::string filename = std::string() +
- "rtree_" + boost::get<1>(p) + '_' + ts.second + '_' + i + d + boost::get<1>(c) + ".cpp";
- std::ofstream f(filename.c_str(), std::ios::trunc);
- f <<
- "// Boost.Geometry Index\n" <<
- "// Unit Test\n" <<
- "\n" <<
- "// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.\n" <<
- "\n" <<
- "// Use, modification and distribution is subject to the Boost Software License,\n" <<
- "// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at\n" <<
- "// http://www.boost.org/LICENSE_1_0.txt)\n" <<
- "\n";
- f <<
- "#include <rtree/test_rtree.hpp>\n" <<
- "\n";
- std::string indexable_type;
- std::string point_type = std::string("bg::model::point<") + boost::get<0>(c) + ", " + d + ", bg::cs::cartesian>";
- if ( i == "p" )
- indexable_type = point_type;
- else if ( i == "b" )
- indexable_type = std::string("bg::model::box< ") + point_type + " >";
- else if ( i == "s" )
- indexable_type = std::string("bg::model::segment< ") + point_type + " >";
- else
- BOOST_ASSERT(false);
- f <<
- "int test_main(int, char* [])\n" <<
- "{\n" <<
- " typedef " << indexable_type << " Indexable;\n" <<
- " " << ts.first << "<Indexable>(" << boost::get<0>(p) << ", std::allocator<int>());\n" <<
- " return 0;\n" <<
- "}\n";
- }
- }
- }
- }
- }
- return 0;
- }
|