#include "./test.hpp"
-#ifdef BOOST_CONVERT_INTEL_SFINAE_BROKEN
+#if defined(BOOST_CONVERT_IS_NOT_SUPPORTED)
int main(int, char const* []) { return 0; }
#else
#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>
using std::wstring;
using boost::convert;
-struct boost::cnv::by_default : public boost::cnv::strtol {};
+struct boost::cnv::by_default : boost::cnv::strtol {};
//]
static
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);
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());
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";
//]
}
+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()
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);
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()
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();