diff --git a/include/etl/private/bitset_legacy.h b/include/etl/private/bitset_legacy.h index 24052e41..30c152ae 100644 --- a/include/etl/private/bitset_legacy.h +++ b/include/etl/private/bitset_legacy.h @@ -429,7 +429,14 @@ namespace etl //************************************************************************* ibitset& set(const char* text) { - from_string(text); + if (text == ETL_NULLPTR) + { + reset(); + } + else + { + from_string(text); + } return *this; } @@ -439,7 +446,14 @@ namespace etl //************************************************************************* ibitset& set(const wchar_t* text) { - from_string(text); + if (text == ETL_NULLPTR) + { + reset(); + } + else + { + from_string(text); + } return *this; } @@ -449,7 +463,14 @@ namespace etl //************************************************************************* ibitset& set(const char16_t* text) { - from_string(text); + if (text == ETL_NULLPTR) + { + reset(); + } + else + { + from_string(text); + } return *this; } @@ -459,7 +480,14 @@ namespace etl //************************************************************************* ibitset& set(const char32_t* text) { - from_string(text); + if (text == ETL_NULLPTR) + { + reset(); + } + else + { + from_string(text); + } return *this; } @@ -512,7 +540,7 @@ namespace etl //************************************************************************* ibitset& reset() { - ::memset(pdata, 0x00, Number_Of_Elements); + ::memset(pdata, 0, Number_Of_Elements * sizeof(element_type)); return *this; } @@ -1194,7 +1222,6 @@ namespace etl //************************************************************************* bitset& set(const char* text) { - ETL_ASSERT_OR_RETURN_VALUE(text != 0, ETL_ERROR(bitset_nullptr), *this); etl::ibitset::set(text); return *this; @@ -1205,7 +1232,6 @@ namespace etl //************************************************************************* bitset& set(const wchar_t* text) { - ETL_ASSERT_OR_RETURN_VALUE(text != 0, ETL_ERROR(bitset_nullptr), *this); etl::ibitset::set(text); return *this; @@ -1216,7 +1242,6 @@ namespace etl //************************************************************************* bitset& set(const char16_t* text) { - ETL_ASSERT_OR_RETURN_VALUE(text != 0, ETL_ERROR(bitset_nullptr), *this); etl::ibitset::set(text); return *this; @@ -1227,7 +1252,6 @@ namespace etl //************************************************************************* bitset& set(const char32_t* text) { - ETL_ASSERT_OR_RETURN_VALUE(text != 0, ETL_ERROR(bitset_nullptr), *this); etl::ibitset::set(text); return *this; diff --git a/include/etl/private/bitset_new.h b/include/etl/private/bitset_new.h index 63462f21..28497238 100644 --- a/include/etl/private/bitset_new.h +++ b/include/etl/private/bitset_new.h @@ -127,6 +127,20 @@ namespace etl } }; + //*************************************************************************** + /// Bitset nullptr buffer exception. + ///\ingroup bitset + //*************************************************************************** + class bitset_invalid_buffer : public bitset_exception + { + public: + + bitset_invalid_buffer(string_type file_name_, numeric_type line_number_) + : bitset_exception(ETL_ERROR_TEXT("bitset:invalid buffer", ETL_BITSET_FILE_ID"D"), file_name_, line_number_) + { + } + }; + //************************************************************************* /// The implementation class for multi-element etl::bitset ///\ingroup bitset @@ -2598,16 +2612,17 @@ namespace etl //************************************************************************* /// Default constructor. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 explicit bitset_ext(element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = All_Clear_Element; } //************************************************************************* /// Default constructor. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(buffer_type& buffer) ETL_NOEXCEPT + ETL_CONSTEXPR14 explicit bitset_ext(buffer_type& buffer) ETL_NOEXCEPT : pbuffer(&buffer) { *pbuffer = All_Clear_Element; @@ -2616,9 +2631,10 @@ namespace etl //************************************************************************* /// Construct copy. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const bitset_ext& other, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const bitset_ext& other, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = *other.pbuffer; } @@ -2639,9 +2655,10 @@ namespace etl //************************************************************************* /// Construct from a value. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(unsigned long long value, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(unsigned long long value, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = element_type(value); } @@ -2657,9 +2674,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const char* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const char* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = All_Clear_Element; set(text); } @@ -2677,9 +2695,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const wchar_t* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const wchar_t* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = All_Clear_Element; set(text); } @@ -2697,9 +2716,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const char16_t* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const char16_t* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = All_Clear_Element; set(text); } @@ -2717,9 +2737,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const char32_t* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const char32_t* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); *pbuffer = All_Clear_Element; set(text); } @@ -2963,7 +2984,7 @@ namespace etl //************************************************************************* template ETL_CONSTEXPR14 - typename etl::enable_if::value, T>::type + typename etl::enable_if::value, T>::type value() const ETL_NOEXCEPT { ETL_STATIC_ASSERT(etl::is_integral::value, "Only integral types are supported"); @@ -3476,27 +3497,30 @@ namespace etl //************************************************************************* /// Default constructor. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 explicit bitset_ext(element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); reset(); } //************************************************************************* /// Default constructor. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(buffer_type& buffer) ETL_NOEXCEPT + ETL_CONSTEXPR14 explicit bitset_ext(buffer_type& buffer) : pbuffer(buffer.data()) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); reset(); } //************************************************************************* /// Construct copy. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const bitset_ext& other, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const bitset_ext& other, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); etl::copy_n(other.pbuffer, Number_Of_Elements, pbuffer); } @@ -3517,9 +3541,10 @@ namespace etl //************************************************************************* /// Construct from a value. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(unsigned long long value, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(unsigned long long value, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); ibitset.initialise(pbuffer, Number_Of_Elements, value); clear_unused_bits_in_msb(); } @@ -3537,9 +3562,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const char* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const char* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); ibitset.set(pbuffer, Number_Of_Elements, Active_Bits, text); clear_unused_bits_in_msb(); } @@ -3557,9 +3583,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const wchar_t* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const wchar_t* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); ibitset.set(pbuffer, Number_Of_Elements, Active_Bits, text); clear_unused_bits_in_msb(); } @@ -3577,9 +3604,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const char16_t* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const char16_t* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); ibitset.set(pbuffer, Number_Of_Elements, Active_Bits, text); clear_unused_bits_in_msb(); } @@ -3597,9 +3625,10 @@ namespace etl //************************************************************************* /// Construct from a string. //************************************************************************* - ETL_CONSTEXPR14 bitset_ext(const char32_t* text, element_type* pbuffer_) ETL_NOEXCEPT + ETL_CONSTEXPR14 bitset_ext(const char32_t* text, element_type* pbuffer_) : pbuffer(pbuffer_) { + ETL_ASSERT(pbuffer != ETL_NULLPTR, ETL_ERROR(etl::bitset_invalid_buffer)); ibitset.set(pbuffer, Number_Of_Elements, Active_Bits, text); clear_unused_bits_in_msb(); } diff --git a/test/test_bit_stream_reader_big_endian.cpp b/test/test_bit_stream_reader_big_endian.cpp index c71977b1..4cdf3d29 100644 --- a/test/test_bit_stream_reader_big_endian.cpp +++ b/test/test_bit_stream_reader_big_endian.cpp @@ -94,7 +94,7 @@ namespace etl namespace { - SUITE(test_bit_stream_reader) + SUITE(test_bit_stream_reader_big_endian) { //************************************************************************* TEST(test_read_bool) diff --git a/test/test_bit_stream_reader_little_endian.cpp b/test/test_bit_stream_reader_little_endian.cpp index 776d2023..22c724ff 100644 --- a/test/test_bit_stream_reader_little_endian.cpp +++ b/test/test_bit_stream_reader_little_endian.cpp @@ -95,7 +95,7 @@ namespace etl namespace { - SUITE(test_bit_stream_reader) + SUITE(test_bit_stream_reader_little_endian) { //************************************************************************* TEST(test_read_bool) diff --git a/test/test_bit_stream_writer_big_endian.cpp b/test/test_bit_stream_writer_big_endian.cpp index be7ff681..675edbbb 100644 --- a/test/test_bit_stream_writer_big_endian.cpp +++ b/test/test_bit_stream_writer_big_endian.cpp @@ -114,7 +114,7 @@ namespace std::vector data; }; - SUITE(test_bit_stream_big_endian) + SUITE(test_bit_stream_writer_big_endian) { //************************************************************************* TEST(test_bit_stream_writer_construction) diff --git a/test/test_bit_stream_writer_little_endian.cpp b/test/test_bit_stream_writer_little_endian.cpp index e66c46c2..3051bc7f 100644 --- a/test/test_bit_stream_writer_little_endian.cpp +++ b/test/test_bit_stream_writer_little_endian.cpp @@ -114,7 +114,7 @@ namespace std::vector data; }; - SUITE(test_bit_stream_little_endian) + SUITE(test_bit_stream_writer_little_endian) { //************************************************************************* TEST(test_bit_stream_writer_construction) diff --git a/test/test_bitset_legacy.cpp b/test/test_bitset_legacy.cpp index ce664c4c..a64722ba 100644 --- a/test/test_bitset_legacy.cpp +++ b/test/test_bitset_legacy.cpp @@ -143,6 +143,50 @@ namespace } } + //************************************************************************* + TEST(test_construct_from_nullptr_char_string) + { + const char* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_wchar_t_string) + { + const wchar_t* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char16_t_string) + { + const char16_t* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char32_t_string) + { + const char32_t* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_construct_from_excess_string) { @@ -206,7 +250,7 @@ namespace } //************************************************************************* - TEST(test_char_string_set) + TEST(test_set_with_char_string) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -226,7 +270,7 @@ namespace } //************************************************************************* - TEST(test_wchar_t_string_set) + TEST(test_set_with_wchar_t_string) { std::bitset<60> compare(L"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -246,7 +290,7 @@ namespace } //************************************************************************* - TEST(test_char16_t_string_set) + TEST(test_set_with_char16_t_string) { std::bitset<60> compare(u"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -266,7 +310,7 @@ namespace } //************************************************************************* - TEST(test_char32_t_string_set) + TEST(test_set_with_char32_t_string) { std::bitset<60> compare(U"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -286,7 +330,55 @@ namespace } //************************************************************************* - TEST(test_from_char_string) + TEST(test_set_from_char_nullptr) + { + const char* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -306,7 +398,7 @@ namespace } //************************************************************************* - TEST(test_from_wchar_t_string) + TEST(test_from_string_with_wchar_t) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -346,7 +438,7 @@ namespace } //************************************************************************* - TEST(test_from_char32_t_string) + TEST(test_from_string_with_char32_t) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -365,6 +457,54 @@ namespace } } + //************************************************************************* + TEST(test_from_string_with_char_nullptr) + { + const char* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_value_u8_min) { diff --git a/test/test_bitset_new_default_element_type.cpp b/test/test_bitset_new_default_element_type.cpp index 67f703a3..95da4aad 100644 --- a/test/test_bitset_new_default_element_type.cpp +++ b/test/test_bitset_new_default_element_type.cpp @@ -925,6 +925,51 @@ namespace } } + //************************************************************************* + TEST(test_construct_from_nullptr_char_string) + { + const char* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_wchar_t_string) + { + const wchar_t* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + + //************************************************************************* + TEST(test_construct_from_nullptr_char16_t_string) + { + const char16_t* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char32_t_string) + { + const char32_t* s = nullptr; + + etl::bitset<60> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_construct_from_excess_string) { @@ -965,7 +1010,7 @@ namespace } //************************************************************************* - TEST(test_char_string_set) + TEST(test_set_with_char_string) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -985,7 +1030,7 @@ namespace } //************************************************************************* - TEST(test_wchar_t_string_set) + TEST(test_set_with_wchar_t_string) { std::bitset<60> compare(L"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -1005,7 +1050,7 @@ namespace } //************************************************************************* - TEST(test_char16_t_string_set) + TEST(test_set_with_char16_t_string) { std::bitset<60> compare(u"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -1025,7 +1070,7 @@ namespace } //************************************************************************* - TEST(test_char32_t_string_set) + TEST(test_set_with_char32_t_string) { std::bitset<60> compare(U"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -1045,7 +1090,55 @@ namespace } //************************************************************************* - TEST(test_from_char_string) + TEST(test_set_from_char_nullptr) + { + const char* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset<60> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -1065,7 +1158,7 @@ namespace } //************************************************************************* - TEST(test_from_wchar_t_string) + TEST(test_from_string_with_wchar_t) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -1105,7 +1198,7 @@ namespace } //************************************************************************* - TEST(test_from_char32_t_string) + TEST(test_from_string_with_char32_t) { std::bitset<60> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<60> data; @@ -1124,6 +1217,54 @@ namespace } } + //************************************************************************* + TEST(test_from_string_with_char_nullptr) + { + const char* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset<60> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_value_u16_min) { diff --git a/test/test_bitset_new_explicit_single_element_type.cpp b/test/test_bitset_new_explicit_single_element_type.cpp index b9c0c84b..78de4ef3 100644 --- a/test/test_bitset_new_explicit_single_element_type.cpp +++ b/test/test_bitset_new_explicit_single_element_type.cpp @@ -255,6 +255,50 @@ namespace } } + //************************************************************************* + TEST(test_construct_from_nullptr_char_string) + { + const char* s = nullptr; + + etl::bitset<60, int64_t> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_wchar_t_string) + { + const wchar_t* s = nullptr; + + etl::bitset<60, int64_t> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char16_t_string) + { + const char16_t* s = nullptr; + + etl::bitset<60, int64_t> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char32_t_string) + { + const char32_t* s = nullptr; + + etl::bitset<60, int64_t> data(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_construct_from_excess_string) { @@ -310,7 +354,7 @@ namespace } //************************************************************************* - TEST(test_char_string_set) + TEST(test_set_with_char_string) { std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -330,7 +374,7 @@ namespace } //************************************************************************* - TEST(test_wchar_t_string_set) + TEST(test_set_with_wchar_t_string) { std::bitset<64> compare(L"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -350,7 +394,7 @@ namespace } //************************************************************************* - TEST(test_char16_t_string_set) + TEST(test_set_with_char16_t_string) { std::bitset<64> compare(u"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -370,7 +414,7 @@ namespace } //************************************************************************* - TEST(test_char32_t_string_set) + TEST(test_set_with_char32_t_string) { std::bitset<64> compare(U"110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -390,7 +434,55 @@ namespace } //************************************************************************* - TEST(test_from_char_string) + TEST(test_set_from_char_nullptr) + { + const char* s = nullptr; + + etl::bitset<60, int64_t> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset<60, int64_t> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset<60, int64_t> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset<60, int64_t> data; + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char) { std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -410,7 +502,7 @@ namespace } //************************************************************************* - TEST(test_from_wchar_t_string) + TEST(test_from_string_with_wchar_t) { std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -450,7 +542,7 @@ namespace } //************************************************************************* - TEST(test_from_char32_t_string) + TEST(test_from_string_with_char32_t) { std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); etl::bitset<64, int64_t> data; @@ -469,6 +561,54 @@ namespace } } + //************************************************************************* + TEST(test_from_string_with_char_nullptr) + { + const char* s = nullptr; + + etl::bitset<60, int64_t> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset<60, int64_t> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset<60, int64_t> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset<60, int64_t> data; + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_value_u8_min) { diff --git a/test/test_bitset_new_ext_default_element_type.cpp b/test/test_bitset_new_ext_default_element_type.cpp index aeeea766..8eb3cbb6 100644 --- a/test/test_bitset_new_ext_default_element_type.cpp +++ b/test/test_bitset_new_ext_default_element_type.cpp @@ -767,6 +767,23 @@ namespace CHECK_EQUAL(1U, (etl::bitset_ext<64, int64_t>::Number_Of_Elements)); } + //************************************************************************* + TEST(test_construct_from_nullptr_buffer) + { + using BsExt = etl::bitset_ext<64>; + + BsExt::buffer_type buffer; + BsExt bs2a(buffer); + + CHECK_THROW(BsExt bs1(nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs2b(bs2a, nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs3(0ULL, nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs4("0", nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs5(L"0", nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs6(u"0", nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs7(U"0", nullptr), etl::bitset_invalid_buffer); + } + //************************************************************************* TEST(test_construct_from_value) { @@ -888,6 +905,58 @@ namespace } } + //************************************************************************* + TEST(test_construct_from_nullptr_char_string) + { + etl::bitset_ext<60>::buffer_type buffer; + + const char* s = nullptr; + + etl::bitset_ext<60> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_wchar_t_string) + { + etl::bitset_ext<60>::buffer_type buffer; + + const wchar_t* s = nullptr; + + etl::bitset_ext<60> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char16_t_string) + { + etl::bitset_ext<60>::buffer_type buffer; + + const char16_t* s = nullptr; + + etl::bitset_ext<60> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char32_t_string) + { + etl::bitset_ext<60>::buffer_type buffer; + + const char32_t* s = nullptr; + + etl::bitset_ext<60> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_construct_from_excess_string) { @@ -932,7 +1001,7 @@ namespace } //************************************************************************* - TEST(test_char_string_set) + TEST(test_set_with_char_string) { etl::bitset_ext<60>::buffer_type buffer; @@ -954,7 +1023,7 @@ namespace } //************************************************************************* - TEST(test_wchar_t_string_set) + TEST(test_set_with_wchar_t_string) { etl::bitset_ext<60>::buffer_type buffer; @@ -976,7 +1045,7 @@ namespace } //************************************************************************* - TEST(test_char16_t_string_set) + TEST(test_set_with_char16_t_string) { etl::bitset_ext<60>::buffer_type buffer; @@ -998,7 +1067,7 @@ namespace } //************************************************************************* - TEST(test_char32_t_string_set) + TEST(test_set_with_char32_t_string) { etl::bitset_ext<60>::buffer_type buffer; @@ -1020,7 +1089,59 @@ namespace } //************************************************************************* - TEST(test_from_char_string) + TEST(test_set_from_char_nullptr) + { + const char* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.set(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char) { etl::bitset_ext<60>::buffer_type buffer; @@ -1042,7 +1163,7 @@ namespace } //************************************************************************* - TEST(test_from_wchar_t_string) + TEST(test_from_string_with_wchar_t) { etl::bitset_ext<60>::buffer_type buffer; @@ -1086,7 +1207,7 @@ namespace } //************************************************************************* - TEST(test_from_char32_t_string) + TEST(test_from_string_with_char32_t) { etl::bitset_ext<60>::buffer_type buffer; @@ -1107,6 +1228,58 @@ namespace } } + //************************************************************************* + TEST(test_from_string_with_char_nullptr) + { + const char* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char32_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset_ext<60>::buffer_type buffer; + etl::bitset_ext<60> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_value_u16_min) { diff --git a/test/test_bitset_new_ext_explicit_single_element_type.cpp b/test/test_bitset_new_ext_explicit_single_element_type.cpp index b7bc74ef..0eaf1d19 100644 --- a/test/test_bitset_new_ext_explicit_single_element_type.cpp +++ b/test/test_bitset_new_ext_explicit_single_element_type.cpp @@ -44,6 +44,23 @@ namespace SUITE(test_bitset_new_ext_explicit_element_type) { + //************************************************************************* + TEST(test_construct_from_nullptr_buffer) + { + using BsExt = etl::bitset_ext<64, int64_t>; + + BsExt::buffer_type buffer; + BsExt bs2a(buffer); + + CHECK_THROW(BsExt bs1(nullptr) , etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs2b(bs2a, nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs3(0ULL, nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs4("0", nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs5(L"0", nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs6(u"0", nullptr), etl::bitset_invalid_buffer); + CHECK_THROW(BsExt bs7(U"0", nullptr), etl::bitset_invalid_buffer); + } + //************************************************************************* TEST(test_default_constructor_from_array) { @@ -210,6 +227,54 @@ namespace } } + //************************************************************************* + TEST(test_construct_from_nullptr_char_string) + { + const char* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_wchar_t_string) + { + const wchar_t* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char16_t_string) + { + const char16_t* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_construct_from_nullptr_char32_t_string) + { + const char32_t* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(s, buffer); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_construct_from_excess_string) { @@ -260,7 +325,7 @@ namespace } //************************************************************************* - TEST(test_char_string_set) + TEST(test_set_with_char_string) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); @@ -281,7 +346,7 @@ namespace } //************************************************************************* - TEST(test_wchar_t_string_set) + TEST(test_set_with_wchar_t_string) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare(L"110001001000110100010101100111001100010010001101000101011001"); @@ -302,7 +367,7 @@ namespace } //************************************************************************* - TEST(test_char16_t_string_set) + TEST(test_set_with_char16_t_string) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare(u"110001001000110100010101100111001100010010001101000101011001"); @@ -323,7 +388,7 @@ namespace } //************************************************************************* - TEST(test_char32_t_string_set) + TEST(test_set_with_char32_t_string) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare(U"110001001000110100010101100111001100010010001101000101011001"); @@ -344,7 +409,59 @@ namespace } //************************************************************************* - TEST(test_from_char_string) + TEST(test_set_from_char_nullptr) + { + const char* s = nullptr; + + etl::bitset_ext<64, int64_t>::buffer_type buffer; + etl::bitset_ext<64, int64_t> data(buffer); + data.set(s); + + CHECK_EQUAL(64, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset_ext<64, int64_t>::buffer_type buffer; + etl::bitset_ext<64, int64_t> data(buffer); + data.set(s); + + CHECK_EQUAL(64, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset_ext<64, int64_t>::buffer_type buffer; + etl::bitset_ext<64, int64_t> data(buffer); + data.set(s); + + CHECK_EQUAL(64, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_set_from_char32_t_nullptr) + { + const char32_t* s = nullptr; + + etl::bitset_ext<64, int64_t>::buffer_type buffer; + etl::bitset_ext<64, int64_t> data(buffer); + data.set(s); + + CHECK_EQUAL(64, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); @@ -365,7 +482,7 @@ namespace } //************************************************************************* - TEST(test_from_wchar_t_string) + TEST(test_from_string_with_wchar_t) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); @@ -386,7 +503,7 @@ namespace } //************************************************************************* - TEST(test_from_char16_t_6string) + TEST(test_from_string_with_char16_t) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); @@ -407,7 +524,7 @@ namespace } //************************************************************************* - TEST(test_from_char32_t_string) + TEST(test_from_string_with_char32_t) { etl::bitset_ext<64, int64_t>::buffer_type buffer; std::bitset<64> compare("110001001000110100010101100111001100010010001101000101011001"); @@ -427,6 +544,58 @@ namespace } } + //************************************************************************* + TEST(test_from_string_with_char_nullptr) + { + const char* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_wchar_t_nullptr) + { + const wchar_t* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char16_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + + //************************************************************************* + TEST(test_from_string_with_char32_t_nullptr) + { + const char16_t* s = nullptr; + + etl::bitset_ext<60, int64_t>::buffer_type buffer; + etl::bitset_ext<60, int64_t> data(buffer); + data.from_string(s); + + CHECK_EQUAL(60, data.size()); + CHECK_EQUAL(0, data.count()); + } + //************************************************************************* TEST(test_value_u8_min) {