1 | /*============================================================================= |
2 | Copyright (c) 2018-2023 Nikita Kniazev |
3 | |
4 | Distributed under the Boost Software License, Version 1.0. (See accompanying |
5 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
6 | =============================================================================*/ |
7 | #include <boost/spirit/home/support/utf8.hpp> |
8 | #include <boost/core/lightweight_test.hpp> |
9 | #include <boost/config.hpp> |
10 | #include <string> |
11 | |
12 | #if defined(_MSC_VER) && _MSC_VER < 1700 |
13 | # pragma warning(disable: 4428) // universal-character-name encountered in source |
14 | #endif |
15 | |
16 | static bool nowarn_constexpr(bool x) { return x; } |
17 | |
18 | int main() |
19 | { |
20 | using boost::spirit::to_utf8; |
21 | |
22 | BOOST_TEST_CSTR_EQ("\xED\x9F\xBF" , to_utf8(0xD7FFul).c_str()); |
23 | BOOST_TEST_CSTR_EQ("\xEE\x80\x80" , to_utf8(0xE000ul).c_str()); |
24 | |
25 | if (nowarn_constexpr(x: sizeof(L"\u00FF" ) == 2)) |
26 | BOOST_TEST_CSTR_EQ("\xC3\xBF" , to_utf8(L"\u00FF" [0]).c_str()); |
27 | if (nowarn_constexpr(x: sizeof(L"\uFFE1" ) == 2)) |
28 | BOOST_TEST_CSTR_EQ("\xEF\xBF\xA1" , to_utf8(L"\uFFE1" [0]).c_str()); |
29 | if (nowarn_constexpr(x: sizeof(L"\U0001F9D0" ) == 2)) |
30 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90" , to_utf8(L"\U0001F9D0" [0]).c_str()); |
31 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(L"\U0001F9D0\U0001F9E0" ).c_str()); |
32 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(std::wstring(L"\U0001F9D0\U0001F9E0" )).c_str()); |
33 | |
34 | #ifndef BOOST_NO_CXX11_UNICODE_LITERALS |
35 | BOOST_TEST_CSTR_EQ("\xC3\xBF" , to_utf8(U'\u00FF').c_str()); |
36 | BOOST_TEST_CSTR_EQ("\xEF\xBF\xA1" , to_utf8(U'\uFFE1').c_str()); |
37 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90" , to_utf8(U'\U0001F9D0').c_str()); |
38 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(U"\U0001F9D0\U0001F9E0" ).c_str()); |
39 | BOOST_TEST_CSTR_EQ("\xF0\x9F\xA7\x90\xF0\x9F\xA7\xA0" , to_utf8(std::u32string(U"\U0001F9D0\U0001F9E0" )).c_str()); |
40 | #endif |
41 | |
42 | return boost::report_errors(); |
43 | } |
44 | |