Allow strings with external buffers to use a pre-initialised buffer.

This commit is contained in:
John Wellbelove 2020-09-15 19:51:06 +01:00
parent f7901c2899
commit f6ce3f59bd
12 changed files with 440 additions and 88 deletions

View File

@ -274,18 +274,34 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
string(value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
: istring(buffer, buffer_size - 1U)
{
this->initialise();
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
string(value_type* buffer)
: istring(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
}
//*************************************************************************
/// Copy constructor.
///\param other The other string.
//*************************************************************************
string(const etl::string<0U>& other, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(const etl::string<0U>& other, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -294,8 +310,8 @@ namespace etl
/// From other istring.
///\param other The other istring.
//*************************************************************************
string(const etl::istring& other, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(const etl::istring& other, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -306,8 +322,8 @@ namespace etl
///\param position The position of the first character.
///\param length The number of characters. Default = npos.
//*************************************************************************
string(const etl::istring& other, value_type* buffer, size_t max_size, size_t position, size_t length_ = npos)
: istring(buffer, max_size - 1)
string(const etl::istring& other, value_type* buffer, size_t buffer_size, size_t position, size_t length_ = npos)
: istring(buffer, buffer_size - 1U)
{
ETL_ASSERT(position < other.size(), ETL_ERROR(string_out_of_bounds));
@ -327,8 +343,8 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the string.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR string(const value_type* text, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
ETL_EXPLICIT_STRING_FROM_CHAR string(const value_type* text, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
}
@ -338,8 +354,8 @@ namespace etl
///\param text The initial text of the string.
///\param count The number of characters to copy.
//*************************************************************************
string(const value_type* text, size_t count, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(const value_type* text, size_t count, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(text, text + count);
}
@ -349,8 +365,8 @@ namespace etl
///\param initialSize The initial size of the string.
///\param value The value to fill the string with.
//*************************************************************************
string(size_t count, value_type c, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(size_t count, value_type c, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->initialise();
this->resize(count, c);
@ -363,8 +379,8 @@ namespace etl
///\param last The iterator to the last element + 1.
//*************************************************************************
template <typename TIterator>
string(TIterator first, TIterator last, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(TIterator first, TIterator last, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(first, last);
}
@ -373,8 +389,8 @@ namespace etl
//*************************************************************************
/// Construct from initializer_list.
//*************************************************************************
string(std::initializer_list<value_type> init, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
string(std::initializer_list<value_type> init, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(init.begin(), init.end());
}
@ -384,8 +400,8 @@ namespace etl
/// From string_view.
///\param view The string_view.
//*************************************************************************
explicit string(const etl::string_view& view, value_type* buffer, size_t max_size)
: istring(buffer, max_size - 1)
explicit string(const etl::string_view& view, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(view.begin(), view.end());
}

View File

@ -260,18 +260,34 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
u16string(value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
: iu16string(buffer, buffer_size - 1U)
{
this->initialise();
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
u16string(value_type* buffer)
: iu16string(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
}
//*************************************************************************
/// Copy constructor.
///\param other The other u16string.
//*************************************************************************
u16string(const etl::u16string<0U>& other, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(const etl::u16string<0U>& other, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -280,8 +296,8 @@ namespace etl
/// From other iu16string.
///\param other The other iu16string.
//*************************************************************************
u16string(const etl::iu16string& other, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(const etl::iu16string& other, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -292,8 +308,8 @@ namespace etl
///\param position The position of the first character.
///\param length The number of characters. Default = npos.
//*************************************************************************
u16string(const etl::iu16string& other, value_type* buffer, size_t max_size, size_t position, size_t length_ = npos)
: iu16string(buffer, max_size - 1)
u16string(const etl::iu16string& other, value_type* buffer, size_t buffer_size, size_t position, size_t length_ = npos)
: iu16string(buffer, buffer_size - 1U)
{
ETL_ASSERT(position < other.size(), ETL_ERROR(string_out_of_bounds));
@ -313,8 +329,8 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the u16string.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR u16string(const value_type* text, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
ETL_EXPLICIT_STRING_FROM_CHAR u16string(const value_type* text, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
}
@ -324,8 +340,8 @@ namespace etl
///\param text The initial text of the u16string.
///\param count The number of characters to copy.
//*************************************************************************
u16string(const value_type* text, size_t count, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(const value_type* text, size_t count, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(text, text + count);
}
@ -335,8 +351,8 @@ namespace etl
///\param initialSize The initial size of the u16string.
///\param value The value to fill the u16string with.
//*************************************************************************
u16string(size_t count, value_type c, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(size_t count, value_type c, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->initialise();
this->resize(count, c);
@ -349,8 +365,8 @@ namespace etl
///\param last The iterator to the last element + 1.
//*************************************************************************
template <typename TIterator>
u16string(TIterator first, TIterator last, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(TIterator first, TIterator last, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(first, last);
}
@ -359,8 +375,8 @@ namespace etl
//*************************************************************************
/// Construct from initializer_list.
//*************************************************************************
u16string(std::initializer_list<value_type> init, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
u16string(std::initializer_list<value_type> init, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(init.begin(), init.end());
}
@ -370,8 +386,8 @@ namespace etl
/// From u16string_view.
///\param view The u16string_view.
//*************************************************************************
explicit u16string(const etl::u16string_view& view, value_type* buffer, size_t max_size)
: iu16string(buffer, max_size - 1)
explicit u16string(const etl::u16string_view& view, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(view.begin(), view.end());
}

View File

@ -260,18 +260,34 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
u32string(value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
: iu32string(buffer, buffer_size - 1U)
{
this->initialise();
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
u32string(value_type* buffer)
: iu32string(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
}
//*************************************************************************
/// Copy constructor.
///\param other The other u32string.
//*************************************************************************
u32string(const etl::u32string<0U>& other, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(const etl::u32string<0U>& other, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -280,8 +296,8 @@ namespace etl
/// From other iu32string.
///\param other The other iu32string.
//*************************************************************************
u32string(const etl::iu32string& other, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(const etl::iu32string& other, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -292,8 +308,8 @@ namespace etl
///\param position The position of the first character.
///\param length The number of characters. Default = npos.
//*************************************************************************
u32string(const etl::iu32string& other, value_type* buffer, size_t max_size, size_t position, size_t length_ = npos)
: iu32string(buffer, max_size - 1)
u32string(const etl::iu32string& other, value_type* buffer, size_t buffer_size, size_t position, size_t length_ = npos)
: iu32string(buffer, buffer_size - 1U)
{
ETL_ASSERT(position < other.size(), ETL_ERROR(string_out_of_bounds));
@ -313,8 +329,8 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the u32string.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR u32string(const value_type* text, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
ETL_EXPLICIT_STRING_FROM_CHAR u32string(const value_type* text, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
}
@ -324,8 +340,8 @@ namespace etl
///\param text The initial text of the u32string.
///\param count The number of characters to copy.
//*************************************************************************
u32string(const value_type* text, size_t count, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(const value_type* text, size_t count, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(text, text + count);
}
@ -335,8 +351,8 @@ namespace etl
///\param initialSize The initial size of the u32string.
///\param value The value to fill the u32string with.
//*************************************************************************
u32string(size_t count, value_type c, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(size_t count, value_type c, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->initialise();
this->resize(count, c);
@ -349,8 +365,8 @@ namespace etl
///\param last The iterator to the last element + 1.
//*************************************************************************
template <typename TIterator>
u32string(TIterator first, TIterator last, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(TIterator first, TIterator last, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(first, last);
}
@ -359,8 +375,8 @@ namespace etl
//*************************************************************************
/// Construct from initializer_list.
//*************************************************************************
u32string(std::initializer_list<value_type> init, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
u32string(std::initializer_list<value_type> init, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(init.begin(), init.end());
}
@ -370,8 +386,8 @@ namespace etl
/// From u32string_view.
///\param view The u32string_view.
//*************************************************************************
explicit u32string(const etl::u32string_view& view, value_type* buffer, size_t max_size)
: iu32string(buffer, max_size - 1)
explicit u32string(const etl::u32string_view& view, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(view.begin(), view.end());
}

View File

@ -38,8 +38,8 @@ SOFTWARE.
///\ingroup utilities
#define ETL_VERSION_MAJOR 18
#define ETL_VERSION_MINOR 14
#define ETL_VERSION_PATCH 1
#define ETL_VERSION_MINOR 15
#define ETL_VERSION_PATCH 0
#define ETL_VERSION ETL_STRINGIFY(ETL_VERSION_MAJOR) "." ETL_STRINGIFY(ETL_VERSION_MINOR) "." ETL_STRINGIFY(ETL_VERSION_PATCH)
#define ETL_VERSION_W ETL_STRINGIFY(ETL_VERSION_MAJOR) L"." ETL_STRINGIFY(ETL_VERSION_MINOR) L"." ETL_STRINGIFY(ETL_VERSION_PATCH)
#define ETL_VERSION_U16 ETL_STRINGIFY(ETL_VERSION_MAJOR) u"." ETL_STRINGIFY(ETL_VERSION_MINOR) u"." ETL_STRINGIFY(ETL_VERSION_PATCH)

View File

@ -261,18 +261,34 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
wstring(value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
: iwstring(buffer, buffer_size - 1U)
{
this->initialise();
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
wstring(value_type* buffer)
: iwstring(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
}
//*************************************************************************
/// Copy constructor.
///\param other The other wstring.
//*************************************************************************
wstring(const etl::wstring<0U>& other, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(const etl::wstring<0U>& other, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -281,8 +297,8 @@ namespace etl
/// From other iwstring.
///\param other The other iwstring.
//*************************************************************************
wstring(const etl::iwstring& other, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(const etl::iwstring& other, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(other);
}
@ -293,8 +309,8 @@ namespace etl
///\param position The position of the first character.
///\param length The number of characters. Default = npos.
//*************************************************************************
wstring(const etl::iwstring& other, value_type* buffer, size_t max_size, size_t position, size_t length_ = npos)
: iwstring(buffer, max_size - 1)
wstring(const etl::iwstring& other, value_type* buffer, size_t buffer_size, size_t position, size_t length_ = npos)
: iwstring(buffer, buffer_size - 1U)
{
ETL_ASSERT(position < other.size(), ETL_ERROR(string_out_of_bounds));
@ -314,8 +330,8 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the wstring.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR wstring(const value_type* text, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
ETL_EXPLICIT_STRING_FROM_CHAR wstring(const value_type* text, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
}
@ -325,8 +341,8 @@ namespace etl
///\param text The initial text of the wstring.
///\param count The number of characters to copy.
//*************************************************************************
wstring(const value_type* text, size_t count, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(const value_type* text, size_t count, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(text, text + count);
}
@ -336,8 +352,8 @@ namespace etl
///\param initialSize The initial size of the wstring.
///\param value The value to fill the wstring with.
//*************************************************************************
wstring(size_t count, value_type c, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(size_t count, value_type c, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->initialise();
this->resize(count, c);
@ -350,8 +366,8 @@ namespace etl
///\param last The iterator to the last element + 1.
//*************************************************************************
template <typename TIterator>
wstring(TIterator first, TIterator last, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(TIterator first, TIterator last, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(first, last);
}
@ -360,8 +376,8 @@ namespace etl
//*************************************************************************
/// Construct from initializer_list.
//*************************************************************************
wstring(std::initializer_list<value_type> init, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
wstring(std::initializer_list<value_type> init, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(init.begin(), init.end());
}
@ -371,8 +387,8 @@ namespace etl
/// From wstring_view.
///\param view The wstring_view.
//*************************************************************************
explicit wstring(const etl::wstring_view& view, value_type* buffer, size_t max_size)
: iwstring(buffer, max_size - 1)
explicit wstring(const etl::wstring_view& view, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(view.begin(), view.end());
}

View File

@ -1,6 +1,6 @@
{
"name": "Embedded Template Library",
"version": "18.14.1",
"version": "18.15.0",
"authors": {
"name": "John Wellbelove",
"email": "john.wellbelove@etlcpp.com"

View File

@ -1,5 +1,5 @@
name=Embedded Template Library
version=18.14.1
version=18.15.0
author= John Wellbelove <john.wellbelove@etlcpp.com>
maintainer=John Wellbelove <john.wellbelove@etlcpp.com>
license=MIT

View File

@ -1,3 +1,7 @@
===============================================================================
18.15.0
Allow strings with external buffers to use a pre-initialised buffer.
===============================================================================
18.14.1
Fixed conditional compilation macro use for template deduction guides.

View File

@ -73,6 +73,9 @@ namespace
Compare_Text short_text;
const value_t* pinitial_text = STR("Hello World");
value_t array_text[12];
value_t* p_text = array_text;
//*************************************************************************
template <typename T1, typename T2>
@ -94,6 +97,8 @@ namespace
different_text = STR("Byee Planet");
longer_text = STR("Hello World There");
short_text = STR("Hello");
std::copy(pinitial_text, pinitial_text + etl::strlen(pinitial_text), array_text);
}
};
@ -111,6 +116,72 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
size_t length = etl::strlen(p_text);
Text text(p_text, length + 1);
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(length, text.capacity());
CHECK_EQUAL(length, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer)
{
Text text(array_text, etl::size(array_text));
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST(test_iterator_comparison_empty)
{

View File

@ -74,6 +74,9 @@ namespace
const value_t* pinitial_text = STR("Hello World");
value_t array_text[12];
value_t* p_text = array_text;
//*************************************************************************
template <typename T1, typename T2>
bool Equal(const T1& compare_text, const T2& text)
@ -94,6 +97,8 @@ namespace
different_text = STR("Byee Planet");
longer_text = STR("Hello World There");
short_text = STR("Hello");
std::copy(pinitial_text, pinitial_text + etl::strlen(pinitial_text), array_text);
}
};
@ -111,6 +116,72 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
size_t length = etl::strlen(p_text);
Text text(p_text, length + 1);
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(length, text.capacity());
CHECK_EQUAL(length, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer)
{
Text text(array_text, etl::size(array_text));
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST(test_iterator_comparison_empty)
{

View File

@ -74,6 +74,9 @@ namespace
const value_t* pinitial_text = STR("Hello World");
value_t array_text[12];
value_t* p_text = array_text;
//*************************************************************************
template <typename T1, typename T2>
bool Equal(const T1& compare_text, const T2& text)
@ -94,6 +97,8 @@ namespace
different_text = STR("Byee Planet");
longer_text = STR("Hello World There");
short_text = STR("Hello");
std::copy(pinitial_text, pinitial_text + etl::strlen(pinitial_text), array_text);
}
};
@ -111,6 +116,72 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
size_t length = etl::strlen(p_text);
Text text(p_text, length + 1);
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(length, text.capacity());
CHECK_EQUAL(length, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer)
{
Text text(array_text, etl::size(array_text));
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST(test_iterator_comparison_empty)
{

View File

@ -74,6 +74,9 @@ namespace
const value_t* pinitial_text = STR("Hello World");
value_t array_text[12];
value_t* p_text = array_text;
//*************************************************************************
template <typename T1, typename T2>
bool Equal(const T1& compare_text, const T2& text)
@ -94,6 +97,8 @@ namespace
different_text = STR("Byee Planet");
longer_text = STR("Hello World There");
short_text = STR("Hello");
std::copy(pinitial_text, pinitial_text + etl::strlen(pinitial_text), array_text);
}
};
@ -111,6 +116,72 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
size_t length = etl::strlen(p_text);
Text text(p_text, length + 1);
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(length, text.capacity());
CHECK_EQUAL(length, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer)
{
Text text(array_text, etl::size(array_text));
CHECK_EQUAL(0U, text.size());
CHECK(text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() == text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::size(array_text) - 1, text.capacity());
CHECK_EQUAL(etl::size(array_text) - 1, text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST(test_iterator_comparison_empty)
{