]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/convert/test/strtol_converter.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / convert / test / strtol_converter.cpp
index b7cc5a5880f17d5530da7239bd0665db24d2bf55..02bc6f50b37670e22c5b19ecd115f3f95a3b1ebf 100644 (file)
@@ -5,7 +5,7 @@
 
 #include "./test.hpp"
 
-#ifdef BOOST_CONVERT_INTEL_SFINAE_BROKEN
+#if defined(BOOST_CONVERT_IS_NOT_SUPPORTED)
 int main(int, char const* []) { return 0; }
 #else
 
@@ -17,6 +17,7 @@ int main(int, char const* []) { return 0; }
 #include <boost/random/uniform_int_distribution.hpp>
 #include <boost/random/uniform_01.hpp>
 #include <boost/lexical_cast.hpp>
+#include <boost/utility/string_view.hpp>
 
 //[strtol_basic_deployment_header
 #include <boost/convert.hpp>
@@ -26,7 +27,7 @@ using std::string;
 using std::wstring;
 using boost::convert;
 
-struct boost::cnv::by_default : public boost::cnv::strtol {};
+struct boost::cnv::by_default : boost::cnv::strtol {};
 //]
 
 static
@@ -37,6 +38,7 @@ test_str_to_uint()
     string const         neg_str = "-11";
     string const         std_str = "11";
     char const* const      c_str = "12";
+    boost::string_view     v_str = boost::string_view(c_str, 1);
     unsigned int const      imax = (std::numeric_limits<unsigned int>::max)();
     unsigned long int const lmax = (std::numeric_limits<unsigned long int>::max)();
     std::string const   imax_str = boost::lexical_cast<std::string>(imax);
@@ -48,6 +50,7 @@ test_str_to_uint()
     BOOST_TEST( 0 == convert<unsigned long int>(neg_str).value_or(0));
     BOOST_TEST(11 == convert<unsigned int>(std_str).value());
     BOOST_TEST(12 == convert<unsigned int>(  c_str).value());
+    BOOST_TEST( 1 == convert<unsigned int>(  v_str).value_or(0));
     BOOST_TEST(11 == convert<unsigned long int>(std_str).value());
     BOOST_TEST(12 == convert<unsigned long int>(  c_str).value());
     BOOST_TEST(imax == convert<     unsigned int>(imax_str).value());
@@ -59,13 +62,15 @@ void
 test_str_to_int()
 {
     //[strtol_basic_deployment
-    string const    bad_str = "not an int";
-    string const    std_str = "-11";
-    char const* const c_str = "-12";
+    string const     bad_str = "not an int";
+    string const     std_str = "-11";
+    char const* const  c_str = "-12";
+    boost::string_view v_str = boost::string_view(c_str, 2);
 
     BOOST_TEST( -1 == convert<int>(bad_str).value_or(-1));
     BOOST_TEST(-11 == convert<int>(std_str).value());
     BOOST_TEST(-12 == convert<int>(  c_str).value());
+    BOOST_TEST( -1 == convert<int>(  v_str).value_or(0));
     //]
     wstring const      bad_wstr = L"not an int";
     wstring const      wstd_str = L"-11";
@@ -214,6 +219,22 @@ test_base()
     //]
 }
 
+static
+void
+test_upper()
+{
+//    boost::cnv::strtol cnv;
+//    char const*    c_lcase =  "abcde";
+//    char const*    c_ucase =  "ABCDE";
+//    wchar_t const* w_lcase = L"abcde";
+//    wchar_t const* w_ucase = L"ABCDE";
+//
+//    BOOST_TEST(c_lcase == convert< string>(c_lcase, cnv(arg::uppercase = false)).value_or(""));
+//    BOOST_TEST(c_ucase == convert< string>(c_lcase, cnv(arg::uppercase =  true)).value_or(""));
+//    BOOST_TEST(w_ucase == convert<wstring>(w_lcase, cnv(arg::uppercase = false)).value_or(""));
+//    BOOST_TEST(w_ucase == convert<wstring>(w_lcase, cnv(arg::uppercase =  true)).value_or(""));
+}
+
 static
 void
 test_skipws()
@@ -251,11 +272,13 @@ static
 std::pair<double, int>
 get_random()
 {
-    static boost::random::mt19937                          gen (::time(0));
-    static boost::random::uniform_int_distribution<> precision (0, 6);
-    static boost::random::uniform_int_distribution<>  int_part (0, SHRT_MAX);
-    static boost::random::uniform_01<double>          fraction; // uniform double in [0,1)
-    static bool                                           sign;
+    namespace rdm = boost::random;
+
+    static rdm::mt19937                          gen (::time(0));
+    static rdm::uniform_int_distribution<> precision (0, 6);
+    static rdm::uniform_int_distribution<>  int_part (0, SHRT_MAX);
+    static rdm::uniform_01<double>          fraction; // uniform double in [0,1)
+    static bool                                 sign;
 
     double dbl = (int_part(gen) + fraction(gen)) * ((sign = !sign) ? 1 : -1);
 
@@ -278,6 +301,16 @@ compare(std::pair<double, int> pair)
         printf("dbl=%.12f(%d).strtol/printf=%s/%s.\n", pair.first, pair.second, s1.c_str(), s2.c_str());
 }
 
+static
+void
+test_str_to_dbl()
+{
+    char const* const c_str = "1.23456";
+
+    BOOST_TEST(1.2  == convert<double>(boost::string_view(c_str, 3)).value_or(0));
+    BOOST_TEST(1.23 == convert<double>(boost::string_view(c_str, 4)).value_or(0));
+}
+
 static
 void
 test_dbl_to_str()
@@ -360,7 +393,9 @@ main(int, char const* [])
     test_int_to_str();
     test_uint_to_str();
     test_base();
+    test_upper();
     test_skipws();
+    test_str_to_dbl();
     test_dbl_to_str();
     test_width();
     test_user_string();