From 134f8e4209b5775625f5162a0bf667bb453dee69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Seeb=C3=B6ck?= Date: Thu, 22 Feb 2024 20:14:37 +0100 Subject: [PATCH 1/3] variant varadic default constructed state (#804) * fixed variant varadic default constructed state * updated testcases to account for default contructor changes --- include/etl/private/variant_variadic.h | 2 +- test/test_variant_variadic.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/etl/private/variant_variadic.h b/include/etl/private/variant_variadic.h index 28b2d99a..399e5e90 100644 --- a/include/etl/private/variant_variadic.h +++ b/include/etl/private/variant_variadic.h @@ -531,7 +531,7 @@ namespace etl default_construct_in_place(data); operation = operation_type::value, etl::is_move_constructible::value>::do_operation; - type_id = 0U; + type_id = variant_npos; } #include "diagnostic_pop.h" diff --git a/test/test_variant_variadic.cpp b/test/test_variant_variadic.cpp index 34e9178c..e35d48e8 100644 --- a/test/test_variant_variadic.cpp +++ b/test/test_variant_variadic.cpp @@ -420,15 +420,15 @@ namespace test_variant_etl_3 variant_etl; - CHECK(etl::holds_alternative(variant_etl)); + CHECK(!etl::holds_alternative(variant_etl)); CHECK(!etl::holds_alternative(variant_etl)); CHECK(!etl::holds_alternative(variant_etl)); - CHECK(etl::holds_alternative<0U>(variant_etl)); + CHECK(!etl::holds_alternative<0U>(variant_etl)); CHECK(!etl::holds_alternative<1U>(variant_etl)); CHECK(!etl::holds_alternative<2U>(variant_etl)); - CHECK(etl::holds_alternative(0U, variant_etl)); + CHECK(!etl::holds_alternative(0U, variant_etl)); CHECK(!etl::holds_alternative(1U, variant_etl)); CHECK(!etl::holds_alternative(2U, variant_etl)); CHECK(!etl::holds_alternative(99U, variant_etl)); @@ -1830,7 +1830,7 @@ namespace //************************************************************************* TEST(test_variant_visit_void) { - etl::variant variant1; + etl::variant variant1 = int8_t{}; bool variant_was_signed{}; auto const f = [&variant_was_signed](auto v) @@ -1857,7 +1857,7 @@ namespace std::string result = "?"; - etl::variant package; + etl::variant package = TypeA{}; etl::visit(etl::overload { From 7f13eeb06cfff2965eaa8a4e41ec12d0be3c25b9 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Mon, 4 Mar 2024 12:54:05 +0000 Subject: [PATCH 2/3] Added fixes for deque operator-(). Removed redundant operator that was causing compile errors for C++20 # Conflicts: # test/test_deque.cpp --- include/etl/circular_buffer.h | 52 +++++++++++++++------- include/etl/deque.h | 70 ++++++++++++++++++++--------- test/test_deque.cpp | 84 +++++++++++++++++++++++++++++++++-- 3 files changed, 164 insertions(+), 42 deletions(-) diff --git a/include/etl/circular_buffer.h b/include/etl/circular_buffer.h index a099ca4a..a2f67a1a 100644 --- a/include/etl/circular_buffer.h +++ b/include/etl/circular_buffer.h @@ -246,6 +246,22 @@ namespace etl return &picb->pbuffer[current]; } + //************************************************************************* + /// [] operator + //************************************************************************* + reference operator [](size_t index) + { + return pbuffer[(current + index) % picb->buffer_size]; + } + + //************************************************************************* + /// [] operator + //************************************************************************* + const_reference operator [](size_t index) const + { + return pbuffer[(current + index) % picb->buffer_size]; + } + //************************************************************************* /// Pre-increment. //************************************************************************* @@ -335,6 +351,18 @@ namespace etl return temp; } + //************************************************************************* + /// Add offset. + //************************************************************************* + friend iterator operator +(int n, const iterator& rhs) + { + iterator temp = rhs; + + temp += n; + + return temp; + } + //************************************************************************* /// Subtract offset. //************************************************************************* @@ -517,6 +545,14 @@ namespace etl return &(picb->pbuffer[current]); } + //************************************************************************* + /// [] operator + //************************************************************************* + const_reference operator [](size_t index) const + { + return pbuffer[(current + index) % picb->buffer_size]; + } + //************************************************************************* /// Pre-increment. //************************************************************************* @@ -998,22 +1034,6 @@ namespace etl return distance(rhs, lhs); } - //************************************************************************* - /// - operator for reverse_iterator - //************************************************************************* - friend difference_type operator -(const reverse_iterator& lhs, const reverse_iterator& rhs) - { - return distance(lhs.base(), rhs.base()); - } - - //************************************************************************* - /// - operator for const_reverse_iterator - //************************************************************************* - friend difference_type operator -(const const_reverse_iterator& lhs, const const_reverse_iterator& rhs) - { - return distance(lhs.base(), rhs.base()); - } - protected: //************************************************************************* diff --git a/include/etl/deque.h b/include/etl/deque.h index 8a11063e..e38c939d 100644 --- a/include/etl/deque.h +++ b/include/etl/deque.h @@ -41,7 +41,6 @@ SOFTWARE. #include "debug_count.h" #include "algorithm.h" #include "type_traits.h" -#include "iterator.h" #include "placement_new.h" #include "initializer_list.h" @@ -258,17 +257,17 @@ namespace etl //*************************************************** iterator(const iterator& other) - : index(other.index), - p_deque(other.p_deque), - p_buffer(other.p_buffer) + : index(other.index) + , p_deque(other.p_deque) + , p_buffer(other.p_buffer) { } //*************************************************** iterator& operator =(const iterator& other) { - index = other.index; - p_deque = other.p_deque; + index = other.index; + p_deque = other.p_deque; p_buffer = other.p_buffer; return *this; @@ -352,6 +351,24 @@ namespace etl return &p_buffer[index]; } + //*************************************************** + reference operator [](size_t index) + { + iterator result(*this); + result += index; + + return *result; + } + + //*************************************************** + const_reference operator [](size_t index) const + { + iterator result(*this); + result += index; + + return *result; + } + //*************************************************** friend iterator operator +(const iterator& lhs, difference_type offset) { @@ -360,6 +377,14 @@ namespace etl return result; } + //*************************************************** + friend iterator operator +(difference_type offset, const iterator& lhs) + { + iterator result(lhs); + result += offset; + return result; + } + //*************************************************** friend iterator operator -(const iterator& lhs, difference_type offset) { @@ -596,6 +621,15 @@ namespace etl return &p_buffer[index]; } + //*************************************************** + reference operator [](size_t index) + { + iterator result(*this); + result += index; + + return *result; + } + //*************************************************** friend const_iterator operator +(const const_iterator& lhs, difference_type offset) { @@ -604,6 +638,14 @@ namespace etl return result; } + //*************************************************** + friend const_iterator operator +(difference_type offset, const const_iterator& lhs) + { + const_iterator result(lhs); + result += offset; + return result; + } + //*************************************************** friend const_iterator operator -(const const_iterator& lhs, difference_type offset) { @@ -2054,22 +2096,6 @@ namespace etl return distance(rhs, lhs); } - //************************************************************************* - /// - operator for reverse_iterator - //************************************************************************* - friend difference_type operator -(const reverse_iterator& lhs, const reverse_iterator& rhs) - { - return distance(lhs.base(), rhs.base()); - } - - //************************************************************************* - /// - operator for const_reverse_iterator - //************************************************************************* - friend difference_type operator -(const const_reverse_iterator& lhs, const const_reverse_iterator& rhs) - { - return distance(lhs.base(), rhs.base()); - } - //************************************************************************* /// Assignment operator. //************************************************************************* diff --git a/test/test_deque.cpp b/test/test_deque.cpp index 42db7899..de8981a0 100644 --- a/test/test_deque.cpp +++ b/test/test_deque.cpp @@ -29,6 +29,7 @@ SOFTWARE. #include "unit_test_framework.h" #include "etl/deque.h" +#include "etl/vector.h" #include "data.h" @@ -106,11 +107,20 @@ namespace //************************************************************************* TEST(test_constructor_fill) { - Compare_Data compare_data(SIZE, N999); - DataNDC data(SIZE, N999); + //Compare_Data compare_data(SIZE, N999); + //DataNDC data(SIZE, N999); - CHECK_EQUAL(compare_data.size(), data.size()); - CHECK(std::equal(compare_data.begin(), compare_data.end(), data.begin())); + etl::deque data; + using iter_type = etl::deque::iterator; + + bool b1 = std::random_access_iterator; + + bool b2 = std::sentinel_for; + + //bool b = std::equal(data.begin(), data.end(), data.begin()); + + //CHECK_EQUAL(compare_data.size(), data.size()); + //CHECK(std::equal(compare_data.begin(), compare_data.end(), data.begin())); } //************************************************************************* @@ -700,6 +710,72 @@ namespace CHECK(!(second < first)); } + //************************************************************************* + TEST(test_reverse_iterator_difference) + { + DataNDC data(SIZE, N0); + + DataNDC::reverse_iterator first = data.rbegin() + 1; + DataNDC::reverse_iterator second = data.rbegin() + 4; + + CHECK_EQUAL(-3, first - second); + CHECK_EQUAL( 3, second - first); + } + + //************************************************************************* + TEST(test_const_reverse_iterator_difference) + { + DataNDC data(SIZE, N0); + + DataNDC::const_reverse_iterator first = data.crbegin() + 1; + DataNDC::const_reverse_iterator second = data.crbegin() + 4; + + CHECK_EQUAL(-3, first - second); + CHECK_EQUAL( 3, second - first); + } + + //************************************************************************* + TEST(test_reverse_iterator_difference_rollover) + { + DataNDC data(SIZE, N0); + + data.pop_back(); + data.pop_back(); + data.pop_back(); + data.pop_back(); + data.push_front(N1); + data.push_front(N1); + data.push_front(N1); + data.push_front(N1); + + DataNDC::reverse_iterator first = data.rbegin() + 1; + DataNDC::reverse_iterator second = data.rbegin() + 4; + + CHECK_EQUAL(-3, first - second); + CHECK_EQUAL( 3, second - first); + } + + //************************************************************************* + TEST(test_const_reverse_iterator_difference_rollover) + { + DataNDC data(SIZE, N0); + + data.pop_back(); + data.pop_back(); + data.pop_back(); + data.pop_back(); + data.push_front(N1); + data.push_front(N1); + data.push_front(N1); + data.push_front(N1); + + DataNDC::const_reverse_iterator first = data.crbegin() + 1; + DataNDC::const_reverse_iterator second = data.crbegin() + 4; + + CHECK_EQUAL(-3, first - second); + CHECK_EQUAL( 3, second - first); + } + //************************************************************************* TEST(test_reverse_iterator_comparison) { From 37ac046068165a8cc8128fb8befe24235c450f6c Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Mon, 4 Mar 2024 18:41:33 +0000 Subject: [PATCH 3/3] Added fixes for deque operator-(). Removed redundant operator that was causing compile errors for C++20 # Conflicts: # test/test_deque.cpp --- test/test_deque.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/test/test_deque.cpp b/test/test_deque.cpp index de8981a0..41edb13c 100644 --- a/test/test_deque.cpp +++ b/test/test_deque.cpp @@ -107,20 +107,11 @@ namespace //************************************************************************* TEST(test_constructor_fill) { - //Compare_Data compare_data(SIZE, N999); - //DataNDC data(SIZE, N999); + Compare_Data compare_data(SIZE, N999); + DataNDC data(SIZE, N999); - etl::deque data; - using iter_type = etl::deque::iterator; - - bool b1 = std::random_access_iterator; - - bool b2 = std::sentinel_for; - - //bool b = std::equal(data.begin(), data.end(), data.begin()); - - //CHECK_EQUAL(compare_data.size(), data.size()); - //CHECK(std::equal(compare_data.begin(), compare_data.end(), data.begin())); + CHECK_EQUAL(compare_data.size(), data.size()); + CHECK(std::equal(compare_data.begin(), compare_data.end(), data.begin())); } //*************************************************************************