11#include < userver/utils/string_literal.hpp>
22
3+ #ifdef __cpp_concepts
4+ #include < concepts>
5+ #endif
6+
37#include < type_traits>
48
59#include < gtest/gtest.h>
@@ -18,6 +22,16 @@ static_assert(!std::is_assignable_v<utils::StringLiteral, utils::zstring_view>);
1822static_assert (std::is_assignable_v<std::string_view, utils::StringLiteral>);
1923static_assert (std::is_assignable_v<utils::zstring_view, utils::StringLiteral>);
2024
25+ #ifdef __cpp_concepts
26+ template <typename T>
27+ concept SuffixRemovable = requires (T t) { t.remove_suffix (10 ); };
28+
29+ static_assert (std::swappable<utils::StringLiteral>);
30+ static_assert (!std::swappable_with<utils::StringLiteral, utils::zstring_view>);
31+ static_assert (!std::swappable_with<utils::StringLiteral, std::string_view>);
32+ static_assert (!SuffixRemovable<utils::StringLiteral>);
33+ #endif
34+
2135static constexpr utils::StringLiteral kLongString = " some long long long long long long long long long string" ;
2236
2337TEST (StringLiteral, UnsafeMake) {
@@ -44,4 +58,16 @@ TEST(StringLiteral, UnsafeMake) {
4458 static_assert (kLongString == utils::StringLiteral::UnsafeMake (kLongString .c_str (), kLongString .size ()));
4559}
4660
61+ TEST (StringLiteral, Swap) {
62+ constexpr utils::StringLiteral kShortString = " short" ;
63+ constexpr utils::StringLiteral kLongString = " some long long long long long long long long long string" ;
64+
65+ auto v1 = kShortString ;
66+ auto v2 = kLongString ;
67+ v1.swap (v2);
68+
69+ EXPECT_EQ (v1, kLongString );
70+ EXPECT_EQ (v2, kShortString );
71+ }
72+
4773USERVER_NAMESPACE_END
0 commit comments