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