66
77\*******************************************************************/
88
9- #include < cassert>
9+ #include < testing-utils/catch.hpp>
10+
1011#include < vector>
1112#include < string>
1213#include < codecvt>
13- #include < iomanip>
14- #include < iostream>
1514#include < locale>
1615
1716#include < util/unicode.h>
1817
1918// This unit test compares our implementation with codecvt implementation,
2019// checking bit-by-bit equivalence of results.
2120
22- bool paranoid_wstr_equals (const std::wstring &a, const std::wstring &b)
21+ static bool paranoid_wstr_equals (const std::wstring &a, const std::wstring &b)
2322{
2423 if (a.size () != b.size ())
2524 return false ;
@@ -35,7 +34,10 @@ bool paranoid_wstr_equals(const std::wstring &a, const std::wstring &b)
3534}
3635
3736// helper print function, can be called for debugging problem
38- void wstr_print (const std::wstring &a, const std::wstring &b)
37+ #if 0
38+ #include <iostream>
39+
40+ static void wstr_print(const std::wstring &a, const std::wstring &b)
3941{
4042 int endi=(a.size()>b.size())?a.size():b.size();
4143 const unsigned char
@@ -49,19 +51,20 @@ void wstr_print(const std::wstring &a, const std::wstring &b)
4951 }
5052 std::cout << '\n';
5153}
54+ #endif
5255
53- void compare_utf8_to_utf16_big_endian (std::string& in)
56+ static bool compare_utf8_to_utf16_big_endian (const std::string & in)
5457{
5558 std::wstring s1=utf8_to_utf16_big_endian (in);
5659
5760 typedef std::codecvt_utf8_utf16<wchar_t > codecvt_utf8_utf16t;
5861 std::wstring_convert<codecvt_utf8_utf16t> converter;
5962 std::wstring s2=converter.from_bytes (in);
6063
61- assert ( paranoid_wstr_equals (s1, s2) );
64+ return paranoid_wstr_equals (s1, s2);
6265}
6366
64- void compare_utf8_to_utf16_little_endian (std::string& in)
67+ static bool compare_utf8_to_utf16_little_endian (const std::string & in)
6568{
6669 std::wstring s1=utf8_to_utf16_little_endian (in);
6770
@@ -72,23 +75,33 @@ void compare_utf8_to_utf16_little_endian(std::string& in)
7275 std::wstring_convert<codecvt_utf8_utf16t> converter;
7376 std::wstring s2=converter.from_bytes (in);
7477
75- assert (paranoid_wstr_equals (s1, s2));
78+ return paranoid_wstr_equals (s1, s2);
79+ }
80+
81+ TEST_CASE (" unicode1" , " [core][util][unicode]" )
82+ {
83+ const std::string s = u8" \u0070\u00DF\u00E0\u00EF\u00F0\u00F7\u00F8 " ;
84+ REQUIRE (compare_utf8_to_utf16_big_endian (s));
85+ REQUIRE (compare_utf8_to_utf16_little_endian (s));
86+ }
87+
88+ TEST_CASE (" unicode2" , " [core][util][unicode]" )
89+ {
90+ const std::string s = u8" $¢€𐍈" ;
91+ REQUIRE (compare_utf8_to_utf16_big_endian (s));
92+ REQUIRE (compare_utf8_to_utf16_little_endian (s));
7693}
7794
78- int main ( )
95+ TEST_CASE ( " unicode3 " , " [core][util][unicode] " )
7996{
80- std::string s;
81- s=u8" \u0070\u00DF\u00E0\u00EF\u00F0\u00F7\u00F8 " ;
82- compare_utf8_to_utf16_big_endian (s);
83- compare_utf8_to_utf16_little_endian (s);
84- s=u8" $¢€𐍈" ;
85- compare_utf8_to_utf16_big_endian (s);
86- compare_utf8_to_utf16_little_endian (s);
87- s=u8" 𐐏𤭢" ;
88- compare_utf8_to_utf16_big_endian (s);
89- compare_utf8_to_utf16_little_endian (s);
90- s=u8" дȚȨɌṡʒʸͼἨѶݔݺ→⅒⅀▤▞╢◍⛳⻥龍ンㄗㄸ" ;
91- compare_utf8_to_utf16_big_endian (s);
92- compare_utf8_to_utf16_little_endian (s);
97+ const std::string s = u8" 𐐏𤭢" ;
98+ REQUIRE (compare_utf8_to_utf16_big_endian (s));
99+ REQUIRE (compare_utf8_to_utf16_little_endian (s));
93100}
94101
102+ TEST_CASE (" unicode4" , " [core][util][unicode]" )
103+ {
104+ const std::string s = u8" дȚȨɌṡʒʸͼἨѶݔݺ→⅒⅀▤▞╢◍⛳⻥龍ンㄗㄸ" ;
105+ REQUIRE (compare_utf8_to_utf16_big_endian (s));
106+ REQUIRE (compare_utf8_to_utf16_little_endian (s));
107+ }
0 commit comments