aboutsummaryrefslogtreecommitdiffstats
path: root/util/generic
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
commitf70d9720e13aef3a935e3f405b0eac554529e76e (patch)
tree5519c392aebdb16153197de07e4774c0a2be261a /util/generic
parent7b659037613268d5eac4a1b6a7c5eff3cd36d4bf (diff)
downloadydb-f70d9720e13aef3a935e3f405b0eac554529e76e.tar.gz
Restoring authorship annotation for <smalov@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'util/generic')
-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
8 files changed, 674 insertions, 674 deletions
diff --git a/util/generic/strbase.h b/util/generic/strbase.h
index ab39fc7537..0af08e21a3 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 3c655f1f66..07e7053cfc 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 8cd8aa6917..04c9c08132 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 ac82e9091d..8fc87cc0a1 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 44bb10bdeb..af517d8359 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 3880c82e29..a46ae5b783 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 cb3e29fed8..6feb5c65c0 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 acf6f27e99..6b5ce34f34 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