diff --git a/test/test_delegate.cpp b/test/test_delegate.cpp index 5d30cacf..46ab89e6 100644 --- a/test/test_delegate.cpp +++ b/test/test_delegate.cpp @@ -33,6 +33,7 @@ SOFTWARE. #if !defined(ETL_CRC_FORCE_CPP03_IMPLEMENTATION) +#include #include namespace @@ -1189,6 +1190,52 @@ namespace CHECK(function_called == FunctionCalled::Free_Int_Called); CHECK(parameter_correct); } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_delegate_identification) + { + Test test1; + Test test2; + + auto d1 = etl::delegate::create(); + auto d2 = etl::delegate::create(test1); + auto d3 = etl::delegate::create(test2); + + etl::delegate d4; + + using Delegate_List = std::vector>; + + Delegate_List delegate_list = { d1, d2, d3 }; + + Delegate_List::const_iterator itr; + + d4 = d1; + + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr == d1); + CHECK(*itr != d2); + CHECK(*itr != d3); + + d4 = d2; + + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr != d1); + CHECK(*itr == d2); + CHECK(*itr != d3); + + d4 = d3; + + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr != d1); + CHECK(*itr != d2); + CHECK(*itr == d3); + + d4 = etl::delegate::create(test2); // Same as d3 + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr != d1); + CHECK(*itr != d2); + CHECK(*itr == d3); + } }; } diff --git a/test/test_delegate_cpp03.cpp b/test/test_delegate_cpp03.cpp index c6e19aa7..903f872f 100644 --- a/test/test_delegate_cpp03.cpp +++ b/test/test_delegate_cpp03.cpp @@ -33,6 +33,8 @@ SOFTWARE. #include "etl/private/delegate_cpp03.h" #include "etl/vector.h" +#include + namespace { //***************************************************************************** @@ -748,5 +750,51 @@ namespace CHECK(function_called == FunctionCalled::Not_Called); CHECK(!parameter_correct); } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_delegate_identification) + { + Test test1; + Test test2; + + auto d1 = etl_cpp03::delegate::create(); + auto d2 = etl_cpp03::delegate::create(test1); + auto d3 = etl_cpp03::delegate::create(test2); + + etl_cpp03::delegate d4; + + using Delegate_List = std::vector>; + + Delegate_List delegate_list = { d1, d2, d3 }; + + Delegate_List::const_iterator itr; + + d4 = d1; + + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr == d1); + CHECK(*itr != d2); + CHECK(*itr != d3); + + d4 = d2; + + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr != d1); + CHECK(*itr == d2); + CHECK(*itr != d3); + + d4 = d3; + + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr != d1); + CHECK(*itr != d2); + CHECK(*itr == d3); + + d4 = etl_cpp03::delegate::create(test2); // Same as d3 + itr = std::find(delegate_list.begin(), delegate_list.end(), d4); + CHECK(*itr != d1); + CHECK(*itr != d2); + CHECK(*itr == d3); + } }; }