Skip to content

Commit 9cc6c16

Browse files
committed
Move unicode unit test to CATCH and enable it
1 parent 4cd96c0 commit 9cc6c16

File tree

3 files changed

+47
-24
lines changed

3 files changed

+47
-24
lines changed

unit/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,19 @@ 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

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,23 @@ 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+
#if 0
57+
// big-endian test is broken, will be fixed in subsequent commit
58+
static bool compare_utf8_to_utf16_big_endian(const std::string &in)
5459
{
5560
std::wstring s1=utf8_to_utf16_big_endian(in);
5661

5762
typedef std::codecvt_utf8_utf16<wchar_t> codecvt_utf8_utf16t;
5863
std::wstring_convert<codecvt_utf8_utf16t> converter;
5964
std::wstring s2=converter.from_bytes(in);
6065

61-
assert(paranoid_wstr_equals(s1, s2));
66+
return paranoid_wstr_equals(s1, s2);
6267
}
68+
#endif
6369

64-
void compare_utf8_to_utf16_little_endian(std::string& in)
70+
static bool compare_utf8_to_utf16_little_endian(const std::string &in)
6571
{
6672
std::wstring s1=utf8_to_utf16_little_endian(in);
6773

@@ -72,23 +78,40 @@ void compare_utf8_to_utf16_little_endian(std::string& in)
7278
std::wstring_convert<codecvt_utf8_utf16t> converter;
7379
std::wstring s2=converter.from_bytes(in);
7480

75-
assert(paranoid_wstr_equals(s1, s2));
81+
return paranoid_wstr_equals(s1, s2);
7682
}
7783

78-
int main()
84+
TEST_CASE("unicode0", "[core][util][unicode]")
7985
{
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);
86+
const std::string s = u8"abc";
87+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
88+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
9389
}
9490

91+
TEST_CASE("unicode1", "[core][util][unicode]")
92+
{
93+
const std::string s = u8"\u0070\u00DF\u00E0\u00EF\u00F0\u00F7\u00F8";
94+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
95+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
96+
}
97+
98+
TEST_CASE("unicode2", "[core][util][unicode]")
99+
{
100+
const std::string s = u8"$¢€𐍈";
101+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
102+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
103+
}
104+
105+
TEST_CASE("unicode3", "[core][util][unicode]")
106+
{
107+
const std::string s = u8"𐐏𤭢";
108+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
109+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
110+
}
111+
112+
TEST_CASE("unicode4", "[core][util][unicode]")
113+
{
114+
const std::string s = u8"дȚȨɌṡʒʸͼἨѶݔݺ→⅒⅀▤▞╢◍⛳⻥龍ンㄗㄸ";
115+
// REQUIRE(compare_utf8_to_utf16_big_endian(s));
116+
REQUIRE(compare_utf8_to_utf16_little_endian(s));
117+
}

0 commit comments

Comments
 (0)