Mcucpp

Форк
0
/
encoding.cpp 
86 строк · 2.3 Кб
1

2
#include <iostream>
3
#include <string>
4
#include <utf8.h>
5
#include <gtest/gtest.h>
6

7
using namespace Mcucpp;
8

9
typedef Utf8Encoding<uint32_t> Utf8;
10

11
void convert(const char *utf8, wchar_t *wchar)
12
{
13
    while(*utf8)
14
        *wchar++ = Utf8::Decode(utf8);
15
    *wchar = 0;
16
}
17

18
TEST(Utf8, Decode)
19
{
20
    wchar_t result[100];
21

22
    convert("Hello~\xc2\x80 \xc3\xbf", result);	// U+0000 to U+00FF
23
    EXPECT_STREQ(L"Hello~\x0080 \x00FF" , result);
24

25
	convert("\xc4\x80 \xc4\x81 \xc7\xbe \xc7\xbf", result); // U+0100 to U+01FF
26
    EXPECT_STREQ(L"\x0100 \x0101 \x01fe \x01ff", result);
27

28
	convert("\xc8\x80 \xca\x87 \xcb\xbf", result); // U+0200 to U+02FF
29
    EXPECT_STREQ(L"\x0200 \x0287 \x02ff", result);
30

31
    convert("\xd0\x90 \xd0\xaf \xd1\x8f \xd3\xbf", result); // U+0400 ... U+04FF
32
    EXPECT_STREQ(L"\x0410 \x042f \x044f \x04ff", result);
33

34
    convert("\xdf\xbf \xdc\x80", result); // U+0700 to U+07FF
35
    EXPECT_STREQ(L"\x07FF \x0700", result);
36

37
    convert("\xe0\xa0\x80 \xe1\x87\xbf \xe1\xa7\xbf \xef\xbf\xbf", result); // U+0800 ...
38
    EXPECT_STREQ(L"\x0800 \x11FF \x19ff \xffff", result);
39
#if 0 // enable if wchar_t is more then 16 bits
40
    convert("\xf0\x90\x80\x80 \xf0\x90\xa1\x9f", result); // U+10000 ...
41
    EXPECT_STREQ(L"\x10000 \x1085F", result);
42
#endif
43
}
44

45

46
TEST(Utf8, Errors)
47
{
48
    wchar_t result[100];
49

50
	// unexpected continuation mark
51
    convert("Hello \x85world", result);
52
    EXPECT_STREQ(L"Hello ?world" , result);
53

54
	// missed continuation mark
55
    convert("Hello worl\xc4\x5f", result);
56
    EXPECT_STREQ(L"Hello worl?_" , result);
57

58
}
59

60

61
TEST(Utf8, Encode)
62
{
63
	#define TEST_ENCODE_CHAR(W, S) ptr = result; Utf8::Encode(ptr, W); *ptr = 0; EXPECT_STREQ(S , result)
64

65
	char result[100], *ptr;
66

67
	TEST_ENCODE_CHAR(0x0030, "\x30");
68
	TEST_ENCODE_CHAR(0x007e, "\x7e");
69
	TEST_ENCODE_CHAR(0x0080, "\xc2\x80");
70
	TEST_ENCODE_CHAR(0x0080, "\xc2\x80");
71
	TEST_ENCODE_CHAR(0x00ff, "\xc3\xbf");
72
	TEST_ENCODE_CHAR(0x0100, "\xc4\x80");
73
	TEST_ENCODE_CHAR(0x01FF, "\xc7\xbf");
74

75
	TEST_ENCODE_CHAR(0x19ff, "\xe1\xa7\xbf");
76
	TEST_ENCODE_CHAR(0x0800, "\xe0\xa0\x80");
77
	TEST_ENCODE_CHAR(0x11D00, "\xf0\x91\xb4\x80");
78
	TEST_ENCODE_CHAR(0x120FF, "\xf0\x92\x83\xbf");
79

80
}
81

82

83
TEST(Utf8, StrLen)
84
{
85
   	EXPECT_EQ(5u, Utf8::StrLen("Hello"));
86
	EXPECT_EQ(13u, Utf8::StrLen("Hello, \xd0\x9c\xd0\xb5\xd0\xb4\xd0\xb2\xd0\xb5\xd0\xb4"));
87
}
88

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.