]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/lexical_cast/test/lexical_cast_stream_traits_test.cpp
buildsys: change download over to reef release
[ceph.git] / ceph / src / boost / libs / lexical_cast / test / lexical_cast_stream_traits_test.cpp
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, 2012-2020.
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/config.hpp>
12
13 #include <boost/lexical_cast/detail/converter_lexical.hpp>
14
15 #include <boost/test/unit_test.hpp>
16
17 template <class T>
18 static void test_optimized_types_to_string_const()
19 {
20 namespace de = boost::detail;
21 typedef de::lexical_cast_stream_traits<T, std::string> trait_1;
22 BOOST_CHECK(!trait_1::is_source_input_not_optimized_t::value);
23 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_1::src_char_t, char>::value));
24 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_1::target_char_t, char>::value));
25 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_1::char_type, char>::value));
26 BOOST_CHECK(!trait_1::is_string_widening_required_t::value);
27 BOOST_CHECK(!trait_1::is_source_input_not_optimized_t::value);
28
29 typedef de::lexical_cast_stream_traits<const T, std::string> trait_2;
30 BOOST_CHECK(!trait_2::is_source_input_not_optimized_t::value);
31 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_2::src_char_t, char>::value));
32 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_2::target_char_t, char>::value));
33 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_2::char_type, char>::value));
34 BOOST_CHECK(!trait_2::is_string_widening_required_t::value);
35 BOOST_CHECK(!trait_2::is_source_input_not_optimized_t::value);
36
37 typedef de::lexical_cast_stream_traits<T, std::wstring> trait_3;
38 BOOST_CHECK(!trait_3::is_source_input_not_optimized_t::value);
39 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_3::src_char_t, char>::value));
40 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_3::target_char_t, wchar_t>::value));
41 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_3::char_type, wchar_t>::value));
42
43 BOOST_CHECK((boost::detail::is_character<BOOST_DEDUCED_TYPENAME trait_3::no_cv_src>::value != trait_3::is_string_widening_required_t::value));
44
45 BOOST_CHECK(!trait_3::is_source_input_not_optimized_t::value);
46 }
47
48
49 template <class T>
50 static void test_optimized_types_to_string()
51 {
52 test_optimized_types_to_string_const<T>();
53
54 namespace de = boost::detail;
55 typedef de::lexical_cast_stream_traits<std::string, T> trait_4;
56 BOOST_CHECK(!trait_4::is_source_input_not_optimized_t::value);
57 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_4::src_char_t, char>::value));
58 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_4::target_char_t, char>::value));
59 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_4::char_type, char>::value));
60 BOOST_CHECK(!trait_4::is_string_widening_required_t::value);
61 BOOST_CHECK(!trait_4::is_source_input_not_optimized_t::value);
62
63 typedef de::lexical_cast_stream_traits<const std::string, T> trait_5;
64 BOOST_CHECK(!trait_5::is_source_input_not_optimized_t::value);
65 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_5::src_char_t, char>::value));
66 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_5::target_char_t, char>::value));
67 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_5::char_type, char>::value));
68 BOOST_CHECK(!trait_5::is_string_widening_required_t::value);
69 BOOST_CHECK(!trait_5::is_source_input_not_optimized_t::value);
70
71 typedef de::lexical_cast_stream_traits<const std::wstring, T> trait_6;
72 BOOST_CHECK(!trait_6::is_source_input_not_optimized_t::value);
73 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_6::src_char_t, wchar_t>::value));
74 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_6::target_char_t, char>::value));
75 BOOST_CHECK((boost::is_same<BOOST_DEDUCED_TYPENAME trait_6::char_type, wchar_t>::value));
76 BOOST_CHECK(!trait_6::is_string_widening_required_t::value);
77 }
78
79 void test_metafunctions()
80 {
81 test_optimized_types_to_string<bool>();
82 test_optimized_types_to_string<char>();
83 test_optimized_types_to_string<unsigned char>();
84 test_optimized_types_to_string<signed char>();
85 test_optimized_types_to_string<short>();
86 test_optimized_types_to_string<unsigned short>();
87 test_optimized_types_to_string<int>();
88 test_optimized_types_to_string<unsigned int>();
89 test_optimized_types_to_string<long>();
90 test_optimized_types_to_string<unsigned long>();
91
92 #if defined(BOOST_HAS_LONG_LONG)
93 test_optimized_types_to_string<boost::ulong_long_type>();
94 test_optimized_types_to_string<boost::long_long_type>();
95 #elif defined(BOOST_HAS_MS_INT64)
96 test_optimized_types_to_string<unsigned __int64>();
97 test_optimized_types_to_string<__int64>();
98 #endif
99
100 test_optimized_types_to_string<std::string>();
101 test_optimized_types_to_string<char*>();
102 //test_optimized_types_to_string<char[5]>();
103 //test_optimized_types_to_string<char[1]>();
104 test_optimized_types_to_string<unsigned char*>();
105 //test_optimized_types_to_string<unsigned char[5]>();
106 //test_optimized_types_to_string<unsigned char[1]>();
107 test_optimized_types_to_string<signed char*>();
108 //test_optimized_types_to_string<signed char[5]>();
109 //test_optimized_types_to_string<signed char[1]>();
110 test_optimized_types_to_string<boost::array<char, 1> >();
111 test_optimized_types_to_string<boost::array<char, 5> >();
112 test_optimized_types_to_string<boost::array<unsigned char, 1> >();
113 test_optimized_types_to_string<boost::array<unsigned char, 5> >();
114 test_optimized_types_to_string<boost::array<signed char, 1> >();
115 test_optimized_types_to_string<boost::array<signed char, 5> >();
116 test_optimized_types_to_string<boost::iterator_range<char*> >();
117 test_optimized_types_to_string<boost::iterator_range<unsigned char*> >();
118 test_optimized_types_to_string<boost::iterator_range<signed char*> >();
119
120 test_optimized_types_to_string_const<boost::array<const char, 1> >();
121 test_optimized_types_to_string_const<boost::array<const char, 5> >();
122 test_optimized_types_to_string_const<boost::array<const unsigned char, 1> >();
123 test_optimized_types_to_string_const<boost::array<const unsigned char, 5> >();
124 test_optimized_types_to_string_const<boost::array<const signed char, 1> >();
125 test_optimized_types_to_string_const<boost::array<const signed char, 5> >();
126 test_optimized_types_to_string_const<boost::iterator_range<const char*> >();
127 test_optimized_types_to_string_const<boost::iterator_range<const unsigned char*> >();
128 test_optimized_types_to_string_const<boost::iterator_range<const signed char*> >();
129
130 #ifndef BOOST_NO_CXX11_HDR_ARRAY
131 test_optimized_types_to_string<std::array<char, 1> >();
132 test_optimized_types_to_string<std::array<char, 5> >();
133 test_optimized_types_to_string<std::array<unsigned char, 1> >();
134 test_optimized_types_to_string<std::array<unsigned char, 5> >();
135 test_optimized_types_to_string<std::array<signed char, 1> >();
136 test_optimized_types_to_string<std::array<signed char, 5> >();
137
138 test_optimized_types_to_string_const<std::array<const char, 1> >();
139 test_optimized_types_to_string_const<std::array<const char, 5> >();
140 test_optimized_types_to_string_const<std::array<const unsigned char, 1> >();
141 test_optimized_types_to_string_const<std::array<const unsigned char, 5> >();
142 test_optimized_types_to_string_const<std::array<const signed char, 1> >();
143 test_optimized_types_to_string_const<std::array<const signed char, 5> >();
144 #endif
145 }
146
147 boost::unit_test::test_suite *init_unit_test_suite(int, char *[])
148 {
149 boost::unit_test::test_suite *suite =
150 BOOST_TEST_SUITE("lexical_cast traits tests");
151 suite->add(BOOST_TEST_CASE(&test_metafunctions));
152 return suite;
153 }
154