benchmark3.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Boost.Geometry Index
  2. // Additional tests
  3. // Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
  4. // Use, modification and distribution is subject to the Boost Software License,
  5. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. #include <iostream>
  8. #include <boost/geometry.hpp>
  9. #include <boost/geometry/index/rtree.hpp>
  10. #include <boost/chrono.hpp>
  11. #include <boost/foreach.hpp>
  12. #include <boost/random.hpp>
  13. #include <set>
  14. int main()
  15. {
  16. namespace bg = boost::geometry;
  17. namespace bgi = bg::index;
  18. typedef boost::chrono::thread_clock clock_t;
  19. typedef boost::chrono::duration<float> dur_t;
  20. size_t stored_count = 100000;
  21. std::vector< std::pair<float, float> > coords;
  22. //randomize values
  23. {
  24. boost::mt19937 rng;
  25. //rng.seed(static_cast<unsigned int>(std::time(0)));
  26. float max_val = static_cast<float>(stored_count / 10);
  27. boost::uniform_real<float> range(-max_val, max_val);
  28. boost::variate_generator<boost::mt19937&, boost::uniform_real<float> > rnd(rng, range);
  29. coords.reserve(stored_count);
  30. std::cout << "randomizing data\n";
  31. for ( size_t i = 0 ; i < stored_count ; ++i )
  32. {
  33. coords.push_back(std::make_pair(rnd(), rnd()));
  34. }
  35. std::cout << "randomized\n";
  36. }
  37. typedef bg::model::point<float, 2, bg::cs::cartesian> P;
  38. typedef bgi::rtree<P, bgi::dynamic_linear > RTL;
  39. typedef bgi::rtree<P, bgi::dynamic_quadratic > RTQ;
  40. typedef bgi::rtree<P, bgi::dynamic_rstar > RTR;
  41. for ( size_t m = 4 ; m < 33 ; m += 2 )
  42. {
  43. size_t mm = ::ceil(m / 3.0f);
  44. RTL rtl(bgi::dynamic_linear(m, mm));
  45. RTQ rtq(bgi::dynamic_quadratic(m, mm));
  46. RTR rtr(bgi::dynamic_rstar(m, mm));
  47. std::cout << m << ' ' << mm << ' ';
  48. // inserting test
  49. {
  50. clock_t::time_point start = clock_t::now();
  51. for (size_t i = 0 ; i < stored_count ; ++i )
  52. {
  53. P p(coords[i].first, coords[i].second);
  54. rtl.insert(p);
  55. }
  56. dur_t time = clock_t::now() - start;
  57. std::cout << time.count() << ' ';
  58. start = clock_t::now();
  59. for (size_t i = 0 ; i < stored_count ; ++i )
  60. {
  61. P p(coords[i].first, coords[i].second);
  62. rtq.insert(p);
  63. }
  64. time = clock_t::now() - start;
  65. std::cout << time.count() << ' ';
  66. start = clock_t::now();
  67. for (size_t i = 0 ; i < stored_count ; ++i )
  68. {
  69. float v = i / 100.0f;
  70. P p(coords[i].first, coords[i].second);
  71. rtr.insert(p);
  72. }
  73. time = clock_t::now() - start;
  74. std::cout << time.count() << ' ';
  75. }
  76. std::cout << '\n';
  77. }
  78. return 0;
  79. }