From ea74d2f02f32452c059109fbbab56953fbf2f3e4 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Thu, 15 Feb 2024 10:50:45 +0000 Subject: [PATCH] etl::optional C++ compatibility updates --- include/etl/optional.h | 22 ++--- test/test_optional.cpp | 155 ++++++++++++++++---------------- test/vs2022/etl.vcxproj.filters | 30 +++++-- 3 files changed, 114 insertions(+), 93 deletions(-) diff --git a/include/etl/optional.h b/include/etl/optional.h index 7b55695f..c9901e13 100644 --- a/include/etl/optional.h +++ b/include/etl/optional.h @@ -138,7 +138,7 @@ namespace etl /// Copy constructor. //*************************************************************************** ETL_CONSTEXPR20_STL - optional_impl(const optional_impl& other) + optional_impl(const optional_impl& other) { if (other.has_value()) { @@ -152,7 +152,7 @@ namespace etl /// Move constructor. //*************************************************************************** ETL_CONSTEXPR20_STL - optional_impl(optional_impl&& other) + optional_impl(optional_impl&& other) { if (other.has_value()) { @@ -208,7 +208,7 @@ namespace etl /// Assignment operator from optional_impl. //*************************************************************************** ETL_CONSTEXPR20_STL - optional_impl& operator =(const optional_impl& other) + optional_impl& operator =(const optional_impl& other) { if (this != &other) { @@ -711,7 +711,7 @@ namespace etl /// Copy constructor. //*************************************************************************** ETL_CONSTEXPR14 - optional_impl(const optional_impl& other) + optional_impl(const optional_impl& other) { if (other.has_value()) { @@ -772,7 +772,7 @@ namespace etl /// Assignment operator from optional_impl. //*************************************************************************** ETL_CONSTEXPR14 - optional_impl& operator =(const optional_impl& other) + optional_impl& operator =(const optional_impl& other) { if (this != &other) { @@ -1277,7 +1277,7 @@ namespace etl template ETL_CONSTEXPR14 optional(etl::nullopt_t) - : impl_t(etl::nullopt_t{}) + : impl_t(etl::nullopt) { } @@ -1287,7 +1287,7 @@ namespace etl template ETL_CONSTEXPR20_STL optional(etl::nullopt_t) - : impl_t(etl::nullopt_t{}) + : impl_t(etl::nullopt) { } #else @@ -1295,7 +1295,7 @@ namespace etl /// Constructor with nullopt. //*************************************************************************** optional(etl::nullopt_t) - : impl_t(etl::nullopt_t{}) + : impl_t(etl::nullopt) { } #endif @@ -1415,7 +1415,7 @@ namespace etl ETL_CONSTEXPR14 optional& operator =(etl::nullopt_t) { - impl_t::operator=(etl::nullopt_t{}); + impl_t::operator=(etl::nullopt); return *this; } @@ -1427,7 +1427,7 @@ namespace etl ETL_CONSTEXPR20_STL optional& operator =(etl::nullopt_t) { - impl_t::operator=(etl::nullopt_t{}); + impl_t::operator=(etl::nullopt); return *this; } @@ -1437,7 +1437,7 @@ namespace etl //*************************************************************************** optional& operator =(etl::nullopt_t) { - impl_t::operator=(etl::nullopt_t{}); + impl_t::operator=(etl::nullopt); return *this; } diff --git a/test/test_optional.cpp b/test/test_optional.cpp index f9ffdba7..61e68672 100644 --- a/test/test_optional.cpp +++ b/test/test_optional.cpp @@ -53,6 +53,7 @@ std::ostream& operator << (std::ostream& os, const etl::optional& data) namespace { +#include "etl/private/diagnostic_unused_function_push.h" //************************************************************************* struct NonTrivial { @@ -65,21 +66,6 @@ namespace return lhs.a < rhs.a; } - constexpr friend bool operator <=(const NonTrivial& lhs, const NonTrivial& rhs) - { - return lhs.a <= rhs.a; - } - - constexpr friend bool operator >(const NonTrivial& lhs, const NonTrivial& rhs) - { - return lhs.a > rhs.a; - } - - constexpr friend bool operator >=(const NonTrivial& lhs, const NonTrivial& rhs) - { - return lhs.a >= rhs.a; - } - constexpr friend bool operator ==(const NonTrivial& lhs, const NonTrivial& rhs) { return lhs.a == rhs.a; @@ -87,6 +73,7 @@ namespace int a; }; +#include "etl/private/diagnostic_pop.h" SUITE(test_optional) { @@ -294,9 +281,9 @@ namespace constexpr bool eq2 = (data1 == etl::nullopt); constexpr bool eq3 = (etl::nullopt == data1); - CHECK(eq1); - CHECK(eq2); - CHECK(eq3); + CHECK_FALSE(eq1); + CHECK_FALSE(eq2); + CHECK_FALSE(eq3); } #endif @@ -311,9 +298,9 @@ namespace constexpr bool eq2 = (data1 == etl::nullopt); constexpr bool eq3 = (etl::nullopt == data1); - CHECK(eq1); - CHECK(eq2); - CHECK(eq3); + CHECK_FALSE(eq1); + CHECK_FALSE(eq2); + CHECK_FALSE(eq3); } #endif @@ -361,13 +348,13 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool eq1 = (data1 == data2); - constexpr bool eq2 = (data1 == etl::nullopt); - constexpr bool eq3 = (etl::nullopt == data1); + constexpr bool eq1 = (data1 != data2); + constexpr bool eq2 = (data1 != etl::nullopt); + constexpr bool eq3 = (etl::nullopt != data1); - CHECK(eq1); - CHECK(eq2); - CHECK(eq3); + CHECK_TRUE(eq1); + CHECK_TRUE(eq2); + CHECK_TRUE(eq3); } #endif @@ -382,9 +369,9 @@ namespace constexpr bool neq2 = (data1 != etl::nullopt); constexpr bool neq3 = (etl::nullopt != data1); - CHECK(neq1); - CHECK(neq2); - CHECK(neq3); + CHECK_TRUE(neq1); + CHECK_TRUE(neq2); + CHECK_TRUE(neq3); } #endif @@ -431,12 +418,14 @@ namespace constexpr etl::optional data2(2); constexpr bool lt1 = (data1 < data2); - constexpr bool lt2 = (data1 < etl::nullopt); - constexpr bool lt3 = (etl::nullopt < data1); + constexpr bool lt2 = (data2 < data1); + constexpr bool lt3 = (data1 < etl::nullopt); + constexpr bool lt4 = (etl::nullopt < data1); - CHECK(lt1); - CHECK(lt2); - CHECK(lt3); + CHECK_TRUE(lt1); + CHECK_FALSE(lt2); + CHECK_FALSE(lt3); + CHECK_TRUE(lt4); } #endif @@ -448,12 +437,14 @@ namespace constexpr etl::optional data2(2); constexpr bool lt1 = (data1 < data2); - constexpr bool lt2 = (data1 < etl::nullopt); - constexpr bool lt3 = (etl::nullopt < data1); + constexpr bool lt2 = (data2 < data1); + constexpr bool lt3 = (data1 < etl::nullopt); + constexpr bool lt4 = (etl::nullopt < data1); - CHECK(lt1); - CHECK(lt2); - CHECK(lt3); + CHECK_TRUE(lt1); + CHECK_FALSE(lt2); + CHECK_FALSE(lt3); + CHECK_TRUE(lt4); } #endif @@ -498,13 +489,15 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool lteq1 = (data1 <= data2); - constexpr bool lteq2 = (data1 <= etl::nullopt); - constexpr bool lteq3 = (etl::nullopt <= data1); + constexpr bool lt1 = (data1 <= data2); + constexpr bool lt2 = (data2 <= data1); + constexpr bool lt3 = (data1 <= etl::nullopt); + constexpr bool lt4 = (etl::nullopt <= data1); - CHECK(lteq1); - CHECK(lteq2); - CHECK(lteq3); + CHECK_TRUE(lt1); + CHECK_FALSE(lt2); + CHECK_FALSE(lt3); + CHECK_TRUE(lt4); } #endif @@ -515,13 +508,15 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool lteq1 = (data1 <= data2); - constexpr bool lteq2 = (data1 <= etl::nullopt); - constexpr bool lteq3 = (etl::nullopt <= data1); + constexpr bool lt1 = (data1 <= data2); + constexpr bool lt2 = (data2 <= data1); + constexpr bool lt3 = (data1 <= etl::nullopt); + constexpr bool lt4 = (etl::nullopt <= data1); - CHECK(lteq1); - CHECK(lteq2); - CHECK(lteq3); + CHECK_TRUE(lt1); + CHECK_FALSE(lt2); + CHECK_FALSE(lt3); + CHECK_TRUE(lt4); } #endif @@ -564,13 +559,15 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool gteq1 = (data1 > data2); - constexpr bool gteq2 = (data1 > etl::nullopt); - constexpr bool gteq3 = (etl::nullopt > data1); + constexpr bool gt1 = (data1 > data2); + constexpr bool gt2 = (data2 > data1); + constexpr bool gt3 = (data1 > etl::nullopt); + constexpr bool gt4 = (etl::nullopt > data1); - CHECK(gteq1); - CHECK(gteq2); - CHECK(gteq3); + CHECK_FALSE(gt1); + CHECK_TRUE(gt2); + CHECK_TRUE(gt3); + CHECK_FALSE(gt4); } #endif @@ -581,13 +578,15 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool gteq1 = (data1 > data2); - constexpr bool gteq2 = (data1 > etl::nullopt); - constexpr bool gteq3 = (etl::nullopt > data1); + constexpr bool gt1 = (data1 > data2); + constexpr bool gt2 = (data2 > data1); + constexpr bool gt3 = (data1 > etl::nullopt); + constexpr bool gt4 = (etl::nullopt > data1); - CHECK(gteq1); - CHECK(gteq2); - CHECK(gteq3); + CHECK_FALSE(gt1); + CHECK_TRUE(gt2); + CHECK_TRUE(gt3); + CHECK_FALSE(gt4); } #endif @@ -632,13 +631,15 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool gteq1 = (data1 >= data2); - constexpr bool gteq2 = (data1 >= etl::nullopt); - constexpr bool gteq3 = (etl::nullopt >= data1); + constexpr bool gte1 = (data1 >= data2); + constexpr bool gte2 = (data2 >= data1); + constexpr bool gte3 = (data1 >= etl::nullopt); + constexpr bool gte4 = (etl::nullopt >= data1); - CHECK(gteq1); - CHECK(gteq2); - CHECK(gteq3); + CHECK_FALSE(gte1); + CHECK_TRUE(gte2); + CHECK_TRUE(gte3); + CHECK_FALSE(gte4); } #endif @@ -649,13 +650,15 @@ namespace constexpr etl::optional data1(1); constexpr etl::optional data2(2); - constexpr bool gteq1 = (data1 >= data2); - constexpr bool gteq2 = (data1 >= etl::nullopt); - constexpr bool gteq3 = (etl::nullopt >= data1); + constexpr bool gte1 = (data1 >= data2); + constexpr bool gte2 = (data2 >= data1); + constexpr bool gte3 = (data1 >= etl::nullopt); + constexpr bool gte4 = (etl::nullopt >= data1); - CHECK(gteq1); - CHECK(gteq2); - CHECK(gteq3); + CHECK_FALSE(gte1); + CHECK_TRUE(gte2); + CHECK_TRUE(gte3); + CHECK_FALSE(gte4); } #endif diff --git a/test/vs2022/etl.vcxproj.filters b/test/vs2022/etl.vcxproj.filters index 2adfa862..5c457a21 100644 --- a/test/vs2022/etl.vcxproj.filters +++ b/test/vs2022/etl.vcxproj.filters @@ -3340,12 +3340,6 @@ Resource Files\CI\Appveyor - - Resource Files\CI\Github - - - Resource Files\CI\Github - Resource Files @@ -3412,6 +3406,30 @@ Tests\Scripts + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github + + + Resource Files\CI\Github +