stdex
Additional custom or not Standard C++ covered algorithms
Loading...
Searching...
No Matches
unicode.cpp
1/*
2 SPDX-License-Identifier: MIT
3 Copyright © 2023-2024 Amebis
4*/
5
6#include "pch.hpp"
7
8using namespace std;
9#ifdef _WIN32
10using namespace Microsoft::VisualStudio::CppUnitTestFramework;
11#endif
12#ifdef __GNUC__
13#pragma GCC diagnostic push
14#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
15#endif
16
17namespace UnitTests
18{
19 TEST_CLASS(unicode)
20 {
21 public:
22 TEST_METHOD(str2wstr)
23 {
24 Assert::AreEqual(
25 L"This is a test.",
26 stdex::str2wstr("This is a test.", stdex::charset_id::utf8).c_str());
27 Assert::AreEqual(
28 L"Th\u00ed\u0161 i\u22c5 a te\u0073\u0304t. 😀😅",
29 stdex::str2wstr("Thíš i⋅ a tes̄t. 😀😅", stdex::charset_id::utf8).c_str());
30 std::string src;
31 std::wstring dst;
32 for (size_t i = 0; i < 2000; i++) {
33 src += "🐔Test🐮\r\n";
34 dst += L"🐔Test🐮\r\n";
35 }
36 Assert::AreEqual(dst.c_str(), stdex::str2wstr(src, stdex::charset_id::utf8).c_str());
37 Assert::AreEqual(
38 L"",
39 stdex::str2wstr("test", 0, stdex::charset_id::utf8).c_str());
40 Assert::AreEqual(
41 L"",
42 stdex::str2wstr(nullptr, 0, stdex::charset_id::utf8).c_str());
43 }
44
45 TEST_METHOD(wstr2str)
46 {
47 Assert::AreEqual(
48 "This is a test.",
49 stdex::wstr2str(L"This is a test.", stdex::charset_id::utf8).c_str());
50 Assert::AreEqual(
51 "Th\xc3\xad\xc5\xa1 i\xe2\x8b\x85 a tes\xcc\x84t. \xf0\x9f\x98\x80\xf0\x9f\x98\x85",
52 stdex::wstr2str(L"Thíš i⋅ a tes̄t. 😀😅", stdex::charset_id::utf8).c_str());
53 std::wstring src;
54 std::string dst;
55 for (size_t i = 0; i < 2000; i++) {
56 src += L"🐔Test🐮\r\n";
57 dst += "🐔Test🐮\r\n";
58 }
59 Assert::AreEqual(dst.c_str(), stdex::wstr2str(src, stdex::charset_id::utf8).c_str());
60 Assert::AreEqual(
61 "",
62 stdex::wstr2str(L"test", 0, stdex::charset_id::utf8).c_str());
63 Assert::AreEqual(
64 "",
65 stdex::wstr2str(nullptr, 0, stdex::charset_id::utf8).c_str());
66 }
67
68 TEST_METHOD(charset_encoder)
69 {
70 stdex::charset_encoder<char, char> win1250_to_utf8(stdex::charset_id::windows1250, stdex::charset_id::utf8);
71
72 Assert::AreEqual(
73 "This is a test.",
74 win1250_to_utf8.convert("This is a test.").c_str());
75 Assert::AreEqual(
76 "Thíš i· a teşt.",
77 win1250_to_utf8.convert("Th\xed\x9a i\xb7 a te\xbat.").c_str());
78 std::string src, dst;
79 for (size_t i = 0; i < 1000; i++) {
80 src += "V ko\x9eu\x9a\xe8ku zlobnega mizarja stopiclja fant in kli\xe8" "e 0123456789.\r\n";
81 dst += "V kožuščku zlobnega mizarja stopiclja fant in kliče 0123456789.\r\n";
82 }
83 Assert::AreEqual(dst.c_str(), win1250_to_utf8.convert(src).c_str());
84 Assert::AreEqual(
85 "",
86 win1250_to_utf8.convert("test", 0).c_str());
87 Assert::AreEqual(
88 "",
89 win1250_to_utf8.convert(nullptr, 0).c_str());
90 }
91
92 TEST_METHOD(normalize)
93 {
94#ifdef _WIN32
95 Assert::AreEqual(
96 L"tést",
97 stdex::normalize(L"tést").c_str());
98 Assert::AreEqual(
99 L"",
100 stdex::normalize(nullptr, 0).c_str());
101#endif
102 }
103 };
104}
105
106#ifdef __GNUC__
107#pragma GCC diagnostic pop
108#endif
Encoding converter context.
Definition unicode.hpp:137