diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /util/string/builder_ut.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'util/string/builder_ut.cpp')
-rw-r--r-- | util/string/builder_ut.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/util/string/builder_ut.cpp b/util/string/builder_ut.cpp new file mode 100644 index 00000000000..22def683ec2 --- /dev/null +++ b/util/string/builder_ut.cpp @@ -0,0 +1,63 @@ +#include "builder.h" + +#include <library/cpp/testing/unittest/registar.h> + +static void TestEquals(const TString& expected, const TString& actual) { + UNIT_ASSERT_VALUES_EQUAL(expected, actual); +} + +struct TClassWithStreamOperator { + ui32 Id; + TString Name; + + TClassWithStreamOperator(ui32 id, const TString& name) + : Id(id) + , Name(name) + { + } +}; + +IOutputStream& operator<<(IOutputStream& out, const TClassWithStreamOperator& value) { + return out << value.Id << " " << value.Name; +} + +Y_UNIT_TEST_SUITE(TStringBuilderTest) { + Y_UNIT_TEST(TestStringBuilder) { + TestEquals("", TStringBuilder()); + TestEquals("a", TStringBuilder() << "a"); + TestEquals("a1", TStringBuilder() << "a" << 1); + TestEquals("value: 123 name", TStringBuilder() << "value: " << TClassWithStreamOperator(123, "name")); + } + + Y_UNIT_TEST(TestStringBuilderOut) { + TString s; + TStringOutput out(s); + TStringBuilder sb; + sb << "a"; + out << sb; + TestEquals("a", s); + } + + Y_UNIT_TEST(TestStringBuilderRValue) { + struct TRValueAcceptTester { + static bool IsRValue(const TString&) { + return false; + } + + static bool IsRValue(TString&&) { + return true; + } + }; + + UNIT_ASSERT(TRValueAcceptTester::IsRValue(TStringBuilder() << "a" << 1)); + + TStringBuilder b; + UNIT_ASSERT(!TRValueAcceptTester::IsRValue(b << "a" << 1)); + TStringBuilder b2; + UNIT_ASSERT(!TRValueAcceptTester::IsRValue(b2 << "a" << 1 << TStringBuilder() << "a")); + UNIT_ASSERT_VALUES_EQUAL("a1a", b2); + + UNIT_ASSERT(TRValueAcceptTester::IsRValue(TStringBuilder() << b2)); + UNIT_ASSERT_VALUES_EQUAL("a1a", TStringBuilder() << b2); + } +} |