aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorsmalov <smalov@yandex-team.ru>2022-02-10 16:47:36 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:36 +0300
commitcfadda92ca195da3ad68d721a58872a4f1ced696 (patch)
treec0748b5dcbade83af788c0abfa89c0383d6b779c /util
parentf70d9720e13aef3a935e3f405b0eac554529e76e (diff)
downloadydb-cfadda92ca195da3ad68d721a58872a4f1ced696.tar.gz
Restoring authorship annotation for <smalov@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'util')
-rw-r--r--util/charset/wide.cpp110
-rw-r--r--util/charset/wide.h104
-rw-r--r--util/charset/wide_ut.cpp868
-rw-r--r--util/datetime/parser.rl656
-rw-r--r--util/datetime/parser_ut.cpp232
-rw-r--r--util/datetime/systime.cpp24
-rw-r--r--util/folder/dirut.cpp104
-rw-r--r--util/folder/dirut.h10
-rw-r--r--util/generic/strbase.h214
-rw-r--r--util/generic/string.cpp4
-rw-r--r--util/generic/string.h82
-rw-r--r--util/generic/string_ut.cpp596
-rw-r--r--util/generic/string_ut.h406
-rw-r--r--util/generic/yexception_ut.c10
-rw-r--r--util/generic/yexception_ut.cpp16
-rw-r--r--util/generic/yexception_ut.h20
-rw-r--r--util/memory/pool.h36
-rw-r--r--util/memory/segpool_alloc.h6
-rw-r--r--util/str_stl.h4
-rw-r--r--util/stream/input.cpp4
-rw-r--r--util/stream/ios_ut.cpp62
-rw-r--r--util/stream/output.cpp4
-rw-r--r--util/stream/output.h16
-rw-r--r--util/stream/zlib.cpp2
-rw-r--r--util/string/cast.cpp6
-rw-r--r--util/string/cast.h18
26 files changed, 1507 insertions, 1507 deletions
diff --git a/util/charset/wide.cpp b/util/charset/wide.cpp
index e71abf0cfe..a287438ddd 100644
--- a/util/charset/wide.cpp
+++ b/util/charset/wide.cpp
@@ -3,17 +3,17 @@
#include <util/generic/mem_copy.h>
#include <util/string/strip.h>
-namespace {
- //! the constants are not zero-terminated
+namespace {
+ //! the constants are not zero-terminated
const wchar16 LT[] = {'&', 'l', 't', ';'};
const wchar16 GT[] = {'&', 'g', 't', ';'};
const wchar16 AMP[] = {'&', 'a', 'm', 'p', ';'};
const wchar16 BR[] = {'<', 'B', 'R', '>'};
const wchar16 QUOT[] = {'&', 'q', 'u', 'o', 't', ';'};
-
+
template <bool insertBr>
- inline size_t EscapedLen(wchar16 c) {
- switch (c) {
+ inline size_t EscapedLen(wchar16 c) {
+ switch (c) {
case '<':
return Y_ARRAY_SIZE(LT);
case '>':
@@ -27,37 +27,37 @@ namespace {
return Y_ARRAY_SIZE(BR);
else
return 1;
- }
- }
-}
-
+ }
+ }
+}
+
void Collapse(TUtf16String& w) {
CollapseImpl(w, w, 0, IsWhitespace);
-}
-
-size_t Collapse(wchar16* s, size_t n) {
+}
+
+size_t Collapse(wchar16* s, size_t n) {
return CollapseImpl(s, n, IsWhitespace);
-}
-
+}
+
TWtringBuf StripLeft(const TWtringBuf text) noexcept {
const auto* p = text.data();
const auto* const pe = text.data() + text.size();
-
+
for (; p != pe && IsWhitespace(*p); ++p) {
}
-
+
return {p, pe};
}
-
+
void StripLeft(TUtf16String& text) {
const auto stripped = StripLeft(TWtringBuf(text));
if (stripped.size() == text.size()) {
return;
- }
-
+ }
+
text = stripped;
-}
-
+}
+
TWtringBuf StripRight(const TWtringBuf text) noexcept {
if (!text) {
return {};
@@ -574,53 +574,53 @@ void EscapeHtmlChars(TUtf16String& str) {
static const TUtf16String amp(AMP, Y_ARRAY_SIZE(AMP));
static const TUtf16String br(BR, Y_ARRAY_SIZE(BR));
static const TUtf16String quot(QUOT, Y_ARRAY_SIZE(QUOT));
-
- size_t escapedLen = 0;
-
+
+ size_t escapedLen = 0;
+
const TUtf16String& cs = str;
-
- for (size_t i = 0; i < cs.size(); ++i)
+
+ for (size_t i = 0; i < cs.size(); ++i)
escapedLen += EscapedLen<insertBr>(cs[i]);
-
- if (escapedLen == cs.size())
- return;
-
+
+ if (escapedLen == cs.size())
+ return;
+
TUtf16String res;
- res.reserve(escapedLen);
-
- size_t start = 0;
-
+ res.reserve(escapedLen);
+
+ size_t start = 0;
+
for (size_t i = 0; i < cs.size(); ++i) {
const TUtf16String* ent = nullptr;
switch (cs[i]) {
- case '<':
- ent = &lt;
- break;
- case '>':
- ent = &gt;
- break;
- case '&':
- ent = &amp;
- break;
+ case '<':
+ ent = &lt;
+ break;
+ case '>':
+ ent = &gt;
+ break;
+ case '&':
+ ent = &amp;
+ break;
case '\"':
ent = &quot;
break;
- default:
+ default:
if (insertBr && (cs[i] == '\r' || cs[i] == '\n')) {
ent = &br;
break;
} else
continue;
- }
-
- res.append(cs.begin() + start, cs.begin() + i);
- res.append(ent->begin(), ent->end());
- start = i + 1;
- }
-
- res.append(cs.begin() + start, cs.end());
- res.swap(str);
-}
-
+ }
+
+ res.append(cs.begin() + start, cs.begin() + i);
+ res.append(ent->begin(), ent->end());
+ start = i + 1;
+ }
+
+ res.append(cs.begin() + start, cs.end());
+ res.swap(str);
+}
+
template void EscapeHtmlChars<false>(TUtf16String& str);
template void EscapeHtmlChars<true>(TUtf16String& str);
diff --git a/util/charset/wide.h b/util/charset/wide.h
index f8d63d4289..04e6928aab 100644
--- a/util/charset/wide.h
+++ b/util/charset/wide.h
@@ -23,7 +23,7 @@ template <class T>
class TTempArray;
using TCharTemp = TTempArray<wchar16>;
-namespace NDetail {
+namespace NDetail {
inline TString InStringMsg(const char* s, size_t len) {
return (len <= 50) ? " in string " + TString(s, len).Quote() : TString();
}
@@ -301,7 +301,7 @@ namespace NDetail {
//! @return len if robust and position where encoding stopped if not
template <bool robust, typename TCharType>
inline size_t UTF8ToWideImpl(const char* text, size_t len, TCharType* dest, size_t& written) noexcept {
- const unsigned char* cur = reinterpret_cast<const unsigned char*>(text);
+ const unsigned char* cur = reinterpret_cast<const unsigned char*>(text);
const unsigned char* last = cur + len;
TCharType* p = dest;
#ifdef _sse_ //can't check for sse4, as we build most of arcadia without sse4 support even on platforms that support it
@@ -311,10 +311,10 @@ inline size_t UTF8ToWideImpl(const char* text, size_t len, TCharType* dest, size
#endif
::NDetail::UTF8ToWideImplScalar<robust>(cur, last, p);
- written = p - dest;
+ written = p - dest;
return cur - reinterpret_cast<const unsigned char*>(text);
-}
-
+}
+
template <typename TCharType>
inline size_t UTF8ToWideImpl(const char* text, size_t len, TCharType* dest, size_t& written) {
return UTF8ToWideImpl<false>(text, len, dest, written);
@@ -421,13 +421,13 @@ inline TStringBuf WideToUTF8(const TWtringBuf src, TString& dst) {
inline TString WideToUTF8(const wchar16* text, size_t len) {
TString s = TString::Uninitialized(WideToUTF8BufferSize(len));
- size_t written = 0;
- WideToUTF8(text, len, s.begin(), written);
+ size_t written = 0;
+ WideToUTF8(text, len, s.begin(), written);
Y_ASSERT(s.size() >= written);
- s.remove(written);
- return s;
-}
-
+ s.remove(written);
+ return s;
+}
+
inline TString WideToUTF8(const wchar32* text, size_t len) {
TString s = TString::Uninitialized(WideToUTF8BufferSize(len));
size_t written = 0;
@@ -439,8 +439,8 @@ inline TString WideToUTF8(const wchar32* text, size_t len) {
inline TString WideToUTF8(const TWtringBuf w) {
return WideToUTF8(w.data(), w.size());
-}
-
+}
+
inline TString WideToUTF8(const TUtf32StringBuf w) {
return WideToUTF8(w.data(), w.size());
}
@@ -594,11 +594,11 @@ namespace NDetail {
}
-//! returns @c true if character sequence has no symbols with value greater than 0x7F
-template <typename TChar>
-inline bool IsStringASCII(const TChar* first, const TChar* last) {
+//! returns @c true if character sequence has no symbols with value greater than 0x7F
+template <typename TChar>
+inline bool IsStringASCII(const TChar* first, const TChar* last) {
return ::NDetail::DoIsStringASCII(first, last);
-}
+}
#ifdef _sse2_
template <>
@@ -618,76 +618,76 @@ inline void Copy(const TChar* first, size_t len, TChar* result) {
memcpy(result, first, len * sizeof(TChar));
}
-template <typename TChar1, typename TChar2>
-inline void Copy(const TChar1* first, size_t len, TChar2* result) {
- Copy(first, first + len, result);
-}
+template <typename TChar1, typename TChar2>
+inline void Copy(const TChar1* first, size_t len, TChar2* result) {
+ Copy(first, first + len, result);
+}
-//! copies symbols from one character sequence to another without any conversion
-//! @note this function can be used instead of the template constructor of @c std::basic_string:
-//! template <typename InputIterator>
-//! basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator());
-//! and the family of template member functions: append, assign, insert, replace.
+//! copies symbols from one character sequence to another without any conversion
+//! @note this function can be used instead of the template constructor of @c std::basic_string:
+//! template <typename InputIterator>
+//! basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator());
+//! and the family of template member functions: append, assign, insert, replace.
template <typename TStringType, typename TChar>
inline TStringType CopyTo(const TChar* first, const TChar* last) {
Y_ASSERT(first <= last);
TStringType str = TStringType::Uninitialized(last - first);
- Copy(first, last, str.begin());
- return str;
-}
+ Copy(first, last, str.begin());
+ return str;
+}
template <typename TStringType, typename TChar>
inline TStringType CopyTo(const TChar* s, size_t n) {
TStringType str = TStringType::Uninitialized(n);
- Copy(s, n, str.begin());
- return str;
-}
-
+ Copy(s, n, str.begin());
+ return str;
+}
+
inline TString WideToASCII(const TWtringBuf w) {
Y_ASSERT(IsStringASCII(w.begin(), w.end()));
return CopyTo<TString>(w.begin(), w.end());
-}
-
+}
+
inline TUtf16String ASCIIToWide(const TStringBuf s) {
Y_ASSERT(IsStringASCII(s.begin(), s.end()));
return CopyTo<TUtf16String>(s.begin(), s.end());
-}
-
+}
+
inline TUtf32String ASCIIToUTF32(const TStringBuf s) {
Y_ASSERT(IsStringASCII(s.begin(), s.end()));
return CopyTo<TUtf32String>(s.begin(), s.end());
}
-//! returns @c true if string contains whitespace characters only
+//! returns @c true if string contains whitespace characters only
inline bool IsSpace(const wchar16* s, size_t n) {
if (n == 0)
return false;
Y_ASSERT(s);
- const wchar16* const e = s + n;
- for (const wchar16* p = s; p != e; ++p) {
+ const wchar16* const e = s + n;
+ for (const wchar16* p = s; p != e; ++p) {
if (!IsWhitespace(*p))
- return false;
- }
- return true;
-}
-
+ return false;
+ }
+ return true;
+}
+
//! returns @c true if string contains whitespace characters only
inline bool IsSpace(const TWtringBuf s) {
return IsSpace(s.data(), s.length());
}
-//! replaces multiple sequential whitespace characters with a single space character
+//! replaces multiple sequential whitespace characters with a single space character
void Collapse(TUtf16String& w);
-
-//! @return new length
-size_t Collapse(wchar16* s, size_t n);
-
+
+//! @return new length
+size_t Collapse(wchar16* s, size_t n);
+
//! Removes leading whitespace characters
TWtringBuf StripLeft(const TWtringBuf text) noexcept Y_WARN_UNUSED_RESULT;
void StripLeft(TUtf16String& text);
-
+
//! Removes trailing whitespace characters
TWtringBuf StripRight(const TWtringBuf text) noexcept Y_WARN_UNUSED_RESULT;
void StripRight(TUtf16String& text);
@@ -807,7 +807,7 @@ TUtf32String ToLowerRet(const TUtf32StringBuf text, size_t pos = 0, size_t count
TUtf32String ToUpperRet(const TUtf32StringBuf text, size_t pos = 0, size_t count = TWtringBuf::npos) Y_WARN_UNUSED_RESULT;
TUtf32String ToTitleRet(const TUtf32StringBuf text, size_t pos = 0, size_t count = TWtringBuf::npos) Y_WARN_UNUSED_RESULT;
-//! replaces the '<', '>' and '&' characters in string with '&lt;', '&gt;' and '&amp;' respectively
+//! replaces the '<', '>' and '&' characters in string with '&lt;', '&gt;' and '&amp;' respectively
// insertBr=true - replace '\r' and '\n' with "<BR>"
template <bool insertBr>
void EscapeHtmlChars(TUtf16String& str);
diff --git a/util/charset/wide_ut.cpp b/util/charset/wide_ut.cpp
index 995d3d1d85..d8f3233e73 100644
--- a/util/charset/wide_ut.cpp
+++ b/util/charset/wide_ut.cpp
@@ -7,18 +7,18 @@
#include <algorithm>
-namespace {
- //! three UTF8 encoded russian letters (A, B, V)
+namespace {
+ //! three UTF8 encoded russian letters (A, B, V)
const char utext[] = "\xd0\x90\xd0\x91\xd0\x92";
-
- const char asciiLatinAlphabet[] = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz";
- const wchar16 wideLatinAlphabet[] = {
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+
+ const char asciiLatinAlphabet[] = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz";
+ const wchar16 wideLatinAlphabet[] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 0};
- const wchar16 wideCyrillicAlphabet[] = {
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+ const wchar16 wideCyrillicAlphabet[] = {
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x00};
const char utf8CyrillicAlphabet[] =
"\xd0\x90\xd0\x91\xd0\x92\xd0\x93\xd0\x94\xd0\x95\xd0\x96\xd0\x97"
@@ -29,22 +29,22 @@ namespace {
"\xd0\xb8\xd0\xb9\xd0\xba\xd0\xbb\xd0\xbc\xd0\xbd\xd0\xbe\xd0\xbf"
"\xd1\x80\xd1\x81\xd1\x82\xd1\x83\xd1\x84\xd1\x85\xd1\x86\xd1\x87"
"\xd1\x88\xd1\x89\xd1\x8a\xd1\x8b\xd1\x8c\xd1\x8d\xd1\x8e\xd1\x8f";
-
- const wchar32 LEAD_BITS_MASK_2_BYTES = 0x1F;
- const wchar32 LEAD_BITS_MASK_3_BYTES = 0x0F;
+
+ const wchar32 LEAD_BITS_MASK_2_BYTES = 0x1F;
+ const wchar32 LEAD_BITS_MASK_3_BYTES = 0x0F;
const wchar32 LEAD_BITS_MASK_4_BYTES = 0x07;
-
- wchar16 ws[] = {
+
+ wchar16 ws[] = {
0x0009,
0x000A, 0x2028, 0x2029,
0x000B,
0x000C,
0x000D,
0x0020, 0x1680,
- 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B,
- 0x202F, 0x205F, 0x3000,
+ 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B,
+ 0x202F, 0x205F, 0x3000,
0x00A0};
-
+
const size_t CaseTestDataSize = 10;
wchar32 WideStringTestData[][CaseTestDataSize] = {
{0x01C4, 0x10428, 0x10429, 0x10447, 0x10441, 0x1C03, 0x00A0, 0x10400, 0x10415, 0x10437}, // original
@@ -54,32 +54,32 @@ namespace {
};
TUtf16String CreateUnicodeText() {
- const int len = 256;
- wchar16 text[len] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00 - 0x0F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x10 - 0x1F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x20 - 0x2F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x30 - 0x3F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x40 - 0x4F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x50 - 0x5F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x60 - 0x6F
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x70 - 0x7F
-
- 0x0301, 0x00C4, 0x00D6, 0x00DC, 0x0104, 0x0106, 0x0118, 0x0141, 0x00E0, 0x00E2, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x0490, 0x00AD, // 0x80 - 0x8F
- 0x00DF, 0x00E4, 0x00F6, 0x00FC, 0x0105, 0x0107, 0x0119, 0x0142, 0x00EB, 0x00EE, 0x00EF, 0x00F4, 0x00F9, 0x00FB, 0x0491, 0x92CF, // 0x90 - 0x9F
- 0x00A0, 0x0143, 0x00D3, 0x015A, 0x017B, 0x0179, 0x046C, 0x00A7, 0x0401, 0x0462, 0x0472, 0x0474, 0x040E, 0x0406, 0x0404, 0x0407, // 0xA0 - 0xAF
- 0x00B0, 0x0144, 0x00F3, 0x015B, 0x017C, 0x017A, 0x046D, 0x2116, 0x0451, 0x0463, 0x0473, 0x0475, 0x045E, 0x0456, 0x0454, 0x0457 // 0xB0 - 0xBF
- };
- for (int i = 0; i < len; ++i) {
- if (i <= 0x7F) { // ASCII characters without 0x7 and 0x1B
- text[i] = static_cast<wchar16>(i);
+ const int len = 256;
+ wchar16 text[len] = {
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00 - 0x0F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x10 - 0x1F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x20 - 0x2F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x30 - 0x3F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x40 - 0x4F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x50 - 0x5F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x60 - 0x6F
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x70 - 0x7F
+
+ 0x0301, 0x00C4, 0x00D6, 0x00DC, 0x0104, 0x0106, 0x0118, 0x0141, 0x00E0, 0x00E2, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x0490, 0x00AD, // 0x80 - 0x8F
+ 0x00DF, 0x00E4, 0x00F6, 0x00FC, 0x0105, 0x0107, 0x0119, 0x0142, 0x00EB, 0x00EE, 0x00EF, 0x00F4, 0x00F9, 0x00FB, 0x0491, 0x92CF, // 0x90 - 0x9F
+ 0x00A0, 0x0143, 0x00D3, 0x015A, 0x017B, 0x0179, 0x046C, 0x00A7, 0x0401, 0x0462, 0x0472, 0x0474, 0x040E, 0x0406, 0x0404, 0x0407, // 0xA0 - 0xAF
+ 0x00B0, 0x0144, 0x00F3, 0x015B, 0x017C, 0x017A, 0x046D, 0x2116, 0x0451, 0x0463, 0x0473, 0x0475, 0x045E, 0x0456, 0x0454, 0x0457 // 0xB0 - 0xBF
+ };
+ for (int i = 0; i < len; ++i) {
+ if (i <= 0x7F) { // ASCII characters without 0x7 and 0x1B
+ text[i] = static_cast<wchar16>(i);
} else if (i >= 0xC0 && i <= 0xFF) { // russian characters (without YO and yo)
- text[i] = static_cast<wchar16>(i + 0x0350); // 0x0410 - 0x044F
- }
- }
+ text[i] = static_cast<wchar16>(i + 0x0350); // 0x0410 - 0x044F
+ }
+ }
return TUtf16String(text, len);
- }
-
+ }
+
TString CreateUTF8Text() {
char text[] = {
'\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f',
@@ -108,9 +108,9 @@ namespace {
'\xd1', '\x87', '\xd1', '\x88', '\xd1', '\x89', '\xd1', '\x8a', '\xd1', '\x8b', '\xd1', '\x8c', '\xd1', '\x8d', '\xd1', '\x8e',
'\xd1', '\x8f'};
return TString(text, Y_ARRAY_SIZE(text));
- }
-
- //! use this function to dump UTF8 text into a file in case of any changes
+ }
+
+ //! use this function to dump UTF8 text into a file in case of any changes
// void DumpUTF8Text() {
// TString s = WideToUTF8(UnicodeText);
// std::ofstream f("utf8.txt");
@@ -121,53 +121,53 @@ namespace {
// f << std::endl;
// }
// }
-
- void CheckRecodeOK(wchar32 expected, unsigned char* first, size_t n) {
- wchar32 w = 0;
- const unsigned char* p = first;
-
+
+ void CheckRecodeOK(wchar32 expected, unsigned char* first, size_t n) {
+ wchar32 w = 0;
+ const unsigned char* p = first;
+
RECODE_RESULT r = ReadUTF8CharAndAdvance(w, p, first + n);
- UNIT_ASSERT(w == expected);
- UNIT_ASSERT(size_t(p - first) == n);
- UNIT_ASSERT(r == RECODE_OK);
- }
-
- void CheckBrokenSymbol(unsigned char* first, unsigned char* last) {
- wchar32 w = 0;
- const unsigned char* p = first;
-
+ UNIT_ASSERT(w == expected);
+ UNIT_ASSERT(size_t(p - first) == n);
+ UNIT_ASSERT(r == RECODE_OK);
+ }
+
+ void CheckBrokenSymbol(unsigned char* first, unsigned char* last) {
+ wchar32 w = 0;
+ const unsigned char* p = first;
+
RECODE_RESULT r = ReadUTF8CharAndAdvance(w, p, last);
- UNIT_ASSERT(w == BROKEN_RUNE);
- UNIT_ASSERT(p - first == 0);
- UNIT_ASSERT(r == RECODE_BROKENSYMBOL);
- }
-
- void CheckEndOfInput(unsigned char* first, size_t n) {
- wchar32 w = 0;
- const unsigned char* p = first;
-
+ UNIT_ASSERT(w == BROKEN_RUNE);
+ UNIT_ASSERT(p - first == 0);
+ UNIT_ASSERT(r == RECODE_BROKENSYMBOL);
+ }
+
+ void CheckEndOfInput(unsigned char* first, size_t n) {
+ wchar32 w = 0;
+ const unsigned char* p = first;
+
RECODE_RESULT r = ReadUTF8CharAndAdvance(w, p, first + n);
- (void)w;
- UNIT_ASSERT(p - first == 0);
- UNIT_ASSERT(r == RECODE_EOINPUT);
- }
-
- void CheckCharLen(unsigned char* first, unsigned char* last, size_t len, RECODE_RESULT result) {
- size_t n = 0;
+ (void)w;
+ UNIT_ASSERT(p - first == 0);
+ UNIT_ASSERT(r == RECODE_EOINPUT);
+ }
+
+ void CheckCharLen(unsigned char* first, unsigned char* last, size_t len, RECODE_RESULT result) {
+ size_t n = 0;
RECODE_RESULT r = GetUTF8CharLen(n, first, last);
- UNIT_ASSERT(n == len);
- UNIT_ASSERT(r == result);
- }
-}
-
+ UNIT_ASSERT(n == len);
+ UNIT_ASSERT(r == result);
+ }
+}
+
class TConversionTest: public TTestBase {
-private:
- //! @note every of the text can have zeros in the middle
+private:
+ //! @note every of the text can have zeros in the middle
const TUtf16String UnicodeText_;
const TString Utf8Text_;
-
-private:
- UNIT_TEST_SUITE(TConversionTest);
+
+private:
+ UNIT_TEST_SUITE(TConversionTest);
UNIT_TEST(TestReadUTF8Char);
UNIT_TEST(TestGetUTF8CharLen);
UNIT_TEST(TestWriteUTF8Char);
@@ -178,29 +178,29 @@ private:
UNIT_TEST(TestUnicodeCase);
UNIT_TEST(TestUnicodeDetails);
UNIT_TEST(TestHexConversion);
- UNIT_TEST_SUITE_END();
-
-public:
- TConversionTest()
+ UNIT_TEST_SUITE_END();
+
+public:
+ TConversionTest()
: UnicodeText_(CreateUnicodeText())
, Utf8Text_(CreateUTF8Text())
- {
- }
-
- void TestReadUTF8Char();
- void TestGetUTF8CharLen();
- void TestWriteUTF8Char();
- void TestUTF8ToWide();
- void TestWideToUTF8();
- void TestGetNumOfUTF8Chars();
+ {
+ }
+
+ void TestReadUTF8Char();
+ void TestGetUTF8CharLen();
+ void TestWriteUTF8Char();
+ void TestUTF8ToWide();
+ void TestWideToUTF8();
+ void TestGetNumOfUTF8Chars();
void TestSubstrUTF8();
void TestUnicodeCase();
void TestUnicodeDetails();
void TestHexConversion();
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TConversionTest);
-
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TConversionTest);
+
void TConversionTest::TestHexConversion() {
for (char ch = '0'; ch <= '9'; ++ch) {
UNIT_ASSERT(isxdigit(ch));
@@ -224,25 +224,25 @@ void TConversionTest::TestHexConversion() {
}
}
-void TConversionTest::TestReadUTF8Char() {
- wchar32 e; // expected unicode char
- wchar32 c;
- unsigned long u; // single UTF8 encoded character
- unsigned char* const first = reinterpret_cast<unsigned char*>(&u);
- unsigned char* const last = first + sizeof(u);
-
- // all ASCII characters are converted with no change (zero converted successfully as well)
- for (c = 0; c <= 0x7F; ++c) {
- u = c;
- CheckRecodeOK(c, first, 1);
- }
-
- // broken symbols from the second half of ASCII table (1000 0000 - 1011 1111)
- for (c = 0x80; c <= 0xBF; ++c) {
- u = c;
- CheckBrokenSymbol(first, last);
- }
-
+void TConversionTest::TestReadUTF8Char() {
+ wchar32 e; // expected unicode char
+ wchar32 c;
+ unsigned long u; // single UTF8 encoded character
+ unsigned char* const first = reinterpret_cast<unsigned char*>(&u);
+ unsigned char* const last = first + sizeof(u);
+
+ // all ASCII characters are converted with no change (zero converted successfully as well)
+ for (c = 0; c <= 0x7F; ++c) {
+ u = c;
+ CheckRecodeOK(c, first, 1);
+ }
+
+ // broken symbols from the second half of ASCII table (1000 0000 - 1011 1111)
+ for (c = 0x80; c <= 0xBF; ++c) {
+ u = c;
+ CheckBrokenSymbol(first, last);
+ }
+
// overlong encoding: leading byte of 2-byte symbol: 1100 0000 - 1100 0001
for (c = 0xC0; c <= 0xC1; ++c) {
u = c;
@@ -254,20 +254,20 @@ void TConversionTest::TestReadUTF8Char() {
CheckEndOfInput(first, 1);
}
- // leading byte of 2-byte symbol: 1100 0000 - 1101 1111
+ // leading byte of 2-byte symbol: 1100 0000 - 1101 1111
for (c = 0xC2; c <= 0xDF; ++c) {
- u = c;
- CheckBrokenSymbol(first, last);
-
- u |= 0x8000;
- // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
- e = c & LEAD_BITS_MASK_2_BYTES;
- e <<= 6;
- CheckRecodeOK(e, first, 2);
-
- CheckEndOfInput(first, 1);
- }
-
+ u = c;
+ CheckBrokenSymbol(first, last);
+
+ u |= 0x8000;
+ // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
+ e = c & LEAD_BITS_MASK_2_BYTES;
+ e <<= 6;
+ CheckRecodeOK(e, first, 2);
+
+ CheckEndOfInput(first, 1);
+ }
+
// possible overlong encoding with leading byte 1110 0000
{
u = c = 0xE0;
@@ -286,19 +286,19 @@ void TConversionTest::TestReadUTF8Char() {
// leading byte of 3-byte symbol: 1110 0001 - 1110 1111
for (c = 0xE1; c <= 0xEF; ++c) {
- u = c;
- CheckBrokenSymbol(first, last);
-
- u |= 0x808000;
- // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
- e = c & LEAD_BITS_MASK_3_BYTES;
- e <<= 12;
- CheckRecodeOK(e, first, 3);
-
- CheckEndOfInput(first, 2);
- CheckEndOfInput(first, 1);
- }
-
+ u = c;
+ CheckBrokenSymbol(first, last);
+
+ u |= 0x808000;
+ // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
+ e = c & LEAD_BITS_MASK_3_BYTES;
+ e <<= 12;
+ CheckRecodeOK(e, first, 3);
+
+ CheckEndOfInput(first, 2);
+ CheckEndOfInput(first, 1);
+ }
+
// possible overlong encoding with leading byte 1111 0000
{
u = c = 0xF0;
@@ -318,20 +318,20 @@ void TConversionTest::TestReadUTF8Char() {
// leading byte of 4-byte symbol: 1111 0001 - 1111 0111
for (c = 0xF1; c <= 0xF3; ++c) {
- u = c;
- CheckBrokenSymbol(first, last);
-
- u |= 0x80808000;
- // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
- e = c & LEAD_BITS_MASK_4_BYTES;
- e <<= 18;
- CheckRecodeOK(e, first, 4);
-
- CheckEndOfInput(first, 3);
- CheckEndOfInput(first, 2);
- CheckEndOfInput(first, 1);
- }
-
+ u = c;
+ CheckBrokenSymbol(first, last);
+
+ u |= 0x80808000;
+ // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
+ e = c & LEAD_BITS_MASK_4_BYTES;
+ e <<= 18;
+ CheckRecodeOK(e, first, 4);
+
+ CheckEndOfInput(first, 3);
+ CheckEndOfInput(first, 2);
+ CheckEndOfInput(first, 1);
+ }
+
// possible invalid code points with leading byte 1111 0100
{
c = 0xF4;
@@ -352,108 +352,108 @@ void TConversionTest::TestReadUTF8Char() {
// broken symbols: 1111 0101 - 1111 1111
for (c = 0xF5; c <= 0xFF; ++c) {
- u = c;
- CheckBrokenSymbol(first, last);
- }
-}
-
-void TConversionTest::TestGetUTF8CharLen() {
- wchar32 c;
- unsigned long u; // single UTF8 encoded character
- unsigned char* const first = reinterpret_cast<unsigned char*>(&u);
- unsigned char* const last = first + sizeof(u);
-
- // all ASCII characters are converted with no change (zero converted successfully as well)
- for (c = 0; c <= 0x7F; ++c) {
- u = c;
- CheckCharLen(first, last, 1, RECODE_OK);
- }
-
- // broken symbols from the second half of ASCII table (1000 0000 - 1011 1111)
- for (c = 0x80; c <= 0xBF; ++c) {
- u = c;
- CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
- }
-
- // leading byte of 2-byte symbol: 1100 0000 - 1101 1111
- for (c = 0xC0; c <= 0xDF; ++c) {
- u = c;
- CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
-
- u |= 0x8000;
- // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
- CheckCharLen(first, last, 2, RECODE_OK);
-
- CheckCharLen(first, first + 1, 0, RECODE_EOINPUT);
- }
-
- // leading byte of 3-byte symbol: 1110 0000 - 1110 1111
- for (c = 0xE0; c <= 0xEF; ++c) {
- u = c;
- CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
-
- u |= 0x808000;
- // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
- CheckCharLen(first, last, 3, RECODE_OK);
-
- CheckCharLen(first, first + 2, 0, RECODE_EOINPUT);
- CheckCharLen(first, first + 1, 0, RECODE_EOINPUT);
- }
-
- // leading byte of 4-byte symbol: 1111 0000 - 1111 0111
- for (c = 0xF0; c <= 0xF3; ++c) {
- u = c;
- CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
-
- u |= 0x80808000;
- // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
- CheckCharLen(first, last, 4, RECODE_OK);
-
- CheckCharLen(first, first + 3, 0, RECODE_EOINPUT);
- CheckCharLen(first, first + 2, 0, RECODE_EOINPUT);
- CheckCharLen(first, first + 1, 0, RECODE_EOINPUT);
- }
-
- // broken symbols: 1111 1000 - 1111 1111
- for (c = 0xF8; c <= 0xFF; ++c) {
- u = c;
- CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
- }
-}
-
-void TConversionTest::TestWriteUTF8Char() {
- wchar32 w;
- unsigned long u; // single UTF8 encoded character
- size_t n;
-
- for (w = 0x00; w < 0x80; ++w) {
- u = 0;
+ u = c;
+ CheckBrokenSymbol(first, last);
+ }
+}
+
+void TConversionTest::TestGetUTF8CharLen() {
+ wchar32 c;
+ unsigned long u; // single UTF8 encoded character
+ unsigned char* const first = reinterpret_cast<unsigned char*>(&u);
+ unsigned char* const last = first + sizeof(u);
+
+ // all ASCII characters are converted with no change (zero converted successfully as well)
+ for (c = 0; c <= 0x7F; ++c) {
+ u = c;
+ CheckCharLen(first, last, 1, RECODE_OK);
+ }
+
+ // broken symbols from the second half of ASCII table (1000 0000 - 1011 1111)
+ for (c = 0x80; c <= 0xBF; ++c) {
+ u = c;
+ CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
+ }
+
+ // leading byte of 2-byte symbol: 1100 0000 - 1101 1111
+ for (c = 0xC0; c <= 0xDF; ++c) {
+ u = c;
+ CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
+
+ u |= 0x8000;
+ // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
+ CheckCharLen(first, last, 2, RECODE_OK);
+
+ CheckCharLen(first, first + 1, 0, RECODE_EOINPUT);
+ }
+
+ // leading byte of 3-byte symbol: 1110 0000 - 1110 1111
+ for (c = 0xE0; c <= 0xEF; ++c) {
+ u = c;
+ CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
+
+ u |= 0x808000;
+ // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
+ CheckCharLen(first, last, 3, RECODE_OK);
+
+ CheckCharLen(first, first + 2, 0, RECODE_EOINPUT);
+ CheckCharLen(first, first + 1, 0, RECODE_EOINPUT);
+ }
+
+ // leading byte of 4-byte symbol: 1111 0000 - 1111 0111
+ for (c = 0xF0; c <= 0xF3; ++c) {
+ u = c;
+ CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
+
+ u |= 0x80808000;
+ // w: 0000 0000 0000 0000 - 0000 0111 1100 0000
+ CheckCharLen(first, last, 4, RECODE_OK);
+
+ CheckCharLen(first, first + 3, 0, RECODE_EOINPUT);
+ CheckCharLen(first, first + 2, 0, RECODE_EOINPUT);
+ CheckCharLen(first, first + 1, 0, RECODE_EOINPUT);
+ }
+
+ // broken symbols: 1111 1000 - 1111 1111
+ for (c = 0xF8; c <= 0xFF; ++c) {
+ u = c;
+ CheckCharLen(first, last, 0, RECODE_BROKENSYMBOL);
+ }
+}
+
+void TConversionTest::TestWriteUTF8Char() {
+ wchar32 w;
+ unsigned long u; // single UTF8 encoded character
+ size_t n;
+
+ for (w = 0x00; w < 0x80; ++w) {
+ u = 0;
WriteUTF8Char(w, n, reinterpret_cast<unsigned char*>(&u));
- UNIT_ASSERT((u & 0xFFFFFF80) == 0x00000000);
- UNIT_ASSERT(n == 1);
- }
-
- for (w = 0x80; w < 0x800; ++w) {
- u = 0;
+ UNIT_ASSERT((u & 0xFFFFFF80) == 0x00000000);
+ UNIT_ASSERT(n == 1);
+ }
+
+ for (w = 0x80; w < 0x800; ++w) {
+ u = 0;
WriteUTF8Char(w, n, reinterpret_cast<unsigned char*>(&u));
- UNIT_ASSERT((u & 0xFFFFC000) == 0x00008000); // see constants in ReadUTF8Char
- UNIT_ASSERT(n == 2);
- }
-
- for (w = 0x800; w < 0x10000; ++w) {
- u = 0;
+ UNIT_ASSERT((u & 0xFFFFC000) == 0x00008000); // see constants in ReadUTF8Char
+ UNIT_ASSERT(n == 2);
+ }
+
+ for (w = 0x800; w < 0x10000; ++w) {
+ u = 0;
WriteUTF8Char(w, n, reinterpret_cast<unsigned char*>(&u));
- UNIT_ASSERT((u & 0xFFC0C000) == 0x00808000); // see constants in ReadUTF8Char
- UNIT_ASSERT(n == 3);
- }
-
- for (w = 0x10000; w < 0x80; ++w) {
+ UNIT_ASSERT((u & 0xFFC0C000) == 0x00808000); // see constants in ReadUTF8Char
+ UNIT_ASSERT(n == 3);
+ }
+
+ for (w = 0x10000; w < 0x80; ++w) {
WriteUTF8Char(w, n, reinterpret_cast<unsigned char*>(&u));
- UNIT_ASSERT((u & 0xC0C0C000) == 0x80808000); // see constants in ReadUTF8Char
- UNIT_ASSERT(n == 4);
- }
-}
-
+ UNIT_ASSERT((u & 0xC0C0C000) == 0x80808000); // see constants in ReadUTF8Char
+ UNIT_ASSERT(n == 4);
+ }
+}
+
static void TestSurrogates(const char* str, const wchar16* wide, size_t wideSize) {
TUtf16String w = UTF8ToWide(str);
@@ -465,41 +465,41 @@ static void TestSurrogates(const char* str, const wchar16* wide, size_t wideSize
UNIT_ASSERT(s == str);
}
-void TConversionTest::TestUTF8ToWide() {
+void TConversionTest::TestUTF8ToWide() {
TUtf16String w = UTF8ToWide(Utf8Text_);
-
- UNIT_ASSERT(w.size() == 256);
+
+ UNIT_ASSERT(w.size() == 256);
UNIT_ASSERT(w.size() == UnicodeText_.size());
-
- for (int i = 0; i < 256; ++i) {
+
+ for (int i = 0; i < 256; ++i) {
UNIT_ASSERT_VALUES_EQUAL(w[i], UnicodeText_[i]);
- }
-
+ }
+
wchar16 buffer[4] = {0};
- size_t written = 0;
- // the function must extract 2 symbols only
+ size_t written = 0;
+ // the function must extract 2 symbols only
bool result = UTF8ToWide(utext, 5, buffer, written);
- UNIT_ASSERT(!result);
- UNIT_ASSERT(buffer[0] == 0x0410);
- UNIT_ASSERT(buffer[1] == 0x0411);
- UNIT_ASSERT(buffer[2] == 0x0000);
- UNIT_ASSERT(buffer[3] == 0x0000);
- UNIT_ASSERT(written == 2);
-
- memset(buffer, 0, 4);
- written = 0;
+ UNIT_ASSERT(!result);
+ UNIT_ASSERT(buffer[0] == 0x0410);
+ UNIT_ASSERT(buffer[1] == 0x0411);
+ UNIT_ASSERT(buffer[2] == 0x0000);
+ UNIT_ASSERT(buffer[3] == 0x0000);
+ UNIT_ASSERT(written == 2);
+
+ memset(buffer, 0, 4);
+ written = 0;
result = UTF8ToWide(utext, 1, buffer, written);
- UNIT_ASSERT(!result);
- UNIT_ASSERT(buffer[0] == 0x0000);
- UNIT_ASSERT(buffer[1] == 0x0000);
- UNIT_ASSERT(buffer[2] == 0x0000);
- UNIT_ASSERT(buffer[3] == 0x0000);
- UNIT_ASSERT(written == 0);
+ UNIT_ASSERT(!result);
+ UNIT_ASSERT(buffer[0] == 0x0000);
+ UNIT_ASSERT(buffer[1] == 0x0000);
+ UNIT_ASSERT(buffer[2] == 0x0000);
+ UNIT_ASSERT(buffer[3] == 0x0000);
+ UNIT_ASSERT(written == 0);
w = UTF8ToWide(asciiLatinAlphabet, strlen(asciiLatinAlphabet));
- UNIT_ASSERT(w == wideLatinAlphabet);
+ UNIT_ASSERT(w == wideLatinAlphabet);
w = UTF8ToWide(utf8CyrillicAlphabet, strlen(utf8CyrillicAlphabet));
- UNIT_ASSERT(w == wideCyrillicAlphabet);
+ UNIT_ASSERT(w == wideCyrillicAlphabet);
const char* utf8NonBMP = "\xf4\x80\x89\x84\xf4\x80\x89\x87\xf4\x80\x88\xba";
wchar16 wNonBMPDummy[] = {0xDBC0, 0xDE44, 0xDBC0, 0xDE47, 0xDBC0, 0xDE3A};
@@ -513,42 +513,42 @@ void TConversionTest::TestUTF8ToWide() {
"m\xFB\xB2\xA5\xAA\xAFyeuse.sexwebcamz.com")))),
TString(
"m\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBDyeuse.sexwebcamz.com"));
-}
-
-void TConversionTest::TestWideToUTF8() {
+}
+
+void TConversionTest::TestWideToUTF8() {
TString s = WideToUTF8(UnicodeText_);
size_t len = 0;
for (TUtf16String::const_iterator i = UnicodeText_.begin(), ie = UnicodeText_.end(); i != ie; ++i) {
len += UTF8RuneLenByUCS(*i);
}
-
+
UNIT_ASSERT(s.size() == Utf8Text_.size());
UNIT_ASSERT(s.size() == len);
-
- for (int i = 0; i < static_cast<int>(s.size()); ++i) {
+
+ for (int i = 0; i < static_cast<int>(s.size()); ++i) {
UNIT_ASSERT_VALUES_EQUAL(s[i], Utf8Text_[i]);
- }
-}
-
-void TConversionTest::TestGetNumOfUTF8Chars() {
- size_t n = 0;
+ }
+}
+
+void TConversionTest::TestGetNumOfUTF8Chars() {
+ size_t n = 0;
bool result = GetNumberOfUTF8Chars(Utf8Text_.c_str(), Utf8Text_.size(), n);
- UNIT_ASSERT(result);
- UNIT_ASSERT(n == 256);
-
- n = 0;
+ UNIT_ASSERT(result);
+ UNIT_ASSERT(n == 256);
+
+ n = 0;
result = GetNumberOfUTF8Chars(utext, 5, n);
- UNIT_ASSERT(!result);
- UNIT_ASSERT(n == 2);
-
- n = 0;
+ UNIT_ASSERT(!result);
+ UNIT_ASSERT(n == 2);
+
+ n = 0;
result = GetNumberOfUTF8Chars(utext, 1, n);
- UNIT_ASSERT(!result);
- UNIT_ASSERT(n == 0);
+ UNIT_ASSERT(!result);
+ UNIT_ASSERT(n == 0);
UNIT_ASSERT_EQUAL(GetNumberOfUTF8Chars("привет!"), 7);
-}
-
+}
+
void TConversionTest::TestSubstrUTF8() {
TStringBuf utextBuf(utext, sizeof(utext));
UNIT_ASSERT(SubstrUTF8(utextBuf, 0, 2) == utextBuf.substr(0, 4));
@@ -580,7 +580,7 @@ void TConversionTest::TestUnicodeDetails() {
}
class TWideUtilTest: public TTestBase {
- UNIT_TEST_SUITE(TWideUtilTest);
+ UNIT_TEST_SUITE(TWideUtilTest);
UNIT_TEST(TestCollapse);
UNIT_TEST(TestCollapseBuffer);
UNIT_TEST(TestStrip);
@@ -600,148 +600,148 @@ class TWideUtilTest: public TTestBase {
UNIT_TEST(TestToLowerStr);
UNIT_TEST(TestToUpperStr);
UNIT_TEST(TestToTitleStr);
- UNIT_TEST_SUITE_END();
-
-public:
- void TestCollapse() {
+ UNIT_TEST_SUITE_END();
+
+public:
+ void TestCollapse() {
TUtf16String s;
s.append(ws, Y_ARRAY_SIZE(ws)).append(3, 'a').append(ws, Y_ARRAY_SIZE(ws)).append(3, 'b').append(ws, Y_ARRAY_SIZE(ws));
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(" aaa bbb "));
- {
+ {
const TUtf16String w(ASCIIToWide(" a b c "));
- s = w;
- Collapse(s);
- UNIT_ASSERT(s == w);
+ s = w;
+ Collapse(s);
+ UNIT_ASSERT(s == w);
#ifndef TSTRING_IS_STD_STRING
- UNIT_ASSERT(s.c_str() == w.c_str()); // Collapse() does not change the string at all
+ UNIT_ASSERT(s.c_str() == w.c_str()); // Collapse() does not change the string at all
#endif
- }
+ }
s = ASCIIToWide(" 123 456 ");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(" 123 456 "));
-
+
s = ASCIIToWide(" 1\n\n\n23\t 4\f\f56 ");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(" 1 23 4 56 "));
-
+
s = ASCIIToWide(" 1\n\n\n\f\f56 ");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(" 1 56 "));
-
+
s = ASCIIToWide(" 1\r\n,\n(\n23\t 4\f\f56 ");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(" 1 , ( 23 4 56 "));
-
+
s = ASCIIToWide("1 23 ");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide("1 23 "));
- {
+ {
const TUtf16String w = ASCIIToWide(" ");
- s = w;
- Collapse(s);
- UNIT_ASSERT(s == w);
+ s = w;
+ Collapse(s);
+ UNIT_ASSERT(s == w);
#ifndef TSTRING_IS_STD_STRING
- UNIT_ASSERT(s.c_str() == w.c_str()); // Collapse() does not change the string at all
+ UNIT_ASSERT(s.c_str() == w.c_str()); // Collapse() does not change the string at all
#endif
- }
+ }
s = ASCIIToWide(" ");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(" "));
-
+
s = ASCIIToWide(",\r\n\"");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide(", \""));
-
+
s = ASCIIToWide("-");
- Collapse(s);
+ Collapse(s);
UNIT_ASSERT(s == ASCIIToWide("-"));
-
- s.clear();
- Collapse(s);
+
+ s.clear();
+ Collapse(s);
UNIT_ASSERT(s == TUtf16String());
- }
-
- void TestCollapseBuffer() {
+ }
+
+ void TestCollapseBuffer() {
TUtf16String s;
s.append(ws, Y_ARRAY_SIZE(ws)).append(3, 'a').append(ws, Y_ARRAY_SIZE(ws)).append(3, 'b').append(ws, Y_ARRAY_SIZE(ws));
- size_t n = Collapse(s.begin(), s.size());
- s.resize(n);
+ size_t n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(" aaa bbb "));
-
+
s = ASCIIToWide(" a b c ");
- n = Collapse(s.begin(), s.size());
- UNIT_ASSERT(n == s.size()); // length was not changed
+ n = Collapse(s.begin(), s.size());
+ UNIT_ASSERT(n == s.size()); // length was not changed
UNIT_ASSERT(s == ASCIIToWide(" a b c "));
-
+
s = ASCIIToWide(" 123 456 ");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(" 123 456 "));
-
+
s = ASCIIToWide(" 1\n\n\n23\t 4\f\f56 ");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(" 1 23 4 56 "));
-
+
s = ASCIIToWide(" 1\n\n\n\f\f56 ");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(" 1 56 "));
-
+
s = ASCIIToWide(" 1\r\n,\n(\n23\t 4\f\f56 ");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(" 1 , ( 23 4 56 "));
-
+
s = ASCIIToWide("1 23 ");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide("1 23 "));
-
+
s = ASCIIToWide(" ");
- n = Collapse(s.begin(), s.size());
- UNIT_ASSERT(n == 1);
+ n = Collapse(s.begin(), s.size());
+ UNIT_ASSERT(n == 1);
UNIT_ASSERT(s == ASCIIToWide(" "));
-
+
s = ASCIIToWide(" ");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(" "));
-
+
s = ASCIIToWide(",\r\n\"");
- n = Collapse(s.begin(), s.size());
- s.resize(n);
+ n = Collapse(s.begin(), s.size());
+ s.resize(n);
UNIT_ASSERT(s == ASCIIToWide(", \""));
-
+
s = ASCIIToWide("-");
- n = Collapse(s.begin(), s.size());
- UNIT_ASSERT(n == 1);
+ n = Collapse(s.begin(), s.size());
+ UNIT_ASSERT(n == 1);
UNIT_ASSERT(s == ASCIIToWide("-"));
-
+
s = ASCIIToWide("\t");
- n = Collapse(s.begin(), s.size());
- UNIT_ASSERT(n == 1);
+ n = Collapse(s.begin(), s.size());
+ UNIT_ASSERT(n == 1);
UNIT_ASSERT(s == ASCIIToWide(" "));
-
- s.clear();
- n = Collapse(s.begin(), s.size());
- UNIT_ASSERT(n == 0);
+
+ s.clear();
+ n = Collapse(s.begin(), s.size());
+ UNIT_ASSERT(n == 0);
UNIT_ASSERT(s == TUtf16String());
- }
-
- void TestStrip() {
+ }
+
+ void TestStrip() {
TUtf16String s;
-
- Strip(s);
+
+ Strip(s);
UNIT_ASSERT(s == TUtf16String());
StripLeft(s);
UNIT_ASSERT(s == TUtf16String());
StripRight(s);
UNIT_ASSERT(s == TUtf16String());
-
+
s = ASCIIToWide(" \t\r\n");
- Strip(s);
+ Strip(s);
UNIT_ASSERT(s == TUtf16String());
s = ASCIIToWide(" \t\r\n");
StripLeft(s);
@@ -749,9 +749,9 @@ public:
s = ASCIIToWide(" \t\r\n");
StripRight(s);
UNIT_ASSERT(s == TUtf16String());
-
+
s = ASCIIToWide("\t\f\va \r\n");
- Strip(s);
+ Strip(s);
UNIT_ASSERT(s == ASCIIToWide("a"));
s = ASCIIToWide("\t\f\va \r\n");
StripLeft(s);
@@ -759,9 +759,9 @@ public:
s = ASCIIToWide("\t\f\va \r\n");
StripRight(s);
UNIT_ASSERT(s == ASCIIToWide("\t\f\va"));
-
+
s = ASCIIToWide("\r\na\r\nb\t\tc\r\n");
- Strip(s);
+ Strip(s);
UNIT_ASSERT(s == ASCIIToWide("a\r\nb\t\tc"));
s = ASCIIToWide("\r\na\r\nb\t\tc\r\n");
StripLeft(s);
@@ -769,13 +769,13 @@ public:
s = ASCIIToWide("\r\na\r\nb\t\tc\r\n");
StripRight(s);
UNIT_ASSERT(s == ASCIIToWide("\r\na\r\nb\t\tc"));
-
+
const TUtf16String w(ASCIIToWide("a b"));
- s = w;
- Strip(s);
- UNIT_ASSERT(s == w);
+ s = w;
+ Strip(s);
+ UNIT_ASSERT(s == w);
#ifndef TSTRING_IS_STD_STRING
- UNIT_ASSERT(s.c_str() == w.c_str()); // Strip() does not change the string at all
+ UNIT_ASSERT(s.c_str() == w.c_str()); // Strip() does not change the string at all
#endif
s = w;
StripLeft(s);
@@ -789,31 +789,31 @@ public:
#ifndef TSTRING_IS_STD_STRING
UNIT_ASSERT(s.c_str() == w.c_str()); // Strip() does not change the string at all
#endif
- }
-
- void TestIsSpace() {
+ }
+
+ void TestIsSpace() {
UNIT_ASSERT(!IsSpace(TUtf16String()));
UNIT_ASSERT(IsSpace(ws, Y_ARRAY_SIZE(ws)));
-
+
TUtf16String w;
w.assign(ws, Y_ARRAY_SIZE(ws)).append(TUtf16String(1, '!'));
- UNIT_ASSERT(!IsSpace(w.c_str(), w.size()));
-
+ UNIT_ASSERT(!IsSpace(w.c_str(), w.size()));
+
w.assign(TUtf16String(1, '_')).append(ws, Y_ARRAY_SIZE(ws));
- UNIT_ASSERT(!IsSpace(w.c_str(), w.size()));
-
+ UNIT_ASSERT(!IsSpace(w.c_str(), w.size()));
+
w.assign(ws, Y_ARRAY_SIZE(ws)).append(TUtf16String(1, '$')).append(ws, Y_ARRAY_SIZE(ws));
- UNIT_ASSERT(!IsSpace(w.c_str(), w.size()));
- }
-
- void TestEscapeHtmlChars() {
- // characters from the first half of the ASCII table
+ UNIT_ASSERT(!IsSpace(w.c_str(), w.size()));
+ }
+
+ void TestEscapeHtmlChars() {
+ // characters from the first half of the ASCII table
for (wchar16 c = 1; c < 0x7F; ++c) {
TUtf16String w(1, c);
EscapeHtmlChars<false>(w);
-
- switch (c) {
+
+ switch (c) {
case '<':
UNIT_ASSERT(w == ASCIIToWide("&lt;"));
break;
@@ -829,8 +829,8 @@ public:
default:
UNIT_ASSERT(w == TUtf16String(1, c));
break;
- }
- }
+ }
+ }
for (wchar16 c = 1; c < 0x7F; ++c) {
TUtf16String w(1, c);
@@ -858,24 +858,24 @@ public:
break;
}
}
- }
+ }
- void TestToLower() {
- const size_t n = 32;
- wchar16 upperCase[n];
+ void TestToLower() {
+ const size_t n = 32;
+ wchar16 upperCase[n];
std::copy(wideCyrillicAlphabet, wideCyrillicAlphabet + n, upperCase);
- ToLower(upperCase, n);
+ ToLower(upperCase, n);
UNIT_ASSERT(TWtringBuf(upperCase, n) == TWtringBuf(wideCyrillicAlphabet + n, n));
- }
-
- void TestToUpper() {
- const size_t n = 32;
- wchar16 lowerCase[n];
+ }
+
+ void TestToUpper() {
+ const size_t n = 32;
+ wchar16 lowerCase[n];
std::copy(wideCyrillicAlphabet + n, wideCyrillicAlphabet + n * 2, lowerCase);
- ToUpper(lowerCase, n);
+ ToUpper(lowerCase, n);
UNIT_ASSERT(TWtringBuf(lowerCase, n) == TWtringBuf(wideCyrillicAlphabet, n));
- }
-
+ }
+
void TestWideString() {
const TUtf16String original = UTF32ToWide(WideStringTestData[0], CaseTestDataSize);
const TUtf16String lower = UTF32ToWide(WideStringTestData[1], CaseTestDataSize);
@@ -1737,6 +1737,6 @@ public:
UNIT_ASSERT(ToTitleRet(TWtringBuf(copy), 3, 100500) == title);
}
}
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TWideUtilTest);
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TWideUtilTest);
diff --git a/util/datetime/parser.rl6 b/util/datetime/parser.rl6
index 993a0e4f75..931f09eae1 100644
--- a/util/datetime/parser.rl6
+++ b/util/datetime/parser.rl6
@@ -9,7 +9,7 @@
#include <util/generic/ymath.h>
-%%{
+%%{
machine DateTimeParserCommon;
@@ -49,7 +49,7 @@ int12 = (digit digit?)
>clear_int
$update_int;
-int24 = ( digit digit ( digit digit )? )
+int24 = ( digit digit ( digit digit )? )
>clear_int
$update_int;
@@ -98,21 +98,21 @@ dow_spec = ( wkday ',' )?;
day = int12 %set_day;
year = int24 %set_year;
-
-# actually it must be from 0 to 23
+
+# actually it must be from 0 to 23
hour = int2 %set_hour;
-
-# actually it must be from 0 to 59
+
+# actually it must be from 0 to 59
min = int2 %set_minute;
-
-# actually it must be from 0 to 59
+
+# actually it must be from 0 to 59
sec = int2 %set_second;
-sec_spec = ( ':' . sec )?;
-
+sec_spec = ( ':' . sec )?;
+
# so called "military zone offset". I hardly believe someone uses it now, but we MUST respect RFc822
action set_mil_offset {
- char c = (char)toupper(fc);
+ char c = (char)toupper(fc);
if (c == 'Z')
DateTimeFields.ZoneOffsetMinutes = 0;
else {
@@ -135,10 +135,10 @@ action set_digit_offset {
mil_zone = /[A-IK-Za-ik-z]/ $set_mil_offset;
-# actions % were replaced with @ (when the script was migrated to ragel 5.24)
-# because ragel 5.24 does not call to the % action if it be called at the very end of string.
-# it is a bug in ragel 5 because ragel 6.2 works correctly with % at the end of string.
-# see http://www.complang.org/ragel/ChangeLog.
+# actions % were replaced with @ (when the script was migrated to ragel 5.24)
+# because ragel 5.24 does not call to the % action if it be called at the very end of string.
+# it is a bug in ragel 5 because ragel 6.2 works correctly with % at the end of string.
+# see http://www.complang.org/ragel/ChangeLog.
zone = 'UT' @{ DateTimeFields.ZoneOffsetMinutes = 0; }
| 'GMT' @{ DateTimeFields.ZoneOffsetMinutes = 0; }
@@ -150,23 +150,23 @@ zone = 'UT' @{ DateTimeFields.ZoneOffsetMinutes = 0; }
| 'MDT' @{ DateTimeFields.ZoneOffsetMinutes = -(i32)TDuration::Hours(6).Minutes(); }
| 'PST' @{ DateTimeFields.ZoneOffsetMinutes = -(i32)TDuration::Hours(8).Minutes();}
| 'PDT' @{ DateTimeFields.ZoneOffsetMinutes = -(i32)TDuration::Hours(7).Minutes(); };
-
+
digit_offset = ('+' | '-') > { Sign = fc == '+' ? 1 : -1; } . int4 @set_digit_offset;
-
-offset = ( zone | mil_zone | digit_offset );
-
+
+offset = ( zone | mil_zone | digit_offset );
+
rfc822datetime = ws0 . dow_spec . ws0 . day . ws1 . month3 . ws1 . year . ws1 . hour . ':' . min . sec_spec . ws1 . offset . ws0;
main := rfc822datetime;
-write data noerror;
+write data noerror;
+
+}%%
-}%%
-
TRfc822DateTimeParserDeprecated::TRfc822DateTimeParserDeprecated() {
%% write init;
}
-
+
bool TRfc822DateTimeParserDeprecated::ParsePart(const char* input, size_t len) {
const char* p = input;
const char* pe = input + len;
@@ -174,7 +174,7 @@ bool TRfc822DateTimeParserDeprecated::ParsePart(const char* input, size_t len) {
%% write exec;
return cs != %%{ write error; }%%;
}
-
+
TRfc822DateTimeParser::TRfc822DateTimeParser() {
%% write init;
}
@@ -224,17 +224,17 @@ write data noerror;
}%%
TIso8601DateTimeParserDeprecated::TIso8601DateTimeParserDeprecated() {
- %% write init;
+ %% write init;
}
bool TIso8601DateTimeParserDeprecated::ParsePart(const char* input, size_t len) {
const char* p = input;
const char* pe = input + len;
- %% write exec;
+ %% write exec;
return cs != %%{ write error; }%%;
}
-
+
TIso8601DateTimeParser::TIso8601DateTimeParser() {
%% write init;
}
@@ -687,7 +687,7 @@ bool ParseRFC822DateTime(const char* input, size_t inputLen, time_t& utcTime) {
bool ParseISO8601DateTime(const char* input, size_t inputLen, time_t& utcTime) {
try {
utcTime = ParseUnsafe<TIso8601DateTimeParser, TInstant>(input, inputLen).TimeT();
- return true;
+ return true;
} catch (const TDateTimeParseException&) {
return false;
}
diff --git a/util/datetime/parser_ut.cpp b/util/datetime/parser_ut.cpp
index 63498be95e..61364af997 100644
--- a/util/datetime/parser_ut.cpp
+++ b/util/datetime/parser_ut.cpp
@@ -2,68 +2,68 @@
#include <library/cpp/testing/unittest/registar.h>
-static const time_t SECONDS_PER_HOUR = 3600;
-static const time_t SECONDS_PER_MINUTE = 60;
-
+static const time_t SECONDS_PER_HOUR = 3600;
+static const time_t SECONDS_PER_MINUTE = 60;
+
Y_UNIT_TEST_SUITE(TDateTimeParseTest) {
Y_UNIT_TEST(TestRfc822Correct) {
- bool r = false;
- time_t t = 0;
-
- // predefined time zones
+ bool r = false;
+ time_t t = 0;
+
+ // predefined time zones
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 UT", t);
UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
-
+
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 GMT", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
-
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
+
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 EST", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_VALUES_EQUAL(t, (time_t)1109964885 + 5 * SECONDS_PER_HOUR);
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 EDT", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 4 * SECONDS_PER_HOUR);
-
+
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 CST", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 6 * SECONDS_PER_HOUR);
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 CDT", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 5 * SECONDS_PER_HOUR);
-
+
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 MST", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 7 * SECONDS_PER_HOUR);
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 MDT", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 6 * SECONDS_PER_HOUR);
-
+
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 PST", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 8 * SECONDS_PER_HOUR);
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 PDT", t);
- UNIT_ASSERT(r);
+ UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 7 * SECONDS_PER_HOUR);
-
- // optinal century
+
+ // optinal century
r = ParseRFC822DateTime("Fri, 4 Mar 05 19:34:45 UT", t);
UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
- // + optional day of week
+ // + optional day of week
r = ParseRFC822DateTime("4 Mar 05 19:34:45 UT", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
- // + optional seconds
+ // + optional seconds
r = ParseRFC822DateTime("4 Mar 05 19:34 UT", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964840);
-
- // local differential hour+min
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964840);
+
+ // local differential hour+min
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 +0300", t);
UNIT_ASSERT(r);
@@ -80,44 +80,44 @@ Y_UNIT_TEST_SUITE(TDateTimeParseTest) {
r = ParseRFC822DateTime("21 Apr 99 23:40 +0400", t);
UNIT_ASSERT(r);
UNIT_ASSERT_EQUAL(t, (time_t)924723600);
-
+
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34:45 -0300", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 3 * SECONDS_PER_HOUR);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 3 * SECONDS_PER_HOUR);
r = ParseRFC822DateTime("Fri, 4 Mar 2005 19:34 -0300", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964840 + 3 * SECONDS_PER_HOUR);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964840 + 3 * SECONDS_PER_HOUR);
r = ParseRFC822DateTime("Fri, 4 Mar 05 19:34:45 -0330", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 3 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 3 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
r = ParseRFC822DateTime("Fri, 4 Mar 05 19:34 -0330", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964840 + 3 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964840 + 3 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
r = ParseRFC822DateTime("4 Mar 2005 19:34:45 -1030", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 10 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885 + 10 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
r = ParseRFC822DateTime("4 Mar 2005 19:34 -1030", t);
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964840 + 10 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
-
- // white spaces
-
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964840 + 10 * SECONDS_PER_HOUR + 30 * SECONDS_PER_MINUTE);
+
+ // white spaces
+
r = ParseRFC822DateTime("Fri,4 Mar 2005 19:34:45 UT", t); // no space after comma
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
-
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
+
r = ParseRFC822DateTime(" Fri, 4 Mar 2005 19:34:45 UT ", t); // several spaces, leading and trailing
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
-
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
+
r = ParseRFC822DateTime(" \t Fri, \t 4 \t Mar \t 2005 \t 19:34:45 \t UT \t ", t); // spaces with tabs
- UNIT_ASSERT(r);
- UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
+ UNIT_ASSERT(r);
+ UNIT_ASSERT_EQUAL(t, (time_t)1109964885);
r = ParseRFC822DateTime("Thu, 01 Jan 1970 03:00:00 +0300", t); // spaces with tabs
UNIT_ASSERT(r);
@@ -129,36 +129,36 @@ Y_UNIT_TEST_SUITE(TDateTimeParseTest) {
}
time_t GetOffset(char militaryZone) {
- char ch = (char)toupper(militaryZone);
- if (ch == 'Z') {
- return 0;
- } else if (ch >= 'A' && ch < 'J') {
- return (ch - 'A' + 1) * SECONDS_PER_HOUR;
- } else if (ch > 'J' && ch <= 'M') {
- return (ch - 'A') * SECONDS_PER_HOUR;
- } else if (ch >= 'N' && ch <= 'Y') {
- return -(ch - 'N' + 1) * SECONDS_PER_HOUR;
- } else {
+ char ch = (char)toupper(militaryZone);
+ if (ch == 'Z') {
+ return 0;
+ } else if (ch >= 'A' && ch < 'J') {
+ return (ch - 'A' + 1) * SECONDS_PER_HOUR;
+ } else if (ch > 'J' && ch <= 'M') {
+ return (ch - 'A') * SECONDS_PER_HOUR;
+ } else if (ch >= 'N' && ch <= 'Y') {
+ return -(ch - 'N' + 1) * SECONDS_PER_HOUR;
+ } else {
ythrow yexception() << "Invalid military zone.";
- }
- }
-
+ }
+ }
+
void DoTestMilitaryZones(char firstChar, char lastChar) {
- const time_t utcTime = 1109964885; // Fri, 4 Mar 2005 19:34:45 UT
- char text[] = "Fri, 4 Mar 2005 19:34:45 A";
- const size_t zoneCharIndex = strlen(text) - 1;
-
+ const time_t utcTime = 1109964885; // Fri, 4 Mar 2005 19:34:45 UT
+ char text[] = "Fri, 4 Mar 2005 19:34:45 A";
+ const size_t zoneCharIndex = strlen(text) - 1;
+
for (char militaryZone = firstChar; militaryZone <= lastChar; ++militaryZone) {
- time_t t = 0;
- const time_t offset = GetOffset(militaryZone);
- // the last character is replaced with next zone symbol
- text[zoneCharIndex] = militaryZone;
-
+ time_t t = 0;
+ const time_t offset = GetOffset(militaryZone);
+ // the last character is replaced with next zone symbol
+ text[zoneCharIndex] = militaryZone;
+
UNIT_ASSERT(ParseRFC822DateTime(text, t));
UNIT_ASSERT_EQUAL(t, utcTime - offset);
- }
- }
-
+ }
+ }
+
Y_UNIT_TEST(TestRfc822MilitaryZones) {
DoTestMilitaryZones('A', 'I');
DoTestMilitaryZones('K', 'Z');
@@ -167,8 +167,8 @@ Y_UNIT_TEST_SUITE(TDateTimeParseTest) {
}
Y_UNIT_TEST(TestRfc822IncorrectDates) {
- bool r = true;
- time_t t = 0;
+ bool r = true;
+ time_t t = 0;
t = 12345;
r = ParseRFC822DateTime("", t);
@@ -195,64 +195,64 @@ Y_UNIT_TEST_SUITE(TDateTimeParseTest) {
// r = ParseRFC822DateTime("31 Apr 2004 19:34:45 +0300", t);
// UNIT_ASSERT_EQUAL(r, false);
-
+
r = ParseRFC822DateTime("17 Nov 2008 19:34:45", t); // no specified time zone
- UNIT_ASSERT(!r);
-
+ UNIT_ASSERT(!r);
+
r = ParseRFC822DateTime("17 Nov 200 19:34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 8 19:34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 20008 19:34:45 UT", t);
- UNIT_ASSERT(!r);
-
+ UNIT_ASSERT(!r);
+
r = ParseRFC822DateTime("17 Nov 2008 1:34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 2008 123:34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 2008 19:1:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 2008 19:123:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 2008 19:34:1 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 2008 19:34:123 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("17 Nov 2008 19:34:12.12 UT", t); // fractions of second are now allowed
UNIT_ASSERT(!r);
-
+
r = ParseRFC822DateTime("Mon , 17 Nov 2005 19:34:45 UT", t); // space after day before the comma
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2005 19 :34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2005 19: 34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2005 19:34 :45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2005 19:34: 45 UT", t);
- UNIT_ASSERT(!r);
-
+ UNIT_ASSERT(!r);
+
r = ParseRFC822DateTime("Monday, 17 Nov 2005 19:34:45 UT", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 November 2008 19:34:45 UT", t);
- UNIT_ASSERT(!r);
-
+ UNIT_ASSERT(!r);
+
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 +3", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 +03", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 +030", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 +03030", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 -3", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 -03", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 -030", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
r = ParseRFC822DateTime("Mon, 17 Nov 2008 19:34:45 -03030", t);
- UNIT_ASSERT(!r);
+ UNIT_ASSERT(!r);
}
Y_UNIT_TEST(TestRfc822Partial) {
@@ -357,8 +357,8 @@ Y_UNIT_TEST_SUITE(TDateTimeParseTest) {
UNIT_ASSERT_VALUES_EQUAL(t, 1234567890);
ret = ParseISO8601DateTime("2010-03-28T04:27:00.000-07:00", t);
- UNIT_ASSERT(ret);
- UNIT_ASSERT_VALUES_EQUAL(t, 1269775620);
+ UNIT_ASSERT(ret);
+ UNIT_ASSERT_VALUES_EQUAL(t, 1269775620);
}
Y_UNIT_TEST(TestIso8601TimeZone) {
diff --git a/util/datetime/systime.cpp b/util/datetime/systime.cpp
index 9b1f693a70..6ee7e8fc6e 100644
--- a/util/datetime/systime.cpp
+++ b/util/datetime/systime.cpp
@@ -55,23 +55,23 @@ char* ctime_r(const time_t* clock, char* buf) {
#define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365)
#define FOURCENTURIES (400 * 365 + 100 - 3)
-//! Inverse of gmtime: converts struct tm to time_t, assuming the data
-//! in tm is UTC rather than local timezone. This implementation
-//! returns the number of seconds since 1970-01-01, converted to time_t.
-//! @note this code adopted from
-//! http://osdir.com/ml/web.wget.patches/2005-07/msg00010.html
-//! Subject: A more robust timegm - msg#00010
+//! Inverse of gmtime: converts struct tm to time_t, assuming the data
+//! in tm is UTC rather than local timezone. This implementation
+//! returns the number of seconds since 1970-01-01, converted to time_t.
+//! @note this code adopted from
+//! http://osdir.com/ml/web.wget.patches/2005-07/msg00010.html
+//! Subject: A more robust timegm - msg#00010
time_t TimeGM(const struct tm* t) {
- static const unsigned short int month_to_days[][13] = {
+ static const unsigned short int month_to_days[][13] = {
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}};
-
+
// Only handles years after 1970
if (t->tm_year < 70) {
return (time_t)-1;
}
-
- int days = 365 * (t->tm_year - 70);
+
+ int days = 365 * (t->tm_year - 70);
// Take into account the leap days between 1970 and YEAR-1
days += (t->tm_year - 1 - 68) / 4 - ((t->tm_year - 1) / 100) + ((t->tm_year - 1 + 300) / 400);
@@ -79,8 +79,8 @@ time_t TimeGM(const struct tm* t) {
return (time_t)-1;
}
days += month_to_days[LEAPYEAR(1900 + t->tm_year)][t->tm_mon];
- days += t->tm_mday - 1;
-
+ days += t->tm_mday - 1;
+
unsigned long secs = days * 86400ul + t->tm_hour * 3600 + t->tm_min * 60 + t->tm_sec;
return (time_t)secs;
}
diff --git a/util/folder/dirut.cpp b/util/folder/dirut.cpp
index 9f7f0ca8c3..ffc9b09f96 100644
--- a/util/folder/dirut.cpp
+++ b/util/folder/dirut.cpp
@@ -423,32 +423,32 @@ TString RealLocation(const TString& path) {
ythrow TFileError() << "RealLocation failed \"" << path << "\"";
}
-int MakeTempDir(char path[/*FILENAME_MAX*/], const char* prefix) {
- int ret;
+int MakeTempDir(char path[/*FILENAME_MAX*/], const char* prefix) {
+ int ret;
TString sysTmp;
-#ifdef _win32_
+#ifdef _win32_
if (!prefix || *prefix == '/') {
-#else
+#else
if (!prefix) {
-#endif
+#endif
sysTmp = GetSystemTempDir();
prefix = sysTmp.data();
}
if ((ret = ResolvePath(prefix, nullptr, path, 1)) != 0)
- return ret;
+ return ret;
if (!TFileStat(path).IsDir())
return ENOENT;
- if ((strlcat(path, "tmpXXXXXX", FILENAME_MAX) > FILENAME_MAX - 100))
- return EINVAL;
- if (!(mkdtemp(path)))
- return errno ? errno : EINVAL;
- strcat(path, LOCSLASH_S);
- return 0;
-}
-
+ if ((strlcat(path, "tmpXXXXXX", FILENAME_MAX) > FILENAME_MAX - 100))
+ return EINVAL;
+ if (!(mkdtemp(path)))
+ return errno ? errno : EINVAL;
+ strcat(path, LOCSLASH_S);
+ return 0;
+}
+
bool IsDir(const TString& path) {
return TFileStat(path).IsDir();
}
@@ -541,72 +541,72 @@ TString GetDirName(const TString& path) {
#ifdef _win32_
-char* realpath(const char* pathname, char resolved_path[MAXPATHLEN]) {
- // partial implementation: no path existence check
- return _fullpath(resolved_path, pathname, MAXPATHLEN - 1);
-}
-
-#endif
-
+char* realpath(const char* pathname, char resolved_path[MAXPATHLEN]) {
+ // partial implementation: no path existence check
+ return _fullpath(resolved_path, pathname, MAXPATHLEN - 1);
+}
+
+#endif
+
TString GetBaseName(const TString& path) {
return TFsPath(path).Basename();
-}
-
+}
+
static bool IsAbsolutePath(const char* str) {
return str && TPathSplitTraitsLocal::IsAbsolutePath(TStringBuf(str, NStringPrivate::GetStringLengthWithLimit(str, 3)));
}
-int ResolvePath(const char* rel, const char* abs, char res[/*MAXPATHLEN*/], bool isdir) {
+int ResolvePath(const char* rel, const char* abs, char res[/*MAXPATHLEN*/], bool isdir) {
char t[MAXPATHLEN * 2 + 3];
- size_t len;
+ size_t len;
- *res = 0;
- if (!rel || !*rel)
- return EINVAL;
+ *res = 0;
+ if (!rel || !*rel)
+ return EINVAL;
if (!IsAbsolutePath(rel) && IsAbsolutePath(abs)) {
- len = strlcpy(t, abs, sizeof(t));
+ len = strlcpy(t, abs, sizeof(t));
if (len >= sizeof(t) - 3)
- return EINVAL;
+ return EINVAL;
if (t[len - 1] != LOCSLASH_C)
- t[len++] = LOCSLASH_C;
+ t[len++] = LOCSLASH_C;
len += strlcpy(t + len, rel, sizeof(t) - len);
- } else {
- len = strlcpy(t, rel, sizeof(t));
- }
+ } else {
+ len = strlcpy(t, rel, sizeof(t));
+ }
if (len >= sizeof(t) - 3)
- return EINVAL;
+ return EINVAL;
if (isdir && t[len - 1] != LOCSLASH_C) {
t[len++] = LOCSLASH_C;
t[len] = 0;
- }
- if (!realpath(t, res)) {
+ }
+ if (!realpath(t, res)) {
if (!isdir && realpath(GetDirName(t).data(), res)) {
len = strlen(res);
if (res[len - 1] != LOCSLASH_C) {
res[len++] = LOCSLASH_C;
res[len] = 0;
- }
+ }
strcpy(res + len, GetBaseName(t).data());
return 0;
- }
- return errno ? errno : ENOENT;
- }
- if (isdir) {
- len = strlen(res);
+ }
+ return errno ? errno : ENOENT;
+ }
+ if (isdir) {
+ len = strlen(res);
if (res[len - 1] != LOCSLASH_C) {
res[len++] = LOCSLASH_C;
- res[len] = 0;
- }
- }
- return 0;
-}
-
+ res[len] = 0;
+ }
+ }
+ return 0;
+}
+
TString ResolvePath(const char* rel, const char* abs, bool isdir) {
- char buf[PATH_MAX];
+ char buf[PATH_MAX];
if (ResolvePath(rel, abs, buf, isdir))
ythrow yexception() << "cannot resolve path: \"" << rel << "\"";
- return buf;
-}
+ return buf;
+}
TString ResolvePath(const char* path, bool isDir) {
return ResolvePath(path, nullptr, isDir);
diff --git a/util/folder/dirut.h b/util/folder/dirut.h
index d153a5cc90..2537027b12 100644
--- a/util/folder/dirut.h
+++ b/util/folder/dirut.h
@@ -73,14 +73,14 @@ TString RealLocation(const TString& path); /// throws; last file name component
TString GetSystemTempDir();
-int MakeTempDir(char path[/*FILENAME_MAX*/], const char* prefix);
-
-int ResolvePath(const char* rel, const char* abs, char res[/*FILENAME_MAX*/], bool isdir = false);
+int MakeTempDir(char path[/*FILENAME_MAX*/], const char* prefix);
+
+int ResolvePath(const char* rel, const char* abs, char res[/*FILENAME_MAX*/], bool isdir = false);
TString ResolvePath(const char* rel, const char* abs, bool isdir = false);
TString ResolvePath(const char* path, bool isDir = false);
-
+
TString ResolveDir(const char* path);
-
+
bool SafeResolveDir(const char* path, TString& result);
TString GetDirName(const TString& path);
diff --git a/util/generic/strbase.h b/util/generic/strbase.h
index 0af08e21a3..ab39fc7537 100644
--- a/util/generic/strbase.h
+++ b/util/generic/strbase.h
@@ -39,7 +39,7 @@ class TStringBase {
using TStringView = std::basic_string_view<TCharType>;
using TStringViewWithTraits = std::basic_string_view<TCharType, TTraitsType>;
-public:
+public:
using TChar = TCharType;
using TTraits = TTraitsType;
using TSelf = TStringBase<TDerived, TChar, TTraits>;
@@ -47,7 +47,7 @@ public:
using size_type = size_t;
using difference_type = ptrdiff_t;
static constexpr size_t npos = size_t(-1);
-
+
using const_iterator = const TCharType*;
using const_reference = const TCharType&;
@@ -111,7 +111,7 @@ public:
return TTraits::length(s);
}
return 0;
- }
+ }
template <class TCharTraits>
inline constexpr operator std::basic_string_view<TCharType, TCharTraits>() const {
@@ -121,27 +121,27 @@ public:
template <class TCharTraits, class Allocator>
inline explicit operator std::basic_string<TCharType, TCharTraits, Allocator>() const {
return std::basic_string<TCharType, TCharTraits, Allocator>(Ptr(), Len());
- }
+ }
/**
* @param Pointer to character inside the string, or nullptr.
* @return Offset from string beginning (in chars), or npos on nullptr.
*/
inline size_t off(const TCharType* ret) const noexcept {
- return ret ? (size_t)(ret - Ptr()) : npos;
- }
+ return ret ? (size_t)(ret - Ptr()) : npos;
+ }
inline size_t IterOff(const_iterator it) const noexcept {
return begin() <= it && end() > it ? size_t(it - begin()) : npos;
}
inline const_iterator begin() const noexcept {
- return Ptr();
- }
+ return Ptr();
+ }
inline const_iterator end() const noexcept {
- return Ptr() + size();
- }
+ return Ptr() + size();
+ }
inline const_iterator cbegin() const noexcept {
return begin();
@@ -169,8 +169,8 @@ public:
inline TCharType back() const noexcept {
Y_ASSERT(!this->empty());
- return Ptr()[Len() - 1];
- }
+ return Ptr()[Len() - 1];
+ }
inline TCharType front() const noexcept {
Y_ASSERT(!empty());
@@ -182,20 +182,20 @@ public:
}
constexpr inline size_t size() const noexcept {
- return Len();
- }
+ return Len();
+ }
constexpr inline bool is_null() const noexcept {
- return *Ptr() == 0;
- }
+ return *Ptr() == 0;
+ }
Y_PURE_FUNCTION constexpr inline bool empty() const noexcept {
- return Len() == 0;
- }
+ return Len() == 0;
+ }
constexpr inline explicit operator bool() const noexcept {
return !empty();
- }
+ }
public: // style-guide compliant methods
constexpr const TCharType* Data() const noexcept {
@@ -217,37 +217,37 @@ private:
}
public:
- // ~~~ Comparison ~~~ : FAMILY0(int, compare)
+ // ~~~ Comparison ~~~ : FAMILY0(int, compare)
static int compare(const TSelf& s1, const TSelf& s2) noexcept {
return s1.AsStringView().compare(s2.AsStringView());
- }
+ }
static int compare(const TCharType* p, const TSelf& s2) noexcept {
TCharType null{0};
return TStringViewWithTraits(p ? p : &null).compare(s2.AsStringView());
- }
+ }
static int compare(const TSelf& s1, const TCharType* p) noexcept {
TCharType null{0};
return s1.AsStringView().compare(p ? p : &null);
- }
+ }
static int compare(const TStringView s1, const TStringView s2) noexcept {
return TStringViewWithTraits(s1.data(), s1.size()).compare(TStringViewWithTraits(s2.data(), s2.size()));
- }
+ }
- template <class T>
+ template <class T>
inline int compare(const T& t) const noexcept {
- return compare(*this, t);
- }
+ return compare(*this, t);
+ }
inline int compare(size_t p, size_t n, const TStringView t) const noexcept {
return compare(LegacySubString(*this, p, n), t);
- }
+ }
inline int compare(size_t p, size_t n, const TStringView t, size_t p1, size_t n1) const noexcept {
return compare(LegacySubString(*this, p, n), LegacySubString(t, p1, n1));
- }
+ }
inline int compare(size_t p, size_t n, const TStringView t, size_t n1) const noexcept {
return compare(LegacySubString(*this, p, n), LegacySubString(t, 0, n1));
@@ -277,10 +277,10 @@ public:
return TStringViewWithTraits{s1.data(), s1.size()} == TStringViewWithTraits{s2.data(), s2.size()};
}
- template <class T>
+ template <class T>
inline bool equal(const T& t) const noexcept {
return equal(*this, t);
- }
+ }
inline bool equal(size_t p, size_t n, const TStringView t) const noexcept {
return equal(LegacySubString(*this, p, n), t);
@@ -296,19 +296,19 @@ public:
static inline bool StartsWith(const TCharType* what, size_t whatLen, const TCharType* with, size_t withLen) noexcept {
return withLen <= whatLen && TStringViewWithTraits(what, withLen) == TStringViewWithTraits(with, withLen);
- }
+ }
static inline bool EndsWith(const TCharType* what, size_t whatLen, const TCharType* with, size_t withLen) noexcept {
return withLen <= whatLen && TStringViewWithTraits(what + whatLen - withLen, withLen) == TStringViewWithTraits(with, withLen);
- }
+ }
inline bool StartsWith(const TCharType* s, size_t n) const noexcept {
return StartsWith(Ptr(), Len(), s, n);
- }
+ }
inline bool StartsWith(const TStringView s) const noexcept {
return StartsWith(s.data(), s.length());
- }
+ }
inline bool StartsWith(TCharType ch) const noexcept {
return !empty() && TTraits::eq(*Ptr(), ch);
@@ -316,11 +316,11 @@ public:
inline bool EndsWith(const TCharType* s, size_t n) const noexcept {
return EndsWith(Ptr(), Len(), s, n);
- }
+ }
inline bool EndsWith(const TStringView s) const noexcept {
return EndsWith(s.data(), s.length());
- }
+ }
inline bool EndsWith(TCharType ch) const noexcept {
return !empty() && TTraits::eq(Ptr()[Len() - 1], ch);
@@ -329,7 +329,7 @@ public:
template <typename TDerived2, typename TTraits2>
bool operator==(const TStringBase<TDerived2, TChar, TTraits2>& s2) const noexcept {
return equal(*this, s2);
- }
+ }
bool operator==(TStringView s2) const noexcept {
return equal(*this, s2);
@@ -337,17 +337,17 @@ public:
bool operator==(const TCharType* pc) const noexcept {
return equal(*this, pc);
- }
+ }
#ifndef __cpp_impl_three_way_comparison
friend bool operator==(const TCharType* pc, const TSelf& s) noexcept {
return equal(pc, s);
- }
+ }
template <typename TDerived2, typename TTraits2>
friend bool operator!=(const TSelf& s1, const TStringBase<TDerived2, TChar, TTraits2>& s2) noexcept {
return !(s1 == s2);
- }
+ }
friend bool operator!=(const TSelf& s1, TStringView s2) noexcept {
return !(s1 == s2);
@@ -355,114 +355,114 @@ public:
friend bool operator!=(const TSelf& s, const TCharType* pc) noexcept {
return !(s == pc);
- }
+ }
friend bool operator!=(const TCharType* pc, const TSelf& s) noexcept {
return !(pc == s);
- }
+ }
#endif
template <typename TDerived2, typename TTraits2>
friend bool operator<(const TSelf& s1, const TStringBase<TDerived2, TChar, TTraits2>& s2) noexcept {
- return compare(s1, s2) < 0;
- }
+ return compare(s1, s2) < 0;
+ }
friend bool operator<(const TSelf& s1, TStringView s2) noexcept {
return compare(s1, s2) < 0;
}
friend bool operator<(const TSelf& s, const TCharType* pc) noexcept {
- return compare(s, pc) < 0;
- }
+ return compare(s, pc) < 0;
+ }
friend bool operator<(const TCharType* pc, const TSelf& s) noexcept {
- return compare(pc, s) < 0;
- }
+ return compare(pc, s) < 0;
+ }
template <typename TDerived2, typename TTraits2>
friend bool operator<=(const TSelf& s1, const TStringBase<TDerived2, TChar, TTraits2>& s2) noexcept {
- return compare(s1, s2) <= 0;
- }
+ return compare(s1, s2) <= 0;
+ }
friend bool operator<=(const TSelf& s1, TStringView s2) noexcept {
return compare(s1, s2) <= 0;
}
friend bool operator<=(const TSelf& s, const TCharType* pc) noexcept {
- return compare(s, pc) <= 0;
- }
+ return compare(s, pc) <= 0;
+ }
friend bool operator<=(const TCharType* pc, const TSelf& s) noexcept {
- return compare(pc, s) <= 0;
- }
+ return compare(pc, s) <= 0;
+ }
template <typename TDerived2, typename TTraits2>
friend bool operator>(const TSelf& s1, const TStringBase<TDerived2, TChar, TTraits2>& s2) noexcept {
- return compare(s1, s2) > 0;
- }
+ return compare(s1, s2) > 0;
+ }
friend bool operator>(const TSelf& s1, TStringView s2) noexcept {
return compare(s1, s2) > 0;
}
friend bool operator>(const TSelf& s, const TCharType* pc) noexcept {
- return compare(s, pc) > 0;
- }
+ return compare(s, pc) > 0;
+ }
friend bool operator>(const TCharType* pc, const TSelf& s) noexcept {
- return compare(pc, s) > 0;
- }
+ return compare(pc, s) > 0;
+ }
template <typename TDerived2, typename TTraits2>
friend bool operator>=(const TSelf& s1, const TStringBase<TDerived2, TChar, TTraits2>& s2) noexcept {
- return compare(s1, s2) >= 0;
- }
-
+ return compare(s1, s2) >= 0;
+ }
+
friend bool operator>=(const TSelf& s1, TStringView s2) noexcept {
return compare(s1, s2) >= 0;
}
friend bool operator>=(const TSelf& s, const TCharType* pc) noexcept {
- return compare(s, pc) >= 0;
- }
-
+ return compare(s, pc) >= 0;
+ }
+
friend bool operator>=(const TCharType* pc, const TSelf& s) noexcept {
- return compare(pc, s) >= 0;
- }
-
- // ~~ Read access ~~
+ return compare(pc, s) >= 0;
+ }
+
+ // ~~ Read access ~~
inline TCharType at(size_t pos) const noexcept {
if (Y_LIKELY(pos < Len())) {
- return (Ptr())[pos];
+ return (Ptr())[pos];
}
- return 0;
- }
+ return 0;
+ }
inline TCharType operator[](size_t pos) const noexcept {
Y_ASSERT(pos < this->size());
return Ptr()[pos];
- }
+ }
- //~~~~Search~~~~
+ //~~~~Search~~~~
/**
* @return Position of the substring inside this string, or `npos` if not found.
*/
inline size_t find(const TStringView s, size_t pos = 0) const noexcept {
return find(s.data(), pos, s.size());
- }
-
+ }
+
inline size_t find(const TCharType* s, size_t pos, size_t count) const noexcept {
return AsStringView().find(s, pos, count);
}
inline size_t find(TCharType c, size_t pos = 0) const noexcept {
return AsStringView().find(c, pos);
- }
+ }
inline size_t rfind(TCharType c) const noexcept {
return AsStringView().rfind(c);
- }
+ }
inline size_t rfind(TCharType c, size_t pos) const noexcept {
if (pos == 0) {
@@ -491,11 +491,11 @@ public:
return find(ui8(c), pos) != npos;
}
- //~~~~Character Set Search~~~
+ //~~~~Character Set Search~~~
inline size_t find_first_of(TCharType c) const noexcept {
return find_first_of(c, 0);
- }
-
+ }
+
inline size_t find_first_of(TCharType c, size_t pos) const noexcept {
return find(c, pos);
}
@@ -506,8 +506,8 @@ public:
inline size_t find_first_of(const TStringView set, size_t pos) const noexcept {
return AsStringView().find_first_of(set.data(), pos, set.size());
- }
-
+ }
+
inline size_t find_first_not_of(TCharType c) const noexcept {
return find_first_not_of(c, 0);
}
@@ -522,7 +522,7 @@ public:
inline size_t find_first_not_of(const TStringView set, size_t pos) const noexcept {
return AsStringView().find_first_not_of(set.data(), pos, set.size());
- }
+ }
inline size_t find_last_of(TCharType c, size_t pos = npos) const noexcept {
return find_last_of(&c, pos, 1);
@@ -534,7 +534,7 @@ public:
inline size_t find_last_of(const TCharType* set, size_t pos, size_t n) const noexcept {
return AsStringView().find_last_of(set, pos, n);
- }
+ }
inline size_t find_last_not_of(TCharType c, size_t pos = npos) const noexcept {
return AsStringView().find_last_not_of(c, pos);
@@ -548,37 +548,37 @@ public:
return AsStringView().find_last_not_of(set, pos, n);
}
- inline size_t copy(TCharType* pc, size_t n, size_t pos) const {
+ inline size_t copy(TCharType* pc, size_t n, size_t pos) const {
if (pos > Len()) {
throw std::out_of_range("TStringBase::copy");
}
- return CopyImpl(pc, n, pos);
- }
+ return CopyImpl(pc, n, pos);
+ }
inline size_t copy(TCharType* pc, size_t n) const noexcept {
return CopyImpl(pc, n, 0);
- }
+ }
inline size_t strcpy(TCharType* pc, size_t n) const noexcept {
- if (n) {
+ if (n) {
n = copy(pc, n - 1);
pc[n] = 0;
}
return n;
- }
+ }
inline TDerived copy() const Y_WARN_UNUSED_RESULT {
- return TDerived(Ptr(), Len());
- }
+ return TDerived(Ptr(), Len());
+ }
// ~~~ Partial copy ~~~~
TDerived substr(size_t pos, size_t n = npos) const Y_WARN_UNUSED_RESULT {
return TDerived(*This(), pos, n);
}
-private:
+private:
using GenericFinder = const TCharType* (*)(const TCharType*, size_t, const TCharType*, size_t);
TStringViewWithTraits AsStringView() const {
@@ -586,22 +586,22 @@ private:
}
constexpr inline const TCharType* Ptr() const noexcept {
- return This()->data();
- }
+ return This()->data();
+ }
constexpr inline size_t Len() const noexcept {
- return This()->length();
- }
-
+ return This()->length();
+ }
+
constexpr inline const TDerived* This() const noexcept {
- return static_cast<const TDerived*>(this);
- }
-
+ return static_cast<const TDerived*>(this);
+ }
+
inline size_t CopyImpl(TCharType* pc, size_t n, size_t pos) const noexcept {
- const size_t toCopy = Min(Len() - pos, n);
+ const size_t toCopy = Min(Len() - pos, n);
TTraits::copy(pc, Ptr() + pos, toCopy);
- return toCopy;
- }
+ return toCopy;
+ }
};
diff --git a/util/generic/string.cpp b/util/generic/string.cpp
index 07e7053cfc..3c655f1f66 100644
--- a/util/generic/string.cpp
+++ b/util/generic/string.cpp
@@ -4,12 +4,12 @@
#include <util/system/sanitizers.h>
#include <util/system/sys_alloc.h>
#include <util/charset/wide.h>
-
+
#include <iostream>
#include <cctype>
alignas(32) const char NULL_STRING_REPR[128] = {0};
-
+
std::ostream& operator<<(std::ostream& os, const TString& s) {
return os.write(s.data(), s.size());
}
diff --git a/util/generic/string.h b/util/generic/string.h
index 04c9c08132..8cd8aa6917 100644
--- a/util/generic/string.h
+++ b/util/generic/string.h
@@ -8,7 +8,7 @@
#include <string_view>
#include <util/system/yassert.h>
-#include <util/system/atomic.h>
+#include <util/system/atomic.h>
#include "ptr.h"
#include "utility.h"
@@ -61,11 +61,11 @@ public:
};
alignas(32) extern const char NULL_STRING_REPR[128];
-
+
struct TRefCountHolder {
TAtomicCounter C = 1;
};
-
+
template <class B>
struct TStdString: public TRefCountHolder, public B {
template <typename... Args>
@@ -73,7 +73,7 @@ struct TStdString: public TRefCountHolder, public B {
: B(std::forward<Args>(args)...)
{
}
-
+
inline bool IsNull() const noexcept {
return this == NullStr();
}
@@ -97,12 +97,12 @@ private:
delete this;
}
}
-
+
inline long RefCount() const noexcept {
return C.Val();
}
};
-
+
template <class TStringType>
class TBasicCharRef {
public:
@@ -157,7 +157,7 @@ private:
template <typename TCharType, typename TTraits>
class TBasicString: public TStringBase<TBasicString<TCharType, TTraits>, TCharType, TTraits> {
-public:
+public:
// TODO: Move to private section
using TBase = TStringBase<TBasicString, TCharType, TTraits>;
using TStringType = std::basic_string<TCharType, TTraits>;
@@ -172,13 +172,13 @@ public:
using char_type = TCharType; // TODO: DROP
using value_type = TCharType;
using traits_type = TTraits;
-
+
using iterator = TCharType*;
using reverse_iterator = typename TBase::template TReverseIteratorBase<iterator>;
using typename TBase::const_iterator;
using typename TBase::const_reference;
using typename TBase::const_reverse_iterator;
-
+
struct TUninitialized {
explicit TUninitialized(size_t size)
: Size(size)
@@ -194,12 +194,12 @@ public:
return res;
}
-protected:
+protected:
#ifdef TSTRING_IS_STD_STRING
TStorage Storage_;
#else
TStorage S_;
-
+
template <typename... A>
static TStorage Construct(A&&... a) {
return {new TStdStr(std::forward<A>(a)...), typename TStorage::TNoIncrement()};
@@ -222,7 +222,7 @@ protected:
*
* @throw std::length_error
*/
- void Clone() {
+ void Clone() {
Construct(StdStr()).Swap(S_);
}
@@ -331,7 +331,7 @@ public:
using TBase::end; //!< const_iterator TStringBase::end() const
using TBase::rbegin; //!< const_reverse_iterator TStringBase::rbegin() const
using TBase::rend; //!< const_reverse_iterator TStringBase::rend() const
-
+
inline size_t capacity() const noexcept {
#ifdef TSTRING_IS_STD_STRING
return Storage_.capacity();
@@ -369,7 +369,7 @@ public:
MutRef().resize(n, c);
return *this;
- }
+ }
// ~~~ Constructor ~~~ : FAMILY0(,TBasicString)
TBasicString() noexcept
@@ -409,7 +409,7 @@ public:
#endif
}
- template <typename T, typename A>
+ template <typename T, typename A>
explicit inline TBasicString(const std::basic_string<TCharType, T, A>& s)
: TBasicString(s.data(), s.size())
{
@@ -432,12 +432,12 @@ public:
: S_(n ? Construct(s, pos, n) : Construct())
#endif
{
- }
+ }
TBasicString(const TCharType* pc)
: TBasicString(pc, TBase::StrLen(pc))
{
- }
+ }
// TODO thegeorg@: uncomment and fix clients
// TBasicString(std::nullptr_t) = delete;
@@ -448,14 +448,14 @@ public:
: S_(n ? Construct(pc, n) : Construct())
#endif
{
- }
+ }
TBasicString(std::nullptr_t, size_t) = delete;
-
+
TBasicString(const TCharType* pc, size_t pos, size_t n)
: TBasicString(pc + pos, n)
{
- }
-
+ }
+
#ifdef TSTRING_IS_STD_STRING
explicit TBasicString(TExplicitType<TCharType> c) {
Storage_.push_back(c);
@@ -464,7 +464,7 @@ public:
explicit TBasicString(TExplicitType<TCharType> c)
: TBasicString(&c.Value(), 1)
{
- }
+ }
explicit TBasicString(const reference& c)
: TBasicString(&c, 1)
{
@@ -478,8 +478,8 @@ public:
: S_(Construct(n, c))
#endif
{
- }
-
+ }
+
/**
* Constructs an uninitialized string of size `uninitialized.Size`. The proper
* way to use this ctor is via `TBasicString::Uninitialized` factory function.
@@ -491,13 +491,13 @@ public:
S_ = Construct();
#endif
ReserveAndResize(uninitialized.Size);
- }
-
+ }
+
TBasicString(const TCharType* b, const TCharType* e)
: TBasicString(b, e - b)
{
- }
-
+ }
+
explicit TBasicString(const TBasicStringBuf<TCharType, TTraits> s)
: TBasicString(s.data(), s.size())
{
@@ -534,7 +534,7 @@ private:
template <typename... R>
static size_t SumLength(const TBasicStringBuf<TCharType, TTraits> s1, const R&... r) noexcept {
return s1.size() + SumLength(r...);
- }
+ }
template <typename... R>
static size_t SumLength(const TCharType /*s1*/, const R&... r) noexcept {
@@ -543,8 +543,8 @@ private:
static constexpr size_t SumLength() noexcept {
return 0;
- }
-
+ }
+
template <typename... R>
static void CopyAll(TCharType* p, const TBasicStringBuf<TCharType, TTraits> s, const R&... r) {
TTraits::copy(p, s.data(), s.size());
@@ -800,7 +800,7 @@ public:
TBasicString& AppendUtf16(const ::TWtringBuf& s);
- inline void push_back(TCharType c) {
+ inline void push_back(TCharType c) {
// TODO
append(c);
}
@@ -1047,11 +1047,11 @@ public:
TBasicString& remove(size_t pos = 0) Y_NOEXCEPT {
if (pos < length()) {
MutRef().erase(pos);
- }
+ }
return *this;
- }
-
+ }
+
TBasicString& erase(size_t pos = 0, size_t n = TBase::npos) Y_NOEXCEPT {
MutRef().erase(pos, n);
@@ -1109,8 +1109,8 @@ public:
MutRef().replace(pos, n1, n2, c);
return *this;
- }
-
+ }
+
TBasicString& replace(size_t pos, size_t n, const TBasicStringBuf<TCharType, TTraits> s, size_t spos = 0, size_t sn = TBase::npos) Y_NOEXCEPT {
MutRef().replace(pos, n, s, spos, sn);
@@ -1123,8 +1123,8 @@ public:
#else
S_.Swap(s.S_);
#endif
- }
-
+ }
+
/**
* @returns String suitable for debug printing (like Python's `repr()`).
* Format of the string is unspecified and may be changed over time.
@@ -1189,8 +1189,8 @@ public:
return changed;
}
-};
-
+};
+
std::ostream& operator<<(std::ostream&, const TString&);
std::istream& operator>>(std::istream&, TString&);
diff --git a/util/generic/string_ut.cpp b/util/generic/string_ut.cpp
index 8fc87cc0a1..ac82e9091d 100644
--- a/util/generic/string_ut.cpp
+++ b/util/generic/string_ut.cpp
@@ -21,13 +21,13 @@ static_assert(sizeof(TString) == sizeof(const char*), "expect sizeof(TString) ==
#endif
class TStringTestZero: public TTestBase {
- UNIT_TEST_SUITE(TStringTestZero);
+ UNIT_TEST_SUITE(TStringTestZero);
UNIT_TEST(TestZero);
UNIT_TEST_SUITE_END();
public:
void TestZero() {
- const char data[] = "abc\0def\0";
+ const char data[] = "abc\0def\0";
TString s(data, sizeof(data));
UNIT_ASSERT(s.size() == sizeof(data));
UNIT_ASSERT(s.StartsWith(s));
@@ -49,60 +49,60 @@ public:
TString copy = s;
copy.replace(copy.size() - 1, 1, "z");
- UNIT_ASSERT(s != copy);
+ UNIT_ASSERT(s != copy);
copy.replace(copy.size() - 1, 1, "\0", 0, 1);
- UNIT_ASSERT(s == copy);
+ UNIT_ASSERT(s == copy);
TString prefix(data, 5);
UNIT_ASSERT(s.StartsWith(prefix));
- UNIT_ASSERT(s != prefix);
- UNIT_ASSERT(s > prefix);
+ UNIT_ASSERT(s != prefix);
+ UNIT_ASSERT(s > prefix);
UNIT_ASSERT(s > s.data());
UNIT_ASSERT(s == TString(s.data(), s.size()));
- UNIT_ASSERT(data < s);
-
- s.remove(5);
- UNIT_ASSERT(s == prefix);
- }
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TStringTestZero);
-
+ UNIT_ASSERT(data < s);
+
+ s.remove(5);
+ UNIT_ASSERT(s == prefix);
+ }
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TStringTestZero);
+
template <typename TStringType, typename TTestData>
-class TStringStdTestImpl {
+class TStringStdTestImpl {
using TChar = typename TStringType::char_type;
using TTraits = typename TStringType::traits_type;
using TView = std::basic_string_view<TChar, TTraits>;
-
+
TTestData Data_;
-
-protected:
+
+protected:
void Constructor() {
- // @todo use UNIT_TEST_EXCEPTION
- try {
+ // @todo use UNIT_TEST_EXCEPTION
+ try {
TStringType s((size_t)-1, *Data_.a());
- UNIT_ASSERT(false);
- } catch (const std::length_error&) {
- UNIT_ASSERT(true);
- } catch (...) {
- //Expected exception is length_error:
- UNIT_ASSERT(false);
- }
+ UNIT_ASSERT(false);
+ } catch (const std::length_error&) {
+ UNIT_ASSERT(true);
+ } catch (...) {
+ //Expected exception is length_error:
+ UNIT_ASSERT(false);
+ }
}
- void reserve() {
+ void reserve() {
#if 0
TStringType s;
- // @todo use UNIT_TEST_EXCEPTION
- try {
- s.reserve(s.max_size() + 1);
- UNIT_ASSERT(false);
- } catch (const std::length_error&) {
- UNIT_ASSERT(true);
- } catch (...) {
- //Expected exception is length_error:
- UNIT_ASSERT(false);
- }
+ // @todo use UNIT_TEST_EXCEPTION
+ try {
+ s.reserve(s.max_size() + 1);
+ UNIT_ASSERT(false);
+ } catch (const std::length_error&) {
+ UNIT_ASSERT(true);
+ } catch (...) {
+ //Expected exception is length_error:
+ UNIT_ASSERT(false);
+ }
// Non-shared behaviour - never shrink
@@ -150,149 +150,149 @@ protected:
#endif
}
- void short_string() {
+ void short_string() {
TStringType const ref_short_str1(Data_.str1()), ref_short_str2(Data_.str2());
TStringType short_str1(ref_short_str1), short_str2(ref_short_str2);
TStringType const ref_long_str1(Data_.str__________________________________________________1());
TStringType const ref_long_str2(Data_.str__________________________________________________2());
TStringType long_str1(ref_long_str1), long_str2(ref_long_str2);
- UNIT_ASSERT(short_str1 == ref_short_str1);
- UNIT_ASSERT(long_str1 == ref_long_str1);
+ UNIT_ASSERT(short_str1 == ref_short_str1);
+ UNIT_ASSERT(long_str1 == ref_long_str1);
- {
+ {
TStringType str1(short_str1);
- str1 = long_str1;
- UNIT_ASSERT(str1 == ref_long_str1);
- }
+ str1 = long_str1;
+ UNIT_ASSERT(str1 == ref_long_str1);
+ }
- {
+ {
TStringType str1(long_str1);
- str1 = short_str1;
- UNIT_ASSERT(str1 == ref_short_str1);
- }
-
- {
- short_str1.swap(short_str2);
- UNIT_ASSERT((short_str1 == ref_short_str2) && (short_str2 == ref_short_str1));
- short_str1.swap(short_str2);
- }
-
- {
- long_str1.swap(long_str2);
- UNIT_ASSERT((long_str1 == ref_long_str2) && (long_str2 == ref_long_str1));
- long_str1.swap(long_str2);
- }
-
- {
- short_str1.swap(long_str1);
- UNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1));
- short_str1.swap(long_str1);
- }
-
- {
- long_str1.swap(short_str1);
- UNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1));
- long_str1.swap(short_str1);
- }
-
- {
- //This is to test move constructor
+ str1 = short_str1;
+ UNIT_ASSERT(str1 == ref_short_str1);
+ }
+
+ {
+ short_str1.swap(short_str2);
+ UNIT_ASSERT((short_str1 == ref_short_str2) && (short_str2 == ref_short_str1));
+ short_str1.swap(short_str2);
+ }
+
+ {
+ long_str1.swap(long_str2);
+ UNIT_ASSERT((long_str1 == ref_long_str2) && (long_str2 == ref_long_str1));
+ long_str1.swap(long_str2);
+ }
+
+ {
+ short_str1.swap(long_str1);
+ UNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1));
+ short_str1.swap(long_str1);
+ }
+
+ {
+ long_str1.swap(short_str1);
+ UNIT_ASSERT((short_str1 == ref_long_str1) && (long_str1 == ref_short_str1));
+ long_str1.swap(short_str1);
+ }
+
+ {
+ //This is to test move constructor
TVector<TStringType> str_vect;
- str_vect.push_back(short_str1);
- str_vect.push_back(long_str1);
- str_vect.push_back(short_str2);
- str_vect.push_back(long_str2);
+ str_vect.push_back(short_str1);
+ str_vect.push_back(long_str1);
+ str_vect.push_back(short_str2);
+ str_vect.push_back(long_str2);
UNIT_ASSERT(str_vect[0] == ref_short_str1);
UNIT_ASSERT(str_vect[1] == ref_long_str1);
UNIT_ASSERT(str_vect[2] == ref_short_str2);
UNIT_ASSERT(str_vect[3] == ref_long_str2);
- }
+ }
}
- void erase() {
+ void erase() {
TChar const* c_str = Data_.Hello_World();
TStringType str(c_str);
- UNIT_ASSERT(str == c_str);
+ UNIT_ASSERT(str == c_str);
- str.erase(str.begin() + 1, str.end() - 1); // Erase all but first and last.
+ str.erase(str.begin() + 1, str.end() - 1); // Erase all but first and last.
- size_t i;
- for (i = 0; i < str.size(); ++i) {
- switch (i) {
- case 0:
+ size_t i;
+ for (i = 0; i < str.size(); ++i) {
+ switch (i) {
+ case 0:
UNIT_ASSERT(str[i] == *Data_.H());
- break;
+ break;
- case 1:
+ case 1:
UNIT_ASSERT(str[i] == *Data_.d());
- break;
+ break;
- default:
- UNIT_ASSERT(false);
- }
+ default:
+ UNIT_ASSERT(false);
+ }
}
- str.insert(1, c_str);
+ str.insert(1, c_str);
str.erase(str.begin()); // Erase first element.
- str.erase(str.end() - 1); // Erase last element.
- UNIT_ASSERT(str == c_str);
- str.clear(); // Erase all.
- UNIT_ASSERT(str.empty());
-
- str = c_str;
- UNIT_ASSERT(str == c_str);
-
- str.erase(1, str.size() - 1); // Erase all but first and last.
- for (i = 0; i < str.size(); i++) {
- switch (i) {
- case 0:
+ str.erase(str.end() - 1); // Erase last element.
+ UNIT_ASSERT(str == c_str);
+ str.clear(); // Erase all.
+ UNIT_ASSERT(str.empty());
+
+ str = c_str;
+ UNIT_ASSERT(str == c_str);
+
+ str.erase(1, str.size() - 1); // Erase all but first and last.
+ for (i = 0; i < str.size(); i++) {
+ switch (i) {
+ case 0:
UNIT_ASSERT(str[i] == *Data_.H());
- break;
+ break;
- case 1:
+ case 1:
UNIT_ASSERT(str[i] == *Data_.d());
- break;
+ break;
- default:
- UNIT_ASSERT(false);
- }
+ default:
+ UNIT_ASSERT(false);
+ }
}
-
- str.erase(1);
+
+ str.erase(1);
UNIT_ASSERT(str == Data_.H());
}
- void data() {
+ void data() {
TStringType xx;
- // ISO-IEC-14882:1998(E), 21.3.6, paragraph 3
+ // ISO-IEC-14882:1998(E), 21.3.6, paragraph 3
UNIT_ASSERT(xx.data() != nullptr);
- }
+ }
- void c_str() {
+ void c_str() {
TStringType low(Data_._2004_01_01());
TStringType xx;
TStringType yy;
- // ISO-IEC-14882:1998(E), 21.3.6, paragraph 1
- UNIT_ASSERT(*(yy.c_str()) == 0);
+ // ISO-IEC-14882:1998(E), 21.3.6, paragraph 1
+ UNIT_ASSERT(*(yy.c_str()) == 0);
- // Blocks A and B should follow each other.
- // Block A:
+ // Blocks A and B should follow each other.
+ // Block A:
xx = Data_._123456();
- xx += low;
+ xx += low;
UNIT_ASSERT(xx.c_str() == TView(Data_._1234562004_01_01()));
- // End of block A
+ // End of block A
- // Block B:
+ // Block B:
xx = Data_._1234();
xx += Data_._5();
UNIT_ASSERT(xx.c_str() == TView(Data_._12345()));
- // End of block B
- }
+ // End of block B
+ }
void null_char_of_empty() {
const TStringType s;
@@ -300,8 +300,8 @@ protected:
UNIT_ASSERT(s[s.size()] == 0);
}
- void null_char() {
- // ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), 21.3.4 ('... the const version')
+ void null_char() {
+ // ISO/IEC 14882:1998(E), ISO/IEC 14882:2003(E), 21.3.4 ('... the const version')
const TStringType s(Data_._123456());
UNIT_ASSERT(s[s.size()] == 0);
@@ -315,11 +315,11 @@ protected:
using reference = volatile typename TStringType::value_type&;
#else
using reference = typename TStringType::reference;
-#endif
+#endif
reference trailing_zero = s[s.size()];
trailing_zero = 0;
UNIT_ASSERT(trailing_zero == 0);
- }
+ }
// Allowed since C++17, see http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2475
void null_char_assignment_to_subscript_of_nonempty() {
@@ -355,45 +355,45 @@ protected:
}
#endif
- void insert() {
+ void insert() {
TStringType strorg = Data_.This_is_test_string_for_string_calls();
TStringType str;
- // In case of reallocation there is no auto reference problem
+ // In case of reallocation there is no auto reference problem
// so we reserve a big enough TStringType to be sure to test this
- // particular point.
+ // particular point.
- str.reserve(100);
- str = strorg;
+ str.reserve(100);
+ str = strorg;
- //test self insertion:
- str.insert(10, str.c_str() + 5, 15);
+ //test self insertion:
+ str.insert(10, str.c_str() + 5, 15);
UNIT_ASSERT(str == Data_.This_is_teis_test_string_st_string_for_string_calls());
- str = strorg;
- str.insert(15, str.c_str() + 5, 25);
+ str = strorg;
+ str.insert(15, str.c_str() + 5, 25);
UNIT_ASSERT(str == Data_.This_is_test_stis_test_string_for_stringring_for_string_calls());
- str = strorg;
- str.insert(0, str.c_str() + str.size() - 4, 4);
+ str = strorg;
+ str.insert(0, str.c_str() + str.size() - 4, 4);
UNIT_ASSERT(str == Data_.allsThis_is_test_string_for_string_calls());
- str = strorg;
- str.insert(0, str.c_str() + str.size() / 2 - 1, str.size() / 2 + 1);
+ str = strorg;
+ str.insert(0, str.c_str() + str.size() / 2 - 1, str.size() / 2 + 1);
UNIT_ASSERT(str == Data_.ng_for_string_callsThis_is_test_string_for_string_calls());
- str = strorg;
+ str = strorg;
typename TStringType::iterator b = str.begin();
typename TStringType::const_iterator s = str.begin() + str.size() / 2 - 1;
typename TStringType::const_iterator e = str.end();
- str.insert(b, s, e);
+ str.insert(b, s, e);
UNIT_ASSERT(str == Data_.ng_for_string_callsThis_is_test_string_for_string_calls());
#if 0
- // AV
- str = strorg;
- str.insert(str.begin(), str.begin() + str.size() / 2 - 1, str.end());
- UNIT_ASSERT(str == Data.ng_for_string_callsThis_is_test_string_for_string_calls());
+ // AV
+ str = strorg;
+ str.insert(str.begin(), str.begin() + str.size() / 2 - 1, str.end());
+ UNIT_ASSERT(str == Data.ng_for_string_callsThis_is_test_string_for_string_calls());
#endif
TStringType str0;
@@ -401,17 +401,17 @@ protected:
UNIT_ASSERT(str0 == Data_._00000());
TStringType str1;
- {
+ {
typename TStringType::size_type pos = 0, nb = 2;
str1.insert(pos, nb, *Data_._1());
- }
+ }
UNIT_ASSERT(str1 == Data_._11());
- str0.insert(0, str1);
+ str0.insert(0, str1);
UNIT_ASSERT(str0 == Data_._1100000());
TStringType str2(Data_._2345());
- str0.insert(str0.size(), str2, 1, 2);
+ str0.insert(str0.size(), str2, 1, 2);
UNIT_ASSERT(str0 == Data_._110000034());
str1.insert(str1.begin() + 1, 2, *Data_._2());
@@ -425,40 +425,40 @@ protected:
str1.insert(str1.begin() + 6, *Data_._5());
UNIT_ASSERT(str1 == Data_._123344544321());
- }
+ }
- void resize() {
+ void resize() {
TStringType s;
- s.resize(0);
+ s.resize(0);
- UNIT_ASSERT(*s.c_str() == 0);
+ UNIT_ASSERT(*s.c_str() == 0);
s = Data_._1234567();
- s.resize(0);
- UNIT_ASSERT(*s.c_str() == 0);
+ s.resize(0);
+ UNIT_ASSERT(*s.c_str() == 0);
s = Data_._1234567();
- s.resize(1);
- UNIT_ASSERT(s.size() == 1);
+ s.resize(1);
+ UNIT_ASSERT(s.size() == 1);
UNIT_ASSERT(*s.c_str() == *Data_._1());
- UNIT_ASSERT(*(s.c_str() + 1) == 0);
+ UNIT_ASSERT(*(s.c_str() + 1) == 0);
s = Data_._1234567();
#if 0
- s.resize(10);
+ s.resize(10);
#else
- s.resize(10, 0);
+ s.resize(10, 0);
#endif
- UNIT_ASSERT(s.size() == 10);
+ UNIT_ASSERT(s.size() == 10);
UNIT_ASSERT(s[6] == *Data_._7());
- UNIT_ASSERT(s[7] == 0);
- UNIT_ASSERT(s[8] == 0);
- UNIT_ASSERT(s[9] == 0);
- }
+ UNIT_ASSERT(s[7] == 0);
+ UNIT_ASSERT(s[8] == 0);
+ UNIT_ASSERT(s[9] == 0);
+ }
- void find() {
+ void find() {
TStringType s(Data_.one_two_three_one_two_three());
UNIT_ASSERT(s.find(Data_.one()) == 0);
@@ -469,33 +469,33 @@ protected:
UNIT_ASSERT(s.find(Data_.one(), TStringType::npos) == TStringType::npos);
UNIT_ASSERT(s.find_first_of(Data_.abcde()) == 2);
UNIT_ASSERT(s.find_first_not_of(Data_.enotw_()) == 9);
- }
+ }
- void capacity() {
+ void capacity() {
TStringType s;
UNIT_ASSERT(s.capacity() < s.max_size());
UNIT_ASSERT(s.capacity() >= s.size());
-
- for (int i = 0; i < 18; ++i) {
- s += ' ';
-
+
+ for (int i = 0; i < 18; ++i) {
+ s += ' ';
+
UNIT_ASSERT(s.capacity() > 0);
UNIT_ASSERT(s.capacity() < s.max_size());
UNIT_ASSERT(s.capacity() >= s.size());
- }
+ }
}
- void assign() {
+ void assign() {
TStringType s;
TChar const* cstr = Data_.test_string_for_assign();
- s.assign(cstr, cstr + 22);
+ s.assign(cstr, cstr + 22);
UNIT_ASSERT(s == Data_.test_string_for_assign());
TStringType s2(Data_.other_test_string());
- s.assign(s2);
- UNIT_ASSERT(s == s2);
+ s.assign(s2);
+ UNIT_ASSERT(s == s2);
static TStringType str1;
static TStringType str2;
@@ -507,34 +507,34 @@ protected:
UNIT_ASSERT(str1[5] == *Data_._6());
UNIT_ASSERT(str2[29] == *Data_._0());
- }
+ }
- void copy() {
+ void copy() {
TStringType s(Data_.foo());
TChar dest[4];
- dest[0] = dest[1] = dest[2] = dest[3] = 1;
- s.copy(dest, 4);
- int pos = 0;
+ dest[0] = dest[1] = dest[2] = dest[3] = 1;
+ s.copy(dest, 4);
+ int pos = 0;
UNIT_ASSERT(dest[pos++] == *Data_.f());
UNIT_ASSERT(dest[pos++] == *Data_.o());
UNIT_ASSERT(dest[pos++] == *Data_.o());
- UNIT_ASSERT(dest[pos++] == 1);
+ UNIT_ASSERT(dest[pos++] == 1);
- dest[0] = dest[1] = dest[2] = dest[3] = 1;
- s.copy(dest, 4, 2);
- pos = 0;
+ dest[0] = dest[1] = dest[2] = dest[3] = 1;
+ s.copy(dest, 4, 2);
+ pos = 0;
UNIT_ASSERT(dest[pos++] == *Data_.o());
- UNIT_ASSERT(dest[pos++] == 1);
-
- // @todo use UNIT_TEST_EXCEPTION
- try {
- s.copy(dest, 4, 5);
- UNIT_ASSERT(!"expected std::out_of_range");
- } catch (const std::out_of_range&) {
- UNIT_ASSERT(true);
+ UNIT_ASSERT(dest[pos++] == 1);
+
+ // @todo use UNIT_TEST_EXCEPTION
+ try {
+ s.copy(dest, 4, 5);
+ UNIT_ASSERT(!"expected std::out_of_range");
+ } catch (const std::out_of_range&) {
+ UNIT_ASSERT(true);
} catch (...) {
- UNIT_ASSERT(!"expected std::out_of_range");
- }
+ UNIT_ASSERT(!"expected std::out_of_range");
+ }
}
void cbegin_cend() {
@@ -546,18 +546,18 @@ protected:
}
}
- void compare() {
+ void compare() {
TStringType str1(Data_.abcdef());
TStringType str2;
str2 = Data_.abcdef();
- UNIT_ASSERT(str1.compare(str2) == 0);
+ UNIT_ASSERT(str1.compare(str2) == 0);
UNIT_ASSERT(str1.compare(str2.data(), str2.size()) == 0);
str2 = Data_.abcde();
- UNIT_ASSERT(str1.compare(str2) > 0);
+ UNIT_ASSERT(str1.compare(str2) > 0);
UNIT_ASSERT(str1.compare(str2.data(), str2.size()) > 0);
str2 = Data_.abcdefg();
- UNIT_ASSERT(str1.compare(str2) < 0);
+ UNIT_ASSERT(str1.compare(str2) < 0);
UNIT_ASSERT(str1.compare(str2.data(), str2.size()) < 0);
UNIT_ASSERT(str1.compare(Data_.abcdef()) == 0);
@@ -565,24 +565,24 @@ protected:
UNIT_ASSERT(str1.compare(Data_.abcdefg()) < 0);
str2 = Data_.cde();
- UNIT_ASSERT(str1.compare(2, 3, str2) == 0);
+ UNIT_ASSERT(str1.compare(2, 3, str2) == 0);
str2 = Data_.cd();
- UNIT_ASSERT(str1.compare(2, 3, str2) > 0);
+ UNIT_ASSERT(str1.compare(2, 3, str2) > 0);
str2 = Data_.cdef();
- UNIT_ASSERT(str1.compare(2, 3, str2) < 0);
+ UNIT_ASSERT(str1.compare(2, 3, str2) < 0);
str2 = Data_.abcdef();
- UNIT_ASSERT(str1.compare(2, 3, str2, 2, 3) == 0);
- UNIT_ASSERT(str1.compare(2, 3, str2, 2, 2) > 0);
- UNIT_ASSERT(str1.compare(2, 3, str2, 2, 4) < 0);
+ UNIT_ASSERT(str1.compare(2, 3, str2, 2, 3) == 0);
+ UNIT_ASSERT(str1.compare(2, 3, str2, 2, 2) > 0);
+ UNIT_ASSERT(str1.compare(2, 3, str2, 2, 4) < 0);
UNIT_ASSERT(str1.compare(2, 3, Data_.cdefgh(), 3) == 0);
UNIT_ASSERT(str1.compare(2, 3, Data_.cdefgh(), 2) > 0);
UNIT_ASSERT(str1.compare(2, 3, Data_.cdefgh(), 4) < 0);
- }
+ }
- void find_last_of() {
- // 21.3.6.4
+ void find_last_of() {
+ // 21.3.6.4
TStringType s(Data_.one_two_three_one_two_three());
UNIT_ASSERT(s.find_last_of(Data_.abcde()) == 26);
@@ -597,16 +597,16 @@ protected:
UNIT_ASSERT(test.find_last_of(*Data_.a(), 2) == 2);
UNIT_ASSERT(test.find_last_of(*Data_.a(), 1) == 0);
UNIT_ASSERT(test.find_last_of(*Data_.a(), 0) == 0);
- }
+ }
#if 0
- void rfind() {
- // 21.3.6.2
+ void rfind() {
+ // 21.3.6.2
TStringType s(Data.one_two_three_one_two_three());
- UNIT_ASSERT(s.rfind(Data.two()) == 18);
+ UNIT_ASSERT(s.rfind(Data.two()) == 18);
UNIT_ASSERT(s.rfind(Data.two(), 0) == TStringType::npos);
- UNIT_ASSERT(s.rfind(Data.two(), 11) == 4);
- UNIT_ASSERT(s.rfind(*Data.w()) == 19);
+ UNIT_ASSERT(s.rfind(Data.two(), 11) == 4);
+ UNIT_ASSERT(s.rfind(*Data.w()) == 19);
TStringType test(Data.aba());
@@ -617,10 +617,10 @@ protected:
UNIT_ASSERT(test.rfind(*Data.a(), 2) == 2);
UNIT_ASSERT(test.rfind(*Data.a(), 1) == 0);
UNIT_ASSERT(test.rfind(*Data.a(), 0) == 0);
- }
+ }
#endif
- void find_last_not_of() {
- // 21.3.6.6
+ void find_last_not_of() {
+ // 21.3.6.6
TStringType s(Data_.one_two_three_one_two_three());
UNIT_ASSERT(s.find_last_not_of(Data_.ehortw_()) == 15);
@@ -640,90 +640,90 @@ protected:
UNIT_ASSERT(test.find_last_not_of(*Data_.b(), 1) == 0);
UNIT_ASSERT(test.find_last_not_of(*Data_.a(), 0) == TStringType::npos);
UNIT_ASSERT(test.find_last_not_of(*Data_.b(), 0) == 0);
- }
+ }
#if 0
- void replace() {
+ void replace() {
// This test case is for the non template basic_TString::replace method,
- // this is why we play with the const iterators and reference to guaranty
- // that the right method is called.
+ // this is why we play with the const iterators and reference to guaranty
+ // that the right method is called.
const TStringType v(Data._78());
TStringType s(Data._123456());
TStringType const& cs = s;
typename TStringType::iterator i = s.begin() + 1;
- s.replace(i, i + 3, v.begin(), v.end());
+ s.replace(i, i + 3, v.begin(), v.end());
UNIT_ASSERT(s == Data._17856());
- s = Data._123456();
- i = s.begin() + 1;
- s.replace(i, i + 1, v.begin(), v.end());
+ s = Data._123456();
+ i = s.begin() + 1;
+ s.replace(i, i + 1, v.begin(), v.end());
UNIT_ASSERT(s == Data._1783456());
- s = Data._123456();
- i = s.begin() + 1;
+ s = Data._123456();
+ i = s.begin() + 1;
typename TStringType::const_iterator ci = s.begin() + 1;
- s.replace(i, i + 3, ci + 3, cs.end());
+ s.replace(i, i + 3, ci + 3, cs.end());
UNIT_ASSERT(s == Data._15656());
- s = Data._123456();
- i = s.begin() + 1;
- ci = s.begin() + 1;
- s.replace(i, i + 3, ci, ci + 2);
+ s = Data._123456();
+ i = s.begin() + 1;
+ ci = s.begin() + 1;
+ s.replace(i, i + 3, ci, ci + 2);
UNIT_ASSERT(s == Data._12356());
- s = Data._123456();
- i = s.begin() + 1;
- ci = s.begin() + 1;
- s.replace(i, i + 3, ci + 1, cs.end());
+ s = Data._123456();
+ i = s.begin() + 1;
+ ci = s.begin() + 1;
+ s.replace(i, i + 3, ci + 1, cs.end());
UNIT_ASSERT(s == Data._1345656());
- s = Data._123456();
- i = s.begin();
- ci = s.begin() + 1;
- s.replace(i, i, ci, ci + 1);
+ s = Data._123456();
+ i = s.begin();
+ ci = s.begin() + 1;
+ s.replace(i, i, ci, ci + 1);
UNIT_ASSERT(s == Data._2123456());
- s = Data._123456();
- s.replace(s.begin() + 4, s.end(), cs.begin(), cs.end());
+ s = Data._123456();
+ s.replace(s.begin() + 4, s.end(), cs.begin(), cs.end());
UNIT_ASSERT(s == Data._1234123456());
- // This is the test for the template replace method.
+ // This is the test for the template replace method.
- s = Data._123456();
+ s = Data._123456();
typename TStringType::iterator b = s.begin() + 4;
typename TStringType::iterator e = s.end();
typename TStringType::const_iterator rb = s.begin();
typename TStringType::const_iterator re = s.end();
- s.replace(b, e, rb, re);
+ s.replace(b, e, rb, re);
UNIT_ASSERT(s == Data._1234123456());
- s = Data._123456();
- s.replace(s.begin() + 4, s.end(), s.begin(), s.end());
+ s = Data._123456();
+ s.replace(s.begin() + 4, s.end(), s.begin(), s.end());
UNIT_ASSERT(s == Data._1234123456());
TStringType strorg(Data.This_is_test_StringT_for_StringT_calls());
TStringType str = strorg;
- str.replace(5, 15, str.c_str(), 10);
+ str.replace(5, 15, str.c_str(), 10);
UNIT_ASSERT(str == Data.This_This_is_tefor_StringT_calls());
- str = strorg;
- str.replace(5, 5, str.c_str(), 10);
+ str = strorg;
+ str.replace(5, 5, str.c_str(), 10);
UNIT_ASSERT(str == Data.This_This_is_test_StringT_for_StringT_calls());
#if !defined(STLPORT) || defined(_STLP_MEMBER_TEMPLATES)
deque<TChar> cdeque;
- cdeque.push_back(*Data.I());
- str.replace(str.begin(), str.begin() + 11, cdeque.begin(), cdeque.end());
+ cdeque.push_back(*Data.I());
+ str.replace(str.begin(), str.begin() + 11, cdeque.begin(), cdeque.end());
UNIT_ASSERT(str == Data.Is_test_StringT_for_StringT_calls());
#endif
- }
+ }
#endif
-}; // TStringStdTestImpl
-
+}; // TStringStdTestImpl
+
class TStringTest: public TTestBase, private TStringTestImpl<TString, TTestData<char>> {
-public:
- UNIT_TEST_SUITE(TStringTest);
+public:
+ UNIT_TEST_SUITE(TStringTest);
UNIT_TEST(TestMaxSize);
UNIT_TEST(TestConstructors);
UNIT_TEST(TestReplace);
@@ -752,7 +752,7 @@ public:
UNIT_TEST(TestFillingAssign)
UNIT_TEST(TestStdStreamApi)
//UNIT_TEST(TestOperatorsCI); must fail
- UNIT_TEST_SUITE_END();
+ UNIT_TEST_SUITE_END();
void TestAppendUtf16() {
TString appended = TString("А роза упала").AppendUtf16(u" на лапу Азора");
@@ -779,13 +779,13 @@ public:
ss >> read;
UNIT_ASSERT_VALUES_EQUAL(read, data);
}
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TStringTest);
-
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TStringTest);
+
class TWideStringTest: public TTestBase, private TStringTestImpl<TUtf16String, TTestData<wchar16>> {
-public:
- UNIT_TEST_SUITE(TWideStringTest);
+public:
+ UNIT_TEST_SUITE(TWideStringTest);
UNIT_TEST(TestConstructors);
UNIT_TEST(TestReplace);
#ifndef TSTRING_IS_STD_STRING
@@ -812,7 +812,7 @@ public:
UNIT_TEST(TestIterators);
UNIT_TEST(TestReverseIterators);
UNIT_TEST(TestStringLiterals);
- UNIT_TEST_SUITE_END();
+ UNIT_TEST_SUITE_END();
private:
void TestDecodingMethods() {
@@ -903,10 +903,10 @@ private:
TUtf16String s2 = u"привет";
UNIT_ASSERT_VALUES_EQUAL(s2, TUtf16String::FromUtf8("привет"));
}
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TWideStringTest);
-
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TWideStringTest);
+
class TUtf32StringTest: public TTestBase, private TStringTestImpl<TUtf32String, TTestData<wchar32>> {
public:
UNIT_TEST_SUITE(TUtf32StringTest);
@@ -1106,8 +1106,8 @@ private:
UNIT_TEST_SUITE_REGISTRATION(TUtf32StringTest);
class TStringStdTest: public TTestBase, private TStringStdTestImpl<TString, TTestData<char>> {
-public:
- UNIT_TEST_SUITE(TStringStdTest);
+public:
+ UNIT_TEST_SUITE(TStringStdTest);
UNIT_TEST(Constructor);
UNIT_TEST(reserve);
UNIT_TEST(short_string);
@@ -1131,19 +1131,19 @@ public:
UNIT_TEST(cbegin_cend);
UNIT_TEST(compare);
UNIT_TEST(find_last_of);
-#if 0
- UNIT_TEST(rfind);
- UNIT_TEST(replace);
-#endif
+#if 0
+ UNIT_TEST(rfind);
+ UNIT_TEST(replace);
+#endif
UNIT_TEST(find_last_not_of);
- UNIT_TEST_SUITE_END();
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TStringStdTest);
-
+ UNIT_TEST_SUITE_END();
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TStringStdTest);
+
class TWideStringStdTest: public TTestBase, private TStringStdTestImpl<TUtf16String, TTestData<wchar16>> {
-public:
- UNIT_TEST_SUITE(TWideStringStdTest);
+public:
+ UNIT_TEST_SUITE(TWideStringStdTest);
UNIT_TEST(Constructor);
UNIT_TEST(reserve);
UNIT_TEST(short_string);
@@ -1167,15 +1167,15 @@ public:
UNIT_TEST(cbegin_cend);
UNIT_TEST(compare);
UNIT_TEST(find_last_of);
-#if 0
- UNIT_TEST(rfind);
- UNIT_TEST(replace);
-#endif
+#if 0
+ UNIT_TEST(rfind);
+ UNIT_TEST(replace);
+#endif
UNIT_TEST(find_last_not_of);
- UNIT_TEST_SUITE_END();
-};
-
-UNIT_TEST_SUITE_REGISTRATION(TWideStringStdTest);
+ UNIT_TEST_SUITE_END();
+};
+
+UNIT_TEST_SUITE_REGISTRATION(TWideStringStdTest);
Y_UNIT_TEST_SUITE(TStringConversionTest) {
Y_UNIT_TEST(ConversionToStdStringTest) {
diff --git a/util/generic/string_ut.h b/util/generic/string_ut.h
index af517d8359..44bb10bdeb 100644
--- a/util/generic/string_ut.h
+++ b/util/generic/string_ut.h
@@ -514,9 +514,9 @@ protected:
using char_type = typename TStringType::char_type;
using traits_type = typename TStringType::traits_type;
- TTestData Data;
+ TTestData Data;
-public:
+public:
void TestMaxSize() {
const size_t badMaxVal = TStringType{}.max_size() + 1;
@@ -532,7 +532,7 @@ public:
TStringType s;
TStringType s1(*Data._0());
TStringType s2(Data._0());
- UNIT_ASSERT(s1 == s2);
+ UNIT_ASSERT(s1 == s2);
TStringType fromZero(0);
UNIT_ASSERT_VALUES_EQUAL(fromZero.size(), 0u);
@@ -547,21 +547,21 @@ public:
#endif
TStringType s4(Data._0123456(), 1, 3);
- UNIT_ASSERT(s4 == Data._123());
+ UNIT_ASSERT(s4 == Data._123());
TStringType s5(5, *Data._0());
- UNIT_ASSERT(s5 == Data._00000());
+ UNIT_ASSERT(s5 == Data._00000());
TStringType s6(Data._0123456());
- UNIT_ASSERT(s6 == Data._0123456());
+ UNIT_ASSERT(s6 == Data._0123456());
TStringType s7(s6);
- UNIT_ASSERT(s7 == s6);
+ UNIT_ASSERT(s7 == s6);
#ifndef TSTRING_IS_STD_STRING
- UNIT_ASSERT(s7.c_str() == s6.c_str());
+ UNIT_ASSERT(s7.c_str() == s6.c_str());
#endif
TStringType s8(s7, 1, 3);
- UNIT_ASSERT(s8 == Data._123());
+ UNIT_ASSERT(s8 == Data._123());
TStringType s9(*Data._1());
UNIT_ASSERT(s9 == Data._1());
@@ -569,86 +569,86 @@ public:
TStringType s10(Reserve(100));
UNIT_ASSERT(s10.empty());
UNIT_ASSERT(s10.capacity() >= 100);
- }
+ }
void TestReplace() {
TStringType s(Data._0123456());
- UNIT_ASSERT(s.copy() == Data._0123456());
+ UNIT_ASSERT(s.copy() == Data._0123456());
- // append family
- s.append(Data.x());
- UNIT_ASSERT(s == Data._0123456x());
+ // append family
+ s.append(Data.x());
+ UNIT_ASSERT(s == Data._0123456x());
#ifdef TSTRING_IS_STD_STRING
s.append(Data.xyz() + 1, 1);
#else
- s.append(Data.xyz(), 1, 1);
+ s.append(Data.xyz(), 1, 1);
#endif
- UNIT_ASSERT(s == Data._0123456xy());
+ UNIT_ASSERT(s == Data._0123456xy());
s.append(TStringType(Data.z()));
- UNIT_ASSERT(s == Data._0123456xyz());
+ UNIT_ASSERT(s == Data._0123456xyz());
s.append(TStringType(Data.XYZ()), 2, 1);
- UNIT_ASSERT(s == Data._0123456xyzZ());
+ UNIT_ASSERT(s == Data._0123456xyzZ());
- s.append(*Data._0());
- UNIT_ASSERT(s == Data._0123456xyzZ0());
+ s.append(*Data._0());
+ UNIT_ASSERT(s == Data._0123456xyzZ0());
- // prepend family
- s = Data._0123456xyz();
+ // prepend family
+ s = Data._0123456xyz();
s.prepend(TStringType(Data.abc()));
- UNIT_ASSERT(s == Data.abc0123456xyz());
+ UNIT_ASSERT(s == Data.abc0123456xyz());
s.prepend(TStringType(Data.ABC()), 1, 2);
- UNIT_ASSERT(s == Data.BCabc0123456xyz());
+ UNIT_ASSERT(s == Data.BCabc0123456xyz());
- s.prepend(Data.qwe());
- UNIT_ASSERT(s == Data.qweBCabc0123456xyz());
+ s.prepend(Data.qwe());
+ UNIT_ASSERT(s == Data.qweBCabc0123456xyz());
- s.prepend(*Data._1());
- UNIT_ASSERT(s == Data._1qweBCabc0123456xyz());
+ s.prepend(*Data._1());
+ UNIT_ASSERT(s == Data._1qweBCabc0123456xyz());
- // substr
- s = Data.abc0123456xyz();
- s = s.substr(3, 7);
- UNIT_ASSERT(s == Data._0123456());
+ // substr
+ s = Data.abc0123456xyz();
+ s = s.substr(3, 7);
+ UNIT_ASSERT(s == Data._0123456());
- // insert family
- s.insert(2, Data.abc());
- UNIT_ASSERT(s == Data._01abc23456());
+ // insert family
+ s.insert(2, Data.abc());
+ UNIT_ASSERT(s == Data._01abc23456());
s.insert(2, TStringType(Data.ABC()));
- UNIT_ASSERT(s == Data._01ABCabc23456());
+ UNIT_ASSERT(s == Data._01ABCabc23456());
s.insert(0, TStringType(Data.QWE()), 1, 1);
- UNIT_ASSERT(s == Data.W01ABCabc23456());
+ UNIT_ASSERT(s == Data.W01ABCabc23456());
- // replace family
- s = Data._01abc23456();
- s.replace(0, 7, Data.abcd());
- UNIT_ASSERT(s == Data.abcd456());
+ // replace family
+ s = Data._01abc23456();
+ s.replace(0, 7, Data.abcd());
+ UNIT_ASSERT(s == Data.abcd456());
s.replace(4, 3, TStringType(Data.ABCD()));
- UNIT_ASSERT(s == Data.abcdABCD());
+ UNIT_ASSERT(s == Data.abcdABCD());
s.replace(7, 10, TStringType(Data._01234()), 1, 3);
- UNIT_ASSERT(s == Data.abcdABC123());
- UNIT_ASSERT(Data.abcdABC123() == s);
-
- // remove, erase
- s.remove(4);
- UNIT_ASSERT(s == Data.abcd());
- s.erase(3);
- UNIT_ASSERT(s == Data.abc());
-
- // Read access
- s = Data._012345();
- UNIT_ASSERT(s.at(1) == *Data._1());
- UNIT_ASSERT(s[1] == *Data._1());
+ UNIT_ASSERT(s == Data.abcdABC123());
+ UNIT_ASSERT(Data.abcdABC123() == s);
+
+ // remove, erase
+ s.remove(4);
+ UNIT_ASSERT(s == Data.abcd());
+ s.erase(3);
+ UNIT_ASSERT(s == Data.abc());
+
+ // Read access
+ s = Data._012345();
+ UNIT_ASSERT(s.at(1) == *Data._1());
+ UNIT_ASSERT(s[1] == *Data._1());
UNIT_ASSERT(s.at(s.size()) == 0);
UNIT_ASSERT(s[s.size()] == 0);
- }
+ }
#ifndef TSTRING_IS_STD_STRING
void TestRefCount() {
@@ -658,47 +658,47 @@ public:
using TStr::TStr;
// un-protect
using TStr::RefCount;
- };
-
- TestStroka s1(Data.orig());
- UNIT_ASSERT_EQUAL(s1.RefCount() == 1, true);
- TestStroka s2(s1);
- UNIT_ASSERT_EQUAL(s1.RefCount() == 2, true);
- UNIT_ASSERT_EQUAL(s2.RefCount() == 2, true);
- UNIT_ASSERT_EQUAL(s1.c_str() == s2.c_str(), true); // the same pointer
- char_type* beg = s2.begin();
- UNIT_ASSERT_EQUAL(s1 == beg, true);
- UNIT_ASSERT_EQUAL(s1.RefCount() == 1, true);
- UNIT_ASSERT_EQUAL(s2.RefCount() == 1, true);
- UNIT_ASSERT_EQUAL(s1.c_str() == s2.c_str(), false);
- }
+ };
+
+ TestStroka s1(Data.orig());
+ UNIT_ASSERT_EQUAL(s1.RefCount() == 1, true);
+ TestStroka s2(s1);
+ UNIT_ASSERT_EQUAL(s1.RefCount() == 2, true);
+ UNIT_ASSERT_EQUAL(s2.RefCount() == 2, true);
+ UNIT_ASSERT_EQUAL(s1.c_str() == s2.c_str(), true); // the same pointer
+ char_type* beg = s2.begin();
+ UNIT_ASSERT_EQUAL(s1 == beg, true);
+ UNIT_ASSERT_EQUAL(s1.RefCount() == 1, true);
+ UNIT_ASSERT_EQUAL(s2.RefCount() == 1, true);
+ UNIT_ASSERT_EQUAL(s1.c_str() == s2.c_str(), false);
+ }
#endif
- // Find family
+ // Find family
void TestFind() {
const TStringType s(Data._0123456_12345());
const TStringType s2(Data._0123());
- UNIT_ASSERT(s.find(Data._345()) == 3);
- UNIT_ASSERT(s.find(Data._345(), 5) == 10);
+ UNIT_ASSERT(s.find(Data._345()) == 3);
+ UNIT_ASSERT(s.find(Data._345(), 5) == 10);
UNIT_ASSERT(s.find(Data._345(), 20) == TStringType::npos);
- UNIT_ASSERT(s.find(*Data._3()) == 3);
+ UNIT_ASSERT(s.find(*Data._3()) == 3);
UNIT_ASSERT(s.find(TStringType(Data._345())) == 3);
UNIT_ASSERT(s.find(TStringType(Data._345()), 2) == 3);
UNIT_ASSERT(s.find_first_of(TStringType(Data._389())) == 3);
- UNIT_ASSERT(s.find_first_of(Data._389()) == 3);
+ UNIT_ASSERT(s.find_first_of(Data._389()) == 3);
UNIT_ASSERT(s.find_first_of(Data._389(), s.size()) == TStringType::npos);
- UNIT_ASSERT(s.find_first_not_of(Data._123()) == 0);
+ UNIT_ASSERT(s.find_first_not_of(Data._123()) == 0);
UNIT_ASSERT(s.find_first_of('6') == 6);
UNIT_ASSERT(s.find_first_of('1', 2) == 8);
UNIT_ASSERT(s.find_first_not_of('0') == 1);
UNIT_ASSERT(s.find_first_not_of('1', 1) == 2);
const TStringType rs = Data._0123401234();
- UNIT_ASSERT(rs.rfind(*Data._3()) == 8);
+ UNIT_ASSERT(rs.rfind(*Data._3()) == 8);
const TStringType empty;
UNIT_ASSERT(empty.find(empty) == 0);
@@ -739,58 +739,58 @@ public:
UNIT_ASSERT(s.Contains(empty, s.length()));
}
- // Operators
+ // Operators
void TestOperators() {
TStringType s(Data._0123456());
- // operator +=
+ // operator +=
s += TStringType(Data.x());
- UNIT_ASSERT(s == Data._0123456x());
+ UNIT_ASSERT(s == Data._0123456x());
- s += Data.y();
- UNIT_ASSERT(s == Data._0123456xy());
+ s += Data.y();
+ UNIT_ASSERT(s == Data._0123456xy());
- s += *Data.z();
- UNIT_ASSERT(s == Data._0123456xyz());
+ s += *Data.z();
+ UNIT_ASSERT(s == Data._0123456xyz());
- // operator +
- s = Data._0123456();
+ // operator +
+ s = Data._0123456();
s = s + TStringType(Data.x());
- UNIT_ASSERT(s == Data._0123456x());
+ UNIT_ASSERT(s == Data._0123456x());
- s = s + Data.y();
- UNIT_ASSERT(s == Data._0123456xy());
+ s = s + Data.y();
+ UNIT_ASSERT(s == Data._0123456xy());
- s = s + *Data.z();
- UNIT_ASSERT(s == Data._0123456xyz());
+ s = s + *Data.z();
+ UNIT_ASSERT(s == Data._0123456xyz());
- // operator !=
- s = Data._012345();
+ // operator !=
+ s = Data._012345();
UNIT_ASSERT(s != TStringType(Data.xyz()));
- UNIT_ASSERT(s != Data.xyz());
- UNIT_ASSERT(Data.xyz() != s);
+ UNIT_ASSERT(s != Data.xyz());
+ UNIT_ASSERT(Data.xyz() != s);
- // operator <
+ // operator <
UNIT_ASSERT_EQUAL(s < TStringType(Data.xyz()), true);
- UNIT_ASSERT_EQUAL(s < Data.xyz(), true);
- UNIT_ASSERT_EQUAL(Data.xyz() < s, false);
+ UNIT_ASSERT_EQUAL(s < Data.xyz(), true);
+ UNIT_ASSERT_EQUAL(Data.xyz() < s, false);
- // operator <=
+ // operator <=
UNIT_ASSERT_EQUAL(s <= TStringType(Data.xyz()), true);
- UNIT_ASSERT_EQUAL(s <= Data.xyz(), true);
- UNIT_ASSERT_EQUAL(Data.xyz() <= s, false);
+ UNIT_ASSERT_EQUAL(s <= Data.xyz(), true);
+ UNIT_ASSERT_EQUAL(Data.xyz() <= s, false);
- // operator >
+ // operator >
UNIT_ASSERT_EQUAL(s > TStringType(Data.xyz()), false);
- UNIT_ASSERT_EQUAL(s > Data.xyz(), false);
- UNIT_ASSERT_EQUAL(Data.xyz() > s, true);
+ UNIT_ASSERT_EQUAL(s > Data.xyz(), false);
+ UNIT_ASSERT_EQUAL(Data.xyz() > s, true);
- // operator >=
+ // operator >=
UNIT_ASSERT_EQUAL(s >= TStringType(Data.xyz()), false);
- UNIT_ASSERT_EQUAL(s >= Data.xyz(), false);
- UNIT_ASSERT_EQUAL(Data.xyz() >= s, true);
- }
+ UNIT_ASSERT_EQUAL(s >= Data.xyz(), false);
+ UNIT_ASSERT_EQUAL(Data.xyz() >= s, true);
+ }
void TestOperatorsCI() {
TStringType s(Data.ABCD());
@@ -805,132 +805,132 @@ public:
}
void TestMulOperators() {
- {
+ {
TStringType s(Data._0());
- s *= 10;
+ s *= 10;
UNIT_ASSERT_EQUAL(s, TStringType(Data._0000000000()));
- }
- {
+ }
+ {
TStringType s = TStringType(Data._0()) * 2;
UNIT_ASSERT_EQUAL(s, TStringType(Data._00()));
- }
- }
+ }
+ }
- // Test any other functions
+ // Test any other functions
void TestFuncs() {
TStringType s(Data._0123456());
UNIT_ASSERT(s.c_str() == s.data());
- // length()
+ // length()
UNIT_ASSERT(s.length() == s.size());
UNIT_ASSERT(s.length() == traits_type::length(s.data()));
- // is_null()
+ // is_null()
TStringType s1(Data.Empty());
- UNIT_ASSERT(s1.is_null() == true);
- UNIT_ASSERT(s1.is_null() == s1.empty());
- UNIT_ASSERT(s1.is_null() == !s1);
+ UNIT_ASSERT(s1.is_null() == true);
+ UNIT_ASSERT(s1.is_null() == s1.empty());
+ UNIT_ASSERT(s1.is_null() == !s1);
TStringType s2(s);
- UNIT_ASSERT(s2 == s);
+ UNIT_ASSERT(s2 == s);
- // reverse()
+ // reverse()
ReverseInPlace(s2);
- UNIT_ASSERT(s2 == Data._6543210());
+ UNIT_ASSERT(s2 == Data._6543210());
- // to_upper()
- s2 = Data.asdf1234qwer();
- s2.to_upper();
- UNIT_ASSERT(s2 == Data.ASDF1234QWER());
+ // to_upper()
+ s2 = Data.asdf1234qwer();
+ s2.to_upper();
+ UNIT_ASSERT(s2 == Data.ASDF1234QWER());
- // to_lower()
- s2.to_lower();
- UNIT_ASSERT(s2 == Data.asdf1234qwer());
+ // to_lower()
+ s2.to_lower();
+ UNIT_ASSERT(s2 == Data.asdf1234qwer());
- // to_title()
- s2 = Data.asDF1234qWEr();
- s2.to_title();
- UNIT_ASSERT(s2 == Data.Asdf1234qwer());
+ // to_title()
+ s2 = Data.asDF1234qWEr();
+ s2.to_title();
+ UNIT_ASSERT(s2 == Data.Asdf1234qwer());
- s2 = Data.AsDF1234qWEr();
- s2.to_title();
- UNIT_ASSERT(s2 == Data.Asdf1234qwer());
+ s2 = Data.AsDF1234qWEr();
+ s2.to_title();
+ UNIT_ASSERT(s2 == Data.Asdf1234qwer());
- // Friend functions
- s2 = Data.asdf1234qwer();
+ // Friend functions
+ s2 = Data.asdf1234qwer();
TStringType s3 = to_upper(s2);
- UNIT_ASSERT(s3 == Data.ASDF1234QWER());
- s3 = to_lower(s2);
- UNIT_ASSERT(s3 == Data.asdf1234qwer());
- s3 = to_title(s2);
- UNIT_ASSERT(s3 == Data.Asdf1234qwer());
- s2 = s3;
-
- // resize family
+ UNIT_ASSERT(s3 == Data.ASDF1234QWER());
+ s3 = to_lower(s2);
+ UNIT_ASSERT(s3 == Data.asdf1234qwer());
+ s3 = to_title(s2);
+ UNIT_ASSERT(s3 == Data.Asdf1234qwer());
+ s2 = s3;
+
+ // resize family
s2.resize(s2.size()); // without length change
- UNIT_ASSERT(s2 == Data.Asdf1234qwer());
+ UNIT_ASSERT(s2 == Data.Asdf1234qwer());
s2.resize(s2.size() + 4, *Data.W());
- UNIT_ASSERT(s2 == Data.Asdf1234qwerWWWW());
+ UNIT_ASSERT(s2 == Data.Asdf1234qwerWWWW());
- s2.resize(4);
- UNIT_ASSERT(s2 == Data.Asdf());
+ s2.resize(4);
+ UNIT_ASSERT(s2 == Data.Asdf());
- // assign family
- s2 = Data.asdf1234qwer();
- s2.assign(s, 1, 3);
- UNIT_ASSERT(s2 == Data._123());
+ // assign family
+ s2 = Data.asdf1234qwer();
+ s2.assign(s, 1, 3);
+ UNIT_ASSERT(s2 == Data._123());
- s2.assign(Data._0123456(), 4);
- UNIT_ASSERT(s2 == Data._0123());
+ s2.assign(Data._0123456(), 4);
+ UNIT_ASSERT(s2 == Data._0123());
s2.assign('1');
UNIT_ASSERT(s2 == Data._1());
- s2.assign(Data._0123456());
- UNIT_ASSERT(s2 == Data._0123456());
+ s2.assign(Data._0123456());
+ UNIT_ASSERT(s2 == Data._0123456());
- // hash()
+ // hash()
TStringType sS = s2; // type 'TStringType' is used as is
ComputeHash(sS); /*size_t hash_val = sS.hash();
try {
//UNIT_ASSERT(hash_val == Data.HashOf_0123456());
- } catch (...) {
- Cerr << hash_val << Endl;
- throw;
+ } catch (...) {
+ Cerr << hash_val << Endl;
+ throw;
}*/
- s2.assign(Data._0123456(), 2, 2);
- UNIT_ASSERT(s2 == Data._23());
+ s2.assign(Data._0123456(), 2, 2);
+ UNIT_ASSERT(s2 == Data._23());
- //s2.reserve();
+ //s2.reserve();
TStringType s5(Data.abcde());
s5.clear();
- UNIT_ASSERT(s5 == Data.Empty());
- }
+ UNIT_ASSERT(s5 == Data.Empty());
+ }
void TestUtils() {
TStringType s;
- s = Data._01230123();
+ s = Data._01230123();
TStringType from = Data._0();
TStringType to = Data.z();
SubstGlobal(s, from, to);
- UNIT_ASSERT(s == Data.z123z123());
- }
+ UNIT_ASSERT(s == Data.z123z123());
+ }
void TestEmpty() {
TStringType s;
- s = Data._2();
+ s = Data._2();
s = TStringType(Data.fdfdsfds(), (size_t)0, (size_t)0);
- UNIT_ASSERT(s.empty());
- }
+ UNIT_ASSERT(s.empty());
+ }
- void TestJoin() {
+ void TestJoin() {
UNIT_ASSERT_EQUAL(TStringType::Join(Data._12(), Data._3456()), Data._123456());
UNIT_ASSERT_EQUAL(TStringType::Join(Data._12(), TStringType(Data._3456())), Data._123456());
UNIT_ASSERT_EQUAL(TStringType::Join(TStringType(Data._12()), Data._3456()), Data._123456());
@@ -941,43 +941,43 @@ public:
UNIT_ASSERT_EQUAL(TStringType::Join(TStringType(Data.a()), static_cast<typename TStringType::char_type>('b'), TStringType(Data.cd()), TStringType(Data.e()), Data.fg(), TStringType(Data.h())), Data.abcdefgh());
}
- void TestCopy() {
+ void TestCopy() {
TStringType s(Data.abcd());
TStringType c = s.copy();
- UNIT_ASSERT_EQUAL(s, c);
- UNIT_ASSERT(s.end() != c.end());
- }
+ UNIT_ASSERT_EQUAL(s, c);
+ UNIT_ASSERT(s.end() != c.end());
+ }
- void TestStrCpy() {
- {
+ void TestStrCpy() {
+ {
TStringType s(Data.abcd());
- char_type data[5];
+ char_type data[5];
- data[4] = 1;
+ data[4] = 1;
- s.strcpy(data, 4);
+ s.strcpy(data, 4);
- UNIT_ASSERT_EQUAL(data[0], *Data.a());
- UNIT_ASSERT_EQUAL(data[1], *Data.b());
- UNIT_ASSERT_EQUAL(data[2], *Data.c());
- UNIT_ASSERT_EQUAL(data[3], 0);
- UNIT_ASSERT_EQUAL(data[4], 1);
- }
+ UNIT_ASSERT_EQUAL(data[0], *Data.a());
+ UNIT_ASSERT_EQUAL(data[1], *Data.b());
+ UNIT_ASSERT_EQUAL(data[2], *Data.c());
+ UNIT_ASSERT_EQUAL(data[3], 0);
+ UNIT_ASSERT_EQUAL(data[4], 1);
+ }
- {
+ {
TStringType s(Data.abcd());
- char_type data[5];
-
- s.strcpy(data, 5);
-
- UNIT_ASSERT_EQUAL(data[0], *Data.a());
- UNIT_ASSERT_EQUAL(data[1], *Data.b());
- UNIT_ASSERT_EQUAL(data[2], *Data.c());
- UNIT_ASSERT_EQUAL(data[3], *Data.d());
- UNIT_ASSERT_EQUAL(data[4], 0);
- }
- }
+ char_type data[5];
+
+ s.strcpy(data, 5);
+
+ UNIT_ASSERT_EQUAL(data[0], *Data.a());
+ UNIT_ASSERT_EQUAL(data[1], *Data.b());
+ UNIT_ASSERT_EQUAL(data[2], *Data.c());
+ UNIT_ASSERT_EQUAL(data[3], *Data.d());
+ UNIT_ASSERT_EQUAL(data[4], 0);
+ }
+ }
void TestPrefixSuffix() {
const TStringType emptyStr;
@@ -1153,4 +1153,4 @@ public:
*ritBegin = (ui8)'e';
UNIT_ASSERT_VALUES_EQUAL(*ritBegin, (ui8)'e');
}
-};
+};
diff --git a/util/generic/yexception_ut.c b/util/generic/yexception_ut.c
index a46ae5b783..3880c82e29 100644
--- a/util/generic/yexception_ut.c
+++ b/util/generic/yexception_ut.c
@@ -1,5 +1,5 @@
-#include "yexception_ut.h"
-
-void TestCallback(TCallbackFun f, int i) {
- f(i);
-}
+#include "yexception_ut.h"
+
+void TestCallback(TCallbackFun f, int i) {
+ f(i);
+}
diff --git a/util/generic/yexception_ut.cpp b/util/generic/yexception_ut.cpp
index 6feb5c65c0..cb3e29fed8 100644
--- a/util/generic/yexception_ut.cpp
+++ b/util/generic/yexception_ut.cpp
@@ -16,17 +16,17 @@ static inline void Throw2DontMove() {
#include <util/stream/output.h>
#include <util/string/subst.h>
-#include "yexception_ut.h"
+#include "yexception_ut.h"
#include "bt_exception.h"
-
+
#if defined(_MSC_VER)
#pragma warning(disable : 4702) /*unreachable code*/
#endif
-static void CallbackFun(int i) {
- throw i;
-}
-
+static void CallbackFun(int i) {
+ throw i;
+}
+
static IOutputStream* OUTS = nullptr;
namespace NOuter::NInner {
@@ -247,7 +247,7 @@ private:
throw;
}
}
-
+
//! tests propagation of an exception through C code
//! @note on some platforms, for example GCC on 32-bit Linux without -fexceptions option,
//! throwing an exception from a C++ callback through C code aborts program
@@ -258,7 +258,7 @@ private:
UNIT_ASSERT(false);
} catch (int i) {
UNIT_ASSERT_VALUES_EQUAL(i, N);
- }
+ }
}
void TestMacroOverload() {
diff --git a/util/generic/yexception_ut.h b/util/generic/yexception_ut.h
index 6b5ce34f34..acf6f27e99 100644
--- a/util/generic/yexception_ut.h
+++ b/util/generic/yexception_ut.h
@@ -1,14 +1,14 @@
#pragma once
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef void (*TCallbackFun)(int);
-
+
//! just calls callback with parameter @c i
void TestCallback(TCallbackFun f, int i);
-
-#ifdef __cplusplus
-}
-#endif
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/util/memory/pool.h b/util/memory/pool.h
index d24b9fdd85..13c8b6b9ed 100644
--- a/util/memory/pool.h
+++ b/util/memory/pool.h
@@ -360,12 +360,12 @@ public:
using size_type = size_t;
using difference_type = ptrdiff_t;
using value_type = T;
-
+
inline TPoolAllocBase(TPool* pool)
: Pool_(pool)
{
}
-
+
template <typename TOther>
inline TPoolAllocBase(const TPoolAllocBase<TOther, TPool>& o)
: Pool_(o.GetPool())
@@ -375,29 +375,29 @@ public:
inline T* allocate(size_t n) {
return (T*)Pool_->Allocate(n * sizeof(T), alignof(T));
}
-
+
inline void deallocate(pointer /*p*/, size_t /*n*/) {
}
-
+
template <class T1>
struct rebind {
using other = TPoolAllocBase<T1, TPool>;
};
-
+
inline size_type max_size() const noexcept {
return size_type(-1) / sizeof(T);
}
-
+
template <typename... Args>
inline void construct(pointer p, Args&&... args) {
new (p) T(std::forward<Args>(args)...);
}
-
+
inline void destroy(pointer p) noexcept {
(void)p; /* Make MSVC happy. */
p->~T();
}
-
+
inline TPool* GetPool() const {
return Pool_;
}
@@ -412,20 +412,20 @@ public:
private:
TPool* Pool_;
-};
-
+};
+
template <class T>
using TPoolAlloc = TPoolAllocBase<T, TMemoryPool>;
// Any type since it is supposed to be rebound anyway.
using TPoolAllocator = TPoolAlloc<int>;
-
-template <class T>
+
+template <class T>
inline bool operator==(const TPoolAlloc<T>&, const TPoolAlloc<T>&) noexcept {
- return true;
-}
-
-template <class T>
+ return true;
+}
+
+template <class T>
inline bool operator!=(const TPoolAlloc<T>&, const TPoolAlloc<T>&) noexcept {
- return false;
-}
+ return false;
+}
diff --git a/util/memory/segpool_alloc.h b/util/memory/segpool_alloc.h
index 016217b6b5..1a83b7a543 100644
--- a/util/memory/segpool_alloc.h
+++ b/util/memory/segpool_alloc.h
@@ -31,7 +31,7 @@
template <class _Tp>
struct segpool_alloc {
using pool_type = segmented_pool<char>;
- pool_type* pool;
+ pool_type* pool;
using pointer = _Tp*;
using const_pointer = const _Tp*;
using reference = _Tp&;
@@ -47,11 +47,11 @@ struct segpool_alloc {
{
Y_IF_DEBUG(pool_count = malloc_count = pool_free_count = malloc_free_count = 0);
}
- segpool_alloc(pool_type* p)
+ segpool_alloc(pool_type* p)
: pool(p)
{
Y_IF_DEBUG(pool_count = malloc_count = pool_free_count = malloc_free_count = 0);
- }
+ }
segpool_alloc(const segpool_alloc& a)
: pool(a.pool)
{
diff --git a/util/str_stl.h b/util/str_stl.h
index 43ee50162a..f1e137181d 100644
--- a/util/str_stl.h
+++ b/util/str_stl.h
@@ -82,8 +82,8 @@ struct THash<TStringBuf>: ::NHashPrivate::TStringHash<char> {
template <>
struct hash<TString>: ::NHashPrivate::TStringHash<char> {
-};
-
+};
+
template <>
struct hash<TUtf16String>: ::NHashPrivate::TStringHash<wchar16> {
};
diff --git a/util/stream/input.cpp b/util/stream/input.cpp
index 9361be259e..6e8170f2f9 100644
--- a/util/stream/input.cpp
+++ b/util/stream/input.cpp
@@ -97,8 +97,8 @@ size_t IInputStream::ReadLine(TUtf16String& w) {
}
return result;
-}
-
+}
+
TString IInputStream::ReadLine() {
TString ret;
diff --git a/util/stream/ios_ut.cpp b/util/stream/ios_ut.cpp
index 10f337b3cf..139f4296e5 100644
--- a/util/stream/ios_ut.cpp
+++ b/util/stream/ios_ut.cpp
@@ -7,7 +7,7 @@
#include <library/cpp/testing/unittest/registar.h>
#include <util/string/cast.h>
-#include <util/memory/tempbuf.h>
+#include <util/memory/tempbuf.h>
#include <util/charset/wide.h>
#include <string>
@@ -278,7 +278,7 @@ void TStreamsTest::TestBufferStream() {
UNIT_ASSERT_EQUAL(0, bytesRead);
}
-namespace {
+namespace {
class TStringListInput: public IWalkInput {
public:
TStringListInput(const TVector<TString>& data)
@@ -305,27 +305,27 @@ namespace {
};
const char Text[] =
- // UTF8 encoded "one \ntwo\r\nthree\n\tfour\nfive\n" in russian and ...
+ // UTF8 encoded "one \ntwo\r\nthree\n\tfour\nfive\n" in russian and ...
"один \n"
"два\r\n"
"три\n"
"\tчетыре\n"
"пять\n"
- // ... additional test cases
+ // ... additional test cases
"\r\n"
"\n\r" // this char goes to the front of the next string
"one two\n"
"123\r\n"
"\t\r ";
-
+
const char* Expected[] = {
- // UTF8 encoded "one ", "two", "three", "\tfour", "five" in russian and ...
+ // UTF8 encoded "one ", "two", "three", "\tfour", "five" in russian and ...
"один ",
"два",
"три",
"\tчетыре",
"пять",
- // ... additional test cases
+ // ... additional test cases
"",
"",
"\rone two",
@@ -394,8 +394,8 @@ namespace {
TStringListInput sli(lst);
test(sli, "IWalkInput");
}
-}
-
+}
+
void TStreamsTest::TestReadTo() {
TestStreamReadTo("111a222b333c444d555e666f", TestStreamReadTo1);
TestStreamReadTo(Text, TestStreamReadTo2);
@@ -415,41 +415,41 @@ void TStreamsTest::TestStrokaInput() {
TestStreamReadTo(s, ::TestStrokaInput);
}
-void TStreamsTest::TestWtrokaInput() {
+void TStreamsTest::TestWtrokaInput() {
const TString s(Text);
- TStringInput is(s);
+ TStringInput is(s);
TUtf16String w;
size_t i = 0;
-
- while (is.ReadLine(w)) {
+
+ while (is.ReadLine(w)) {
UNIT_ASSERT(i < Y_ARRAY_SIZE(Expected));
UNIT_ASSERT_VALUES_EQUAL(w, UTF8ToWide(Expected[i]));
-
- ++i;
- }
-}
-
-void TStreamsTest::TestWtrokaOutput() {
+
+ ++i;
+ }
+}
+
+void TStreamsTest::TestWtrokaOutput() {
TString s;
- TStringOutput os(s);
- const size_t n = sizeof(Expected) / sizeof(Expected[0]);
-
- for (size_t i = 0; i < n; ++i) {
+ TStringOutput os(s);
+ const size_t n = sizeof(Expected) / sizeof(Expected[0]);
+
+ for (size_t i = 0; i < n; ++i) {
TUtf16String w = UTF8ToWide(Expected[i]);
-
- os << w;
+
+ os << w;
if (i == 1 || i == 5 || i == 8) {
- os << '\r';
+ os << '\r';
}
if (i < n - 1) {
- os << '\n';
+ os << '\n';
}
- }
-
- UNIT_ASSERT(s == Text);
-}
+ }
+
+ UNIT_ASSERT(s == Text);
+}
void TStreamsTest::TestWchar16Output() {
TString s;
diff --git a/util/stream/output.cpp b/util/stream/output.cpp
index 195e4cfdb2..db81b81b70 100644
--- a/util/stream/output.cpp
+++ b/util/stream/output.cpp
@@ -136,8 +136,8 @@ void Out<const wchar16*>(IOutputStream& o, const wchar16* w) {
} else {
o.Write("(null)");
}
-}
-
+}
+
template <>
void Out<const wchar32*>(IOutputStream& o, const wchar32* w) {
if (w) {
diff --git a/util/stream/output.h b/util/stream/output.h
index 8190c09707..00eef50b95 100644
--- a/util/stream/output.h
+++ b/util/stream/output.h
@@ -240,15 +240,15 @@ static inline std::enable_if_t<!std::is_scalar<T>::value, IOutputStream&> operat
}
static inline IOutputStream& operator<<(IOutputStream& o, const wchar16* t) {
- Out<const wchar16*>(o, t);
- return o;
-}
-
+ Out<const wchar16*>(o, t);
+ return o;
+}
+
static inline IOutputStream& operator<<(IOutputStream& o, wchar16* t) {
- Out<const wchar16*>(o, t);
- return o;
-}
-
+ Out<const wchar16*>(o, t);
+ return o;
+}
+
static inline IOutputStream& operator<<(IOutputStream& o, const wchar32* t) {
Out<const wchar32*>(o, t);
return o;
diff --git a/util/stream/zlib.cpp b/util/stream/zlib.cpp
index 4dbef9839e..60f4e9439f 100644
--- a/util/stream/zlib.cpp
+++ b/util/stream/zlib.cpp
@@ -204,7 +204,7 @@ public:
inline TImpl(const TParams& p)
: Stream_(p.Out)
{
- if (deflateInit2(Z(), Min<size_t>(9, p.CompressionLevel), Z_DEFLATED, opts[Type(p.Type)], 8, Z_DEFAULT_STRATEGY)) {
+ if (deflateInit2(Z(), Min<size_t>(9, p.CompressionLevel), Z_DEFLATED, opts[Type(p.Type)], 8, Z_DEFAULT_STRATEGY)) {
ythrow TZLibCompressorError() << "can not init inflate engine";
}
diff --git a/util/string/cast.cpp b/util/string/cast.cpp
index 077c6765b3..aa1e65a8e9 100644
--- a/util/string/cast.cpp
+++ b/util/string/cast.cpp
@@ -521,7 +521,7 @@ TString FromStringImpl<TString>(const char* data, size_t len) {
return TString(data, len);
}
-template <>
+template <>
TStringBuf FromStringImpl<TStringBuf>(const char* data, size_t len) {
return TStringBuf(data, len);
}
@@ -534,8 +534,8 @@ std::string FromStringImpl<std::string>(const char* data, size_t len) {
template <>
TUtf16String FromStringImpl<TUtf16String>(const wchar16* data, size_t len) {
return TUtf16String(data, len);
-}
-
+}
+
template <>
TWtringBuf FromStringImpl<TWtringBuf>(const wchar16* data, size_t len) {
return TWtringBuf(data, len);
diff --git a/util/string/cast.h b/util/string/cast.h
index 9bf6ddc7f6..90e925c194 100644
--- a/util/string/cast.h
+++ b/util/string/cast.h
@@ -137,16 +137,16 @@ struct TFromStringException: public TBadCastException {
* double
* long double
*/
-template <typename T, typename TChar>
-T FromStringImpl(const TChar* data, size_t len);
+template <typename T, typename TChar>
+T FromStringImpl(const TChar* data, size_t len);
-template <typename T, typename TChar>
-inline T FromString(const TChar* data, size_t len) {
+template <typename T, typename TChar>
+inline T FromString(const TChar* data, size_t len) {
return ::FromStringImpl<T>(data, len);
}
-template <typename T, typename TChar>
-inline T FromString(const TChar* data) {
+template <typename T, typename TChar>
+inline T FromString(const TChar* data) {
return ::FromString<T>(data, std::char_traits<TChar>::length(data));
}
@@ -170,7 +170,7 @@ inline TString FromString<TString>(const TString& s) {
return s;
}
-template <class T>
+template <class T>
inline T FromString(const TWtringBuf& s) {
return ::FromString<T, typename TWtringBuf::char_type>(s.data(), s.size());
}
@@ -178,8 +178,8 @@ inline T FromString(const TWtringBuf& s) {
template <class T>
inline T FromString(const TUtf16String& s) {
return ::FromString<T, wchar16>(s.data(), s.size());
-}
-
+}
+
namespace NPrivate {
template <typename TChar>
class TFromString {