Skip to content

Commit f5d5809

Browse files
committed
Move unicode unit test to CATCH and enable it
1 parent 3f67114 commit f5d5809

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-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

+36-23
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,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

Comments
 (0)