]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/sort/test/integer_sort_test.cpp
update sources to v12.2.4
[ceph.git] / ceph / src / boost / libs / sort / test / integer_sort_test.cpp
index 2a97de01596c464cc00663422f161d4a65119740..69f510b170a7b78e0c501323e6afc1f1bba5c8f1 100644 (file)
-//  Boost Sort library int_test.cpp file  ------------------------------------//
-
-//  Copyright Steven Ross 2009-2014. 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)
-
-//  See http://www.boost.org/libs/sort for library home page.
-
-#include <boost/cstdint.hpp>
-#include <boost/sort/spreadsort/spreadsort.hpp>
-// Include unit test framework
-#include <boost/test/included/test_exec_monitor.hpp>
-#include <boost/test/test_tools.hpp>
-#include <vector>
-
-#include <iostream>
-
-
-using namespace std;
-using namespace boost::sort::spreadsort;
-
-struct rightshift {
-  int operator()(int x, unsigned offset) { return x >> offset; }
-};
-
-struct rightshift_max {
-  boost::intmax_t operator()(const boost::intmax_t &x, unsigned offset) {
-    return x >> offset;
-  }
-};
-
-struct negrightshift {
-  int operator()(const int &x, const unsigned offset) { return -(x >> offset); }
-};
-
-struct negrightshift_max {
-  boost::intmax_t operator()(const boost::intmax_t &x, const unsigned offset) {
-    return -(x >> offset);
-  }
-};
-
-boost::int32_t 
-rand_32(bool sign = true) {
-   boost::int32_t result = rand() | (rand()<< 16);
-   if (rand() % 2)
-     result |= 1 << 15;
-   //Adding the sign bit
-   if (sign && (rand() % 2))
-     result *= -1;
-   return result;
-}
-
-void int_test()
-{
-  // Prepare inputs
-  vector<int> base_vec;
-  unsigned count = 100000;
-  srand(1);
-  //Generating semirandom numbers
-  for (unsigned u = 0; u < count; ++u)
-    base_vec.push_back(rand_32());
-  vector<int> sorted_vec = base_vec;
-  vector<int> test_vec = base_vec;
-  std::sort(sorted_vec.begin(), sorted_vec.end());
-  //Testing basic call
-  integer_sort(test_vec.begin(), test_vec.end());
-  BOOST_CHECK(test_vec == sorted_vec);
-  //boost::sort::spreadsort variant
-  test_vec = base_vec;
-  boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
-  BOOST_CHECK(test_vec == sorted_vec);
-  //One functor
-  test_vec = base_vec;
-  integer_sort(test_vec.begin(), test_vec.end(), rightshift());
-  BOOST_CHECK(test_vec == sorted_vec);
-  //Both functors
-  test_vec = base_vec;
-  integer_sort(test_vec.begin(), test_vec.end(), rightshift(), less<int>());
-  BOOST_CHECK(test_vec == sorted_vec);
-  //reverse order
-  std::sort(sorted_vec.begin(), sorted_vec.end(), greater<int>());
-  integer_sort(test_vec.begin(), test_vec.end(), negrightshift(),
-               greater<int>());
-  BOOST_CHECK(test_vec == sorted_vec);
-
-  //Making sure we're correctly sorting boost::intmax_ts; should use std::sort
-  vector<boost::intmax_t> long_base_vec;
-  for (unsigned u = 0; u < base_vec.size(); ++u)
-    long_base_vec.push_back((((boost::intmax_t)rand_32()) <<
-                             ((8 * sizeof(int)) -1)) + rand_32(false));
-  vector<boost::intmax_t> long_sorted_vec = long_base_vec;
-  vector<boost::intmax_t> long_test_vec = long_base_vec;
-  integer_sort(long_test_vec.begin(), long_test_vec.end());
-  std::sort(long_sorted_vec.begin(), long_sorted_vec.end());
-  BOOST_CHECK(long_test_vec == long_sorted_vec);
-  //One functor
-  long_test_vec = long_base_vec;
-  integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max());
-  BOOST_CHECK(long_test_vec == long_sorted_vec);
-  //Both functors
-  long_test_vec = long_base_vec;
-  integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max(),
-               less<boost::intmax_t>());
-  BOOST_CHECK(long_test_vec == long_sorted_vec);
-  //reverse order
-  std::sort(long_sorted_vec.begin(), long_sorted_vec.end(),
-            greater<boost::intmax_t>());
-  integer_sort(long_test_vec.begin(), long_test_vec.end(), negrightshift_max(),
-               greater<boost::intmax_t>());
-  BOOST_CHECK(long_test_vec == long_sorted_vec);
-}
-
-// Verify that 0 and 1 elements work correctly.
-void corner_test() {
-  vector<int> test_vec;
-  boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
-  const int test_value = 42;
-  test_vec.push_back(test_value);
-  boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
-  BOOST_CHECK(test_vec.size() == 1);
-  BOOST_CHECK(test_vec[0] == test_value);
-}
-
-// test main 
-int test_main( int, char*[] )
-{
-  int_test();
-  corner_test();    
-  return 0;
-}
+//  Boost Sort library int_test.cpp file  ------------------------------------//\r
+\r
+//  Copyright Steven Ross 2009-2014. Use, modification and\r
+//  distribution is subject to the Boost Software License, Version\r
+//  1.0. (See accompanying file LICENSE_1_0.txt or copy at\r
+//  http://www.boost.org/LICENSE_1_0.txt)\r
+\r
+//  See http://www.boost.org/libs/sort for library home page.\r
+\r
+#include <boost/cstdint.hpp>\r
+#include <boost/sort/spreadsort/spreadsort.hpp>\r
+// Include unit test framework\r
+#include <boost/test/included/test_exec_monitor.hpp>\r
+#include <boost/test/test_tools.hpp>\r
+#include <vector>\r
+\r
+#include <iostream>\r
+\r
+\r
+using namespace std;\r
+using namespace boost::sort::spreadsort;\r
+\r
+struct rightshift {\r
+  int operator()(int x, unsigned offset) { return x >> offset; }\r
+};\r
+\r
+struct rightshift_max {\r
+  boost::intmax_t operator()(const boost::intmax_t &x, unsigned offset) {\r
+    return x >> offset;\r
+  }\r
+};\r
+\r
+struct negrightshift {\r
+  int operator()(const int &x, const unsigned offset) { return -(x >> offset); }\r
+};\r
+\r
+struct negrightshift_max {\r
+  boost::intmax_t operator()(const boost::intmax_t &x, const unsigned offset) {\r
+    return -(x >> offset);\r
+  }\r
+};\r
+\r
+boost::int32_t \r
+rand_32(bool sign = true) {\r
+   boost::int32_t result = rand() | (rand()<< 16);\r
+   if (rand() % 2)\r
+     result |= 1 << 15;\r
+   //Adding the sign bit\r
+   if (sign && (rand() % 2))\r
+     result *= -1;\r
+   return result;\r
+}\r
+\r
+void int_test()\r
+{\r
+  // Prepare inputs\r
+  vector<int> base_vec;\r
+  unsigned count = 100000;\r
+  srand(1);\r
+  //Generating semirandom numbers\r
+  for (unsigned u = 0; u < count; ++u)\r
+    base_vec.push_back(rand_32());\r
+  vector<int> sorted_vec = base_vec;\r
+  vector<int> test_vec = base_vec;\r
+  std::sort(sorted_vec.begin(), sorted_vec.end());\r
+  //Testing basic call\r
+  integer_sort(test_vec.begin(), test_vec.end());\r
+  BOOST_CHECK(test_vec == sorted_vec);\r
+  //boost::sort::spreadsort variant\r
+  test_vec = base_vec;\r
+  boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());\r
+  BOOST_CHECK(test_vec == sorted_vec);\r
+  //One functor\r
+  test_vec = base_vec;\r
+  integer_sort(test_vec.begin(), test_vec.end(), rightshift());\r
+  BOOST_CHECK(test_vec == sorted_vec);\r
+  //Both functors\r
+  test_vec = base_vec;\r
+  integer_sort(test_vec.begin(), test_vec.end(), rightshift(), less<int>());\r
+  BOOST_CHECK(test_vec == sorted_vec);\r
+  //reverse order\r
+  std::sort(sorted_vec.begin(), sorted_vec.end(), greater<int>());\r
+  integer_sort(test_vec.begin(), test_vec.end(), negrightshift(),\r
+               greater<int>());\r
+  BOOST_CHECK(test_vec == sorted_vec);\r
+\r
+  //Making sure we're correctly sorting boost::intmax_ts; should use std::sort\r
+  vector<boost::intmax_t> long_base_vec;\r
+  for (unsigned u = 0; u < base_vec.size(); ++u)\r
+    long_base_vec.push_back((((boost::intmax_t)rand_32()) <<\r
+                             ((8 * sizeof(int)) -1)) + rand_32(false));\r
+  vector<boost::intmax_t> long_sorted_vec = long_base_vec;\r
+  vector<boost::intmax_t> long_test_vec = long_base_vec;\r
+  integer_sort(long_test_vec.begin(), long_test_vec.end());\r
+  std::sort(long_sorted_vec.begin(), long_sorted_vec.end());\r
+  BOOST_CHECK(long_test_vec == long_sorted_vec);\r
+  //One functor\r
+  long_test_vec = long_base_vec;\r
+  integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max());\r
+  BOOST_CHECK(long_test_vec == long_sorted_vec);\r
+  //Both functors\r
+  long_test_vec = long_base_vec;\r
+  integer_sort(long_test_vec.begin(), long_test_vec.end(), rightshift_max(),\r
+               less<boost::intmax_t>());\r
+  BOOST_CHECK(long_test_vec == long_sorted_vec);\r
+  //reverse order\r
+  std::sort(long_sorted_vec.begin(), long_sorted_vec.end(),\r
+            greater<boost::intmax_t>());\r
+  integer_sort(long_test_vec.begin(), long_test_vec.end(), negrightshift_max(),\r
+               greater<boost::intmax_t>());\r
+  BOOST_CHECK(long_test_vec == long_sorted_vec);\r
+}\r
+\r
+// Verify that 0 and 1 elements work correctly.\r
+void corner_test() {\r
+  vector<int> test_vec;\r
+  boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());\r
+  const int test_value = 42;\r
+  test_vec.push_back(test_value);\r
+  boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());\r
+  BOOST_CHECK(test_vec.size() == 1);\r
+  BOOST_CHECK(test_vec[0] == test_value);\r
+}\r
+\r
+// test main \r
+int test_main( int, char*[] )\r
+{\r
+  int_test();\r
+  corner_test();    \r
+  return 0;\r
+}\r