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-2024.
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
11#include <boost/lexical_cast/try_lexical_convert.hpp>
12
13#include <boost/core/lightweight_test.hpp>
14
15using namespace boost::conversion;
16
17void try_uncommon_cases()
18{
19 std::string sres;
20 const bool res1 = try_lexical_convert(arg: std::string("Test string"), result&: sres);
21 BOOST_TEST(res1);
22 BOOST_TEST_EQ(sres, "Test string");
23
24 volatile int vires;
25 const bool res2 = try_lexical_convert(arg: 100, result&: vires);
26 BOOST_TEST(res2);
27 BOOST_TEST_EQ(vires, 100);
28
29 const bool res3 = try_lexical_convert(arg: "Test string", result&: sres);
30 BOOST_TEST(res3);
31 BOOST_TEST_EQ(sres, "Test string");
32
33 const bool res4 = try_lexical_convert(chars: "Test string", count: sizeof("Test string") - 1, result&: sres);
34 BOOST_TEST(res4);
35 BOOST_TEST_EQ(sres, "Test string");
36
37 int ires;
38 BOOST_TEST(!try_lexical_convert("Test string", ires));
39 BOOST_TEST(!try_lexical_convert(1.1, ires));
40 BOOST_TEST(!try_lexical_convert(-1.9, ires));
41 BOOST_TEST(!try_lexical_convert("1.1", ires));
42 BOOST_TEST(!try_lexical_convert("1000000000000000000000000000000000000000", ires));
43}
44
45
46void try_common_cases()
47{
48 int ires = 0;
49 const bool res1 = try_lexical_convert(arg: std::string("100"), result&: ires);
50 BOOST_TEST(res1);
51 BOOST_TEST_EQ(ires, 100);
52
53 ires = 0;
54 const bool res2 = try_lexical_convert(arg: "-100", result&: ires);
55 BOOST_TEST(res2);
56 BOOST_TEST_EQ(ires, -100);
57
58 float fres = 1.0f;
59 const bool res3 = try_lexical_convert(arg: "0.0", result&: fres);
60 BOOST_TEST(res3);
61 BOOST_TEST_EQ(fres, 0.0f);
62
63 fres = 1.0f;
64 const bool res4 = try_lexical_convert(chars: "0.0", count: sizeof("0.0") - 1, result&: fres);
65 BOOST_TEST(res4);
66 BOOST_TEST_EQ(fres, 0.0f);
67}
68
69int main()
70{
71 try_uncommon_cases();
72 try_common_cases();
73
74 return boost::report_errors();
75}
76

source code of boost/libs/lexical_cast/test/try_lexical_convert.cpp