forked from boostorg/static_string
Fix operator+, add tests
This commit is contained in:
@ -4456,33 +4456,41 @@ operator+(
|
|||||||
CharT lhs,
|
CharT lhs,
|
||||||
const basic_static_string<N, CharT, Traits>& rhs)
|
const basic_static_string<N, CharT, Traits>& rhs)
|
||||||
{
|
{
|
||||||
return basic_static_string<N + 1, CharT, Traits>(rhs).insert(0, lhs);
|
// The cast to std::size_t is needed here since 0 is a null pointer constant
|
||||||
|
return basic_static_string<N + 1, CharT, Traits>(rhs).insert(
|
||||||
|
std::size_t(0), 1, lhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add a null-terminated character array to a string.
|
||||||
template<
|
template<
|
||||||
std::size_t N, std::size_t M,
|
std::size_t N, std::size_t M,
|
||||||
typename CharT, typename Traits>
|
typename CharT, typename Traits>
|
||||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||||
inline
|
inline
|
||||||
basic_static_string<N + M, CharT, Traits>
|
basic_static_string<(N + M) - 1, CharT, Traits>
|
||||||
operator+(
|
operator+(
|
||||||
const basic_static_string<N, CharT, Traits>& lhs,
|
const basic_static_string<N, CharT, Traits>& lhs,
|
||||||
const CharT(&rhs)[M])
|
const CharT(&rhs)[M])
|
||||||
{
|
{
|
||||||
return basic_static_string<N + M, CharT, Traits>(lhs).append(+rhs, M);
|
// Subtract 1 to account for the null terminator, as "hello" is a char[6]
|
||||||
|
return basic_static_string<(N + M) - 1, CharT, Traits>(lhs).append(+rhs, M - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add a string to a null-terminated character array.
|
||||||
template<
|
template<
|
||||||
std::size_t N, std::size_t M,
|
std::size_t N, std::size_t M,
|
||||||
typename CharT, typename Traits>
|
typename CharT, typename Traits>
|
||||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||||
inline
|
inline
|
||||||
basic_static_string<N + M, CharT, Traits>
|
basic_static_string<(N + M) - 1, CharT, Traits>
|
||||||
operator+(
|
operator+(
|
||||||
const CharT(&lhs)[N],
|
const CharT(&lhs)[N],
|
||||||
const basic_static_string<M, CharT, Traits>& rhs)
|
const basic_static_string<M, CharT, Traits>& rhs)
|
||||||
{
|
{
|
||||||
return basic_static_string<N + M, CharT, Traits>(rhs).insert(0, +rhs, N);
|
// Subtract 1 to account for the null terminator, as "hello" is a char[6]
|
||||||
|
// The cast to std::size_t is needed here since 0 is a null pointer constant
|
||||||
|
return basic_static_string<(N + M) - 1, CharT, Traits>(rhs).insert(
|
||||||
|
std::size_t(0), +lhs, N - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
@ -7009,6 +7009,53 @@ testStream()
|
|||||||
BOOST_TEST(a.str() == b.subview());
|
BOOST_TEST(a.str() == b.subview());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
testOperatorPlus()
|
||||||
|
{
|
||||||
|
static_string<10> s1 = "hello";
|
||||||
|
static_string<10> s2 = "world";
|
||||||
|
|
||||||
|
// operator+(static_string, static_string)
|
||||||
|
{
|
||||||
|
auto res = s1 + s2;
|
||||||
|
BOOST_TEST(res == "helloworld");
|
||||||
|
BOOST_TEST(res.capacity() == 20);
|
||||||
|
BOOST_TEST(res.size() == 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// operator+(static_string, CharT)
|
||||||
|
{
|
||||||
|
auto res = s1 + '!';
|
||||||
|
BOOST_TEST(res == "hello!");
|
||||||
|
BOOST_TEST(res.capacity() == 11);
|
||||||
|
BOOST_TEST(res.size() == 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// operator+(CharT, static_string)
|
||||||
|
{
|
||||||
|
auto res = '!' + s1;
|
||||||
|
BOOST_TEST(res == "!hello");
|
||||||
|
BOOST_TEST(res.capacity() == 11);
|
||||||
|
BOOST_TEST(res.size() == 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// operator+(static_string, CharT(&)[N])
|
||||||
|
{
|
||||||
|
auto res = s1 + "world";
|
||||||
|
BOOST_TEST(res == "helloworld");
|
||||||
|
BOOST_TEST(res.capacity() == 15);
|
||||||
|
BOOST_TEST(res.size() == 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// operator+(CharT(&)[N], static_string)
|
||||||
|
{
|
||||||
|
auto res = "hello" + s2;
|
||||||
|
BOOST_TEST(res == "helloworld");
|
||||||
|
BOOST_TEST(res.capacity() == 15);
|
||||||
|
BOOST_TEST(res.size() == 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
runTests()
|
runTests()
|
||||||
{
|
{
|
||||||
@ -7047,6 +7094,7 @@ runTests()
|
|||||||
testHash();
|
testHash();
|
||||||
testEmpty();
|
testEmpty();
|
||||||
testStream();
|
testStream();
|
||||||
|
testOperatorPlus();
|
||||||
|
|
||||||
return report_errors();
|
return report_errors();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user