Skip to content

Commit 8d93087

Browse files
committed
Move unicode unit test to CATCH and enable it
1 parent 680227e commit 8d93087

File tree

3 files changed

+51
-24
lines changed

3 files changed

+51
-24
lines changed

unit/CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ list(REMOVE_ITEM sources
1313
${CMAKE_CURRENT_SOURCE_DIR}/json.cpp
1414
${CMAKE_CURRENT_SOURCE_DIR}/cpp_parser.cpp
1515
${CMAKE_CURRENT_SOURCE_DIR}/osx_fat_reader.cpp
16-
${CMAKE_CURRENT_SOURCE_DIR}/unicode.cpp
1716
${CMAKE_CURRENT_SOURCE_DIR}/wp.cpp
1817
${CMAKE_CURRENT_SOURCE_DIR}/cpp_scanner.cpp
1918
${CMAKE_CURRENT_SOURCE_DIR}/float_utils.cpp

unit/Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ SRC += unit_tests.cpp \
3737
util/string_utils/split_string.cpp \
3838
util/string_utils/strip_string.cpp \
3939
util/symbol_table.cpp \
40+
util/unicode.cpp \
4041
catch_example.cpp \
4142
# Empty last line
4243

unit/unicode.cpp renamed to unit/util/unicode.cpp

+50-23
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,22 @@ Author: Vojtech Forejt, [email protected]
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

18+
// the u8 prefix is only available from VS 2015 onwards
19+
#if !defined(_MSC_VER) || _MSC_VER >= 1900
20+
1921
// This unit test compares our implementation with codecvt implementation,
2022
// checking bit-by-bit equivalence of results.
2123

22-
bool paranoid_wstr_equals(const std::wstring &a, const std::wstring &b)
24+
static bool paranoid_wstr_equals(const std::wstring &a, const std::wstring &b)
2325
{
2426
if(a.size() != b.size())
2527
return false;
@@ -35,7 +37,10 @@ bool paranoid_wstr_equals(const std::wstring &a, const std::wstring &b)
3537
}
3638

3739
// helper print function, can be called for debugging problem
38-
void wstr_print(const std::wstring &a, const std::wstring &b)
40+
#if 0
41+
#include <iostream>
42+
43+
static void wstr_print(const std::wstring &a, const std::wstring &b)
3944
{
4045
int endi=(a.size()>b.size())?a.size():b.size();
4146
const unsigned char
@@ -49,19 +54,23 @@ void wstr_print(const std::wstring &a, const std::wstring &b)
4954
}
5055
std::cout << '\n';
5156
}
57+
#endif
5258

53-
void compare_utf8_to_utf16_big_endian(std::string& in)
59+
#if 0
60+
// big-endian test is broken, will be fixed in subsequent commit
61+
static bool compare_utf8_to_utf16_big_endian(const std::string &in)
5462
{
5563
std::wstring s1=utf8_to_utf16_big_endian(in);
5664

5765
typedef std::codecvt_utf8_utf16<wchar_t> codecvt_utf8_utf16t;
5866
std::wstring_convert<codecvt_utf8_utf16t> converter;
5967
std::wstring s2=converter.from_bytes(in);
6068

61-
assert(paranoid_wstr_equals(s1, s2));
69+
return paranoid_wstr_equals(s1, s2);
6270
}
71+
#endif
6372

64-
void compare_utf8_to_utf16_little_endian(std::string& in)
73+
static bool compare_utf8_to_utf16_little_endian(const std::string &in)
6574
{
6675
std::wstring s1=utf8_to_utf16_little_endian(in);
6776

@@ -72,23 +81,41 @@ void compare_utf8_to_utf16_little_endian(std::string& in)
7281
std::wstring_convert<codecvt_utf8_utf16t> converter;
7382
std::wstring s2=converter.from_bytes(in);
7483

75-
assert(paranoid_wstr_equals(s1, s2));
84+
return paranoid_wstr_equals(s1, s2);
85+
}
86+
87+
TEST_CASE("unicode0", "[core][util][unicode]")
88+
{
89+
const std::string s = u8"abc";
90+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
91+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
92+
}
93+
94+
TEST_CASE("unicode1", "[core][util][unicode]")
95+
{
96+
const std::string s = u8"\u0070\u00DF\u00E0\u00EF\u00F0\u00F7\u00F8";
97+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
98+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
99+
}
100+
101+
TEST_CASE("unicode2", "[core][util][unicode]")
102+
{
103+
const std::string s = u8"$¢€𐍈";
104+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
105+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
76106
}
77107

78-
int main()
108+
TEST_CASE("unicode3", "[core][util][unicode]")
79109
{
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);
110+
const std::string s = u8"𐐏𤭢";
111+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
112+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
93113
}
94114

115+
TEST_CASE("unicode4", "[core][util][unicode]")
116+
{
117+
const std::string s = u8"дȚȨɌṡʒʸͼἨѶݔݺ→⅒⅀▤▞╢◍⛳⻥龍ンㄗㄸ";
118+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
119+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
120+
}
121+
#endif

0 commit comments

Comments
 (0)