mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Add basic_format_arg constructor for ibasic_string (#1288)
* Allow string as format arg * Remove AppVeyor build status badge Removed AppVeyor build status badge from README. * Update README.md * Update CONTRIBUTING.md Updated the instructions for contributing. * Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic" (#1277) * Reproduce data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Fix data corruption bug in the `etl::bip_buffer_spsc_atomic`. * Added test string escaped * Add temporary string test --------- Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com> Co-authored-by: Sergei <sergej.shirokov@gmail.com>
This commit is contained in:
parent
a3c8f80216
commit
b51968d6dd
@ -284,6 +284,11 @@ namespace etl
|
||||
{
|
||||
}
|
||||
|
||||
basic_format_arg(const etl::ibasic_string<char>& v)
|
||||
: data(etl::string_view(v.data(), v.size()))
|
||||
{
|
||||
}
|
||||
|
||||
basic_format_arg(const basic_format_arg& other): data(other.data)
|
||||
{
|
||||
}
|
||||
|
||||
@ -282,6 +282,68 @@ namespace
|
||||
CHECK_EQUAL("\"data1\\n\"", test_format(s, "{:?}", sv));
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(test_format_string)
|
||||
{
|
||||
etl::string<100> s;
|
||||
etl::string<10> s_arg = "data1";
|
||||
|
||||
CHECK_EQUAL("data1", test_format(s, "{}", s_arg));
|
||||
CHECK_EQUAL("data1", test_format(s, "{:s}", s_arg));
|
||||
CHECK_THROW(test_format(s, "{:d}", s_arg), etl::bad_format_string_exception);
|
||||
CHECK_EQUAL("data1 ", test_format(s, "{:10s}", s_arg));
|
||||
CHECK_EQUAL("data1 ", test_format(s, "{:<10s}", s_arg));
|
||||
CHECK_EQUAL(" data1", test_format(s, "{:>10s}", s_arg));
|
||||
CHECK_EQUAL(" data1 ", test_format(s, "{:^10s}", s_arg));
|
||||
CHECK_EQUAL("data1", test_format(s, "{:3}", s_arg));
|
||||
CHECK_EQUAL("dat", test_format(s, "{:.3s}", s_arg));
|
||||
CHECK_EQUAL("dat", test_format(s, "{:^.3s}", s_arg));
|
||||
CHECK_EQUAL(". dat !", test_format(s, ".{:^8.3s}!", s_arg));
|
||||
CHECK_EQUAL("^dat $", test_format(s, "^{:8.3s}$", s_arg));
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
//this minimal derived class of etl::string is used to prove that the
|
||||
//temporary lifetime is long enough for the format operation
|
||||
template<size_t N>
|
||||
class clearing_string : public etl::string<N>
|
||||
{
|
||||
public:
|
||||
using etl::string<N>::string;
|
||||
~clearing_string()
|
||||
{
|
||||
this->clear();
|
||||
}
|
||||
};
|
||||
TEST(test_format_string_temporary)
|
||||
{
|
||||
etl::string<100> s;
|
||||
const char* data = "data1";
|
||||
using string_t = clearing_string<10>;
|
||||
|
||||
CHECK_EQUAL("data1", test_format(s, "{}", string_t(data)));
|
||||
CHECK_EQUAL("data1", test_format(s, "{:s}", string_t(data)));
|
||||
CHECK_THROW(test_format(s, "{:d}", string_t(data)), etl::bad_format_string_exception);
|
||||
CHECK_EQUAL("data1 ", test_format(s, "{:10s}", string_t(data)));
|
||||
CHECK_EQUAL("data1 ", test_format(s, "{:<10s}", string_t(data)));
|
||||
CHECK_EQUAL(" data1", test_format(s, "{:>10s}", string_t(data)));
|
||||
CHECK_EQUAL(" data1 ", test_format(s, "{:^10s}", string_t(data)));
|
||||
CHECK_EQUAL("data1", test_format(s, "{:3}", string_t(data)));
|
||||
CHECK_EQUAL("dat", test_format(s, "{:.3s}", string_t(data)));
|
||||
CHECK_EQUAL("dat", test_format(s, "{:^.3s}", string_t(data)));
|
||||
CHECK_EQUAL(". dat !", test_format(s, ".{:^8.3s}!", string_t(data)));
|
||||
CHECK_EQUAL("^dat $", test_format(s, "^{:8.3s}$", string_t(data)));
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(test_format_string_escaped)
|
||||
{
|
||||
etl::string<100> s;
|
||||
etl::string<10> s_arg("data1\n");
|
||||
|
||||
CHECK_EQUAL("\"data1\\n\"", test_format(s, "{:?}", s_arg));
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST(test_format_chars)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user