lexical_cast_try_lexical_convert.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Unit test for boost::lexical_cast.
  2. //
  3. // See http://www.boost.org for most recent version, including documentation.
  4. //
  5. // Copyright Antony Polukhin, 2014-2019.
  6. //
  7. // Distributed under the Boost
  8. // Software License, Version 1.0. (See accompanying file
  9. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).
  10. #include <boost/config.hpp>
  11. #include <boost/lexical_cast/try_lexical_convert.hpp>
  12. #include <boost/test/unit_test.hpp>
  13. using namespace boost::conversion;
  14. void try_uncommon_cases()
  15. {
  16. std::string sres;
  17. const bool res1 = try_lexical_convert(std::string("Test string"), sres);
  18. BOOST_CHECK(res1);
  19. BOOST_CHECK_EQUAL(sres, "Test string");
  20. volatile int vires;
  21. const bool res2 = try_lexical_convert(100, vires);
  22. BOOST_CHECK(res2);
  23. BOOST_CHECK_EQUAL(vires, 100);
  24. const bool res3 = try_lexical_convert("Test string", sres);
  25. BOOST_CHECK(res3);
  26. BOOST_CHECK_EQUAL(sres, "Test string");
  27. const bool res4 = try_lexical_convert("Test string", sizeof("Test string") - 1, sres);
  28. BOOST_CHECK(res4);
  29. BOOST_CHECK_EQUAL(sres, "Test string");
  30. int ires;
  31. BOOST_CHECK(!try_lexical_convert("Test string", ires));
  32. BOOST_CHECK(!try_lexical_convert(1.1, ires));
  33. BOOST_CHECK(!try_lexical_convert(-1.9, ires));
  34. BOOST_CHECK(!try_lexical_convert("1.1", ires));
  35. BOOST_CHECK(!try_lexical_convert("1000000000000000000000000000000000000000", ires));
  36. }
  37. void try_common_cases()
  38. {
  39. int ires = 0;
  40. const bool res1 = try_lexical_convert(std::string("100"), ires);
  41. BOOST_CHECK(res1);
  42. BOOST_CHECK_EQUAL(ires, 100);
  43. ires = 0;
  44. const bool res2 = try_lexical_convert("-100", ires);
  45. BOOST_CHECK(res2);
  46. BOOST_CHECK_EQUAL(ires, -100);
  47. float fres = 1.0f;
  48. const bool res3 = try_lexical_convert("0.0", fres);
  49. BOOST_CHECK(res3);
  50. BOOST_CHECK_EQUAL(fres, 0.0f);
  51. fres = 1.0f;
  52. const bool res4 = try_lexical_convert("0.0", sizeof("0.0") - 1, fres);
  53. BOOST_CHECK(res4);
  54. BOOST_CHECK_EQUAL(fres, 0.0f);
  55. }
  56. boost::unit_test::test_suite *init_unit_test_suite(int, char *[])
  57. {
  58. boost::unit_test::test_suite *suite =
  59. BOOST_TEST_SUITE("Tests for try_lexical_convert");
  60. suite->add(BOOST_TEST_CASE(&try_uncommon_cases));
  61. suite->add(BOOST_TEST_CASE(&try_common_cases));
  62. return suite;
  63. }