From a398207e3d4d7a4e1e4df83fe169af806251f2be Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Sat, 7 Jan 2023 15:20:25 +0000 Subject: [PATCH] emplace_front, emplace_back updates --- include/etl/private/ivectorpointer.h | 4 +- test/test_vector.cpp | 64 ++++++++++---------- test/test_vector_external_buffer.cpp | 32 ++++++++++ test/test_vector_non_trivial.cpp | 54 ++++++++++------- test/test_vector_pointer.cpp | 9 +++ test/test_vector_pointer_external_buffer.cpp | 9 +++ 6 files changed, 116 insertions(+), 56 deletions(-) diff --git a/include/etl/private/ivectorpointer.h b/include/etl/private/ivectorpointer.h index c2cffa7f..ac1e0746 100644 --- a/include/etl/private/ivectorpointer.h +++ b/include/etl/private/ivectorpointer.h @@ -354,9 +354,11 @@ namespace etl /// If asserts or exceptions are enabled, emits vector_full if the vector is already full. ///\param value The value to add. //********************************************************************* - void emplace_back(parameter_t value) + reference emplace_back(parameter_t value) { base_t::emplace_back(value); + + return back(); } //************************************************************************* diff --git a/test/test_vector.cpp b/test/test_vector.cpp index 747ccdd3..ee79fba5 100644 --- a/test/test_vector.cpp +++ b/test/test_vector.cpp @@ -634,38 +634,6 @@ namespace CHECK(is_equal); } - //************************************************************************* - TEST_FIXTURE(SetupFixture, test_emplace_back) - { - Compare_Data compare_data; - Data data; - - for (int i = 0; i < int(SIZE); ++i) - { - compare_data.emplace_back(i); - } - - for (int i = 0; i < int(SIZE); ++i) - { - data.emplace_back(i); - } - - CHECK_EQUAL(compare_data.size(), data.size()); - - bool is_equal = std::equal(data.begin(), - data.end(), - compare_data.begin()); - - CHECK(is_equal); - } - - //************************************************************************* - TEST_FIXTURE(SetupFixture, test_emplace_back_return) - { - Data data; - CHECK_EQUAL(42, data.emplace_back(42)); - } - //************************************************************************* TEST_FIXTURE(SetupFixture, test_push_back_literal) { @@ -704,6 +672,38 @@ namespace CHECK_THROW(data.push_back(SIZE), etl::vector_full); } + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back) + { + Compare_Data compare_data; + Data data; + + for (int i = 0; i < int(SIZE); ++i) + { + compare_data.emplace_back(i); + } + + for (int i = 0; i < int(SIZE); ++i) + { + data.emplace_back(i); + } + + CHECK_EQUAL(compare_data.size(), data.size()); + + bool is_equal = std::equal(data.begin(), + data.end(), + compare_data.begin()); + + CHECK(is_equal); + } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back_return) + { + Data data; + CHECK_EQUAL(42, data.emplace_back(42)); + } + //************************************************************************* TEST_FIXTURE(SetupFixture, test_pop_back) { diff --git a/test/test_vector_external_buffer.cpp b/test/test_vector_external_buffer.cpp index 117bcdb1..ab5e816e 100644 --- a/test/test_vector_external_buffer.cpp +++ b/test/test_vector_external_buffer.cpp @@ -685,6 +685,38 @@ namespace CHECK_THROW(data.push_back(SIZE), etl::vector_full); } + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back) + { + Compare_Data compare_data; + Data data(buffer1, SIZE); + + for (int i = 0; i < int(SIZE); ++i) + { + compare_data.emplace_back(i); + } + + for (int i = 0; i < int(SIZE); ++i) + { + data.emplace_back(i); + } + + CHECK_EQUAL(compare_data.size(), data.size()); + + bool is_equal = std::equal(data.begin(), + data.end(), + compare_data.begin()); + + CHECK(is_equal); + } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back_return) + { + Data data(buffer1, SIZE); + CHECK_EQUAL(42, data.emplace_back(42)); + } + //************************************************************************* TEST_FIXTURE(SetupFixture, test_pop_back) { diff --git a/test/test_vector_non_trivial.cpp b/test/test_vector_non_trivial.cpp index 3b4efc27..7bbcdebf 100644 --- a/test/test_vector_non_trivial.cpp +++ b/test/test_vector_non_trivial.cpp @@ -662,29 +662,6 @@ namespace CHECK_THROW(data.push_back(NDC("Z")), etl::vector_full); } - //************************************************************************* - TEST_FIXTURE(SetupFixture, test_emplace_back) - { - CompareDataNDC compare_data; - DataNDC data; - - for (size_t i = 0UL; i < SIZE; ++i) - { - std::string value(" "); - value[0] = char('A' + i); - compare_data.emplace_back(value, i); - data.emplace_back(value, i); - } - - CHECK_EQUAL(compare_data.size(), data.size()); - - bool is_equal = std::equal(data.begin(), - data.end(), - compare_data.begin()); - - CHECK(is_equal); - } - //************************************************************************* TEST_FIXTURE(SetupFixture, test_push_back_unique_ptr) { @@ -711,6 +688,37 @@ namespace CHECK_EQUAL(4, *data[3]); } + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back) + { + CompareDataNDC compare_data; + DataNDC data; + + for (size_t i = 0UL; i < SIZE; ++i) + { + std::string value(" "); + value[0] = char('A' + i); + compare_data.emplace_back(value, i); + data.emplace_back(value, i); + } + + CHECK_EQUAL(compare_data.size(), data.size()); + + bool is_equal = std::equal(data.begin(), + data.end(), + compare_data.begin()); + + CHECK(is_equal); + } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back_return) + { + DataNDC data; + + CHECK_EQUAL(NDC("A", 42), data.emplace_back("A", 42)); + } + //************************************************************************* TEST_FIXTURE(SetupFixture, test_insert_int) { diff --git a/test/test_vector_pointer.cpp b/test/test_vector_pointer.cpp index d6aad71d..76a67ab3 100644 --- a/test/test_vector_pointer.cpp +++ b/test/test_vector_pointer.cpp @@ -1057,6 +1057,15 @@ namespace CHECK(is_equal); } + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back_return) + { + Data data; + int d = 42; + + CHECK_EQUAL(&d, data.emplace_back(&d)); + } + //************************************************************************* TEST_FIXTURE(SetupFixture, test_pop_back) { diff --git a/test/test_vector_pointer_external_buffer.cpp b/test/test_vector_pointer_external_buffer.cpp index edad3ac9..db4b9910 100644 --- a/test/test_vector_pointer_external_buffer.cpp +++ b/test/test_vector_pointer_external_buffer.cpp @@ -1043,6 +1043,15 @@ namespace CHECK(is_equal); } + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_emplace_back_return) + { + Data data(buffer1, SIZE); + int d = 42; + + CHECK_EQUAL(&d, data.emplace_back(&d)); + } + //************************************************************************* TEST_FIXTURE(SetupFixture, test_pop_back) {