New tests for delegate

This commit is contained in:
John Wellbelove 2023-05-01 15:22:00 +01:00
parent 2eff7b396b
commit 7a131acc54
2 changed files with 95 additions and 0 deletions

View File

@ -33,6 +33,7 @@ SOFTWARE.
#if !defined(ETL_CRC_FORCE_CPP03_IMPLEMENTATION)
#include <vector>
#include <functional>
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<void(int, int)>::create<free_int>();
auto d2 = etl::delegate<void(int, int)>::create<Test, &Test::member_int>(test1);
auto d3 = etl::delegate<void(int, int)>::create<Test, &Test::member_int>(test2);
etl::delegate<void(int, int)> d4;
using Delegate_List = std::vector<etl::delegate<void(int, int)>>;
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<void(int, int)>::create<Test, &Test::member_int>(test2); // Same as d3
itr = std::find(delegate_list.begin(), delegate_list.end(), d4);
CHECK(*itr != d1);
CHECK(*itr != d2);
CHECK(*itr == d3);
}
};
}

View File

@ -33,6 +33,8 @@ SOFTWARE.
#include "etl/private/delegate_cpp03.h"
#include "etl/vector.h"
#include <vector>
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<void(int)>::create<free_int>();
auto d2 = etl_cpp03::delegate<void(int)>::create<Test, &Test::member_int>(test1);
auto d3 = etl_cpp03::delegate<void(int)>::create<Test, &Test::member_int>(test2);
etl_cpp03::delegate<void(int)> d4;
using Delegate_List = std::vector<etl_cpp03::delegate<void(int)>>;
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<void(int)>::create<Test, &Test::member_int>(test2); // Same as d3
itr = std::find(delegate_list.begin(), delegate_list.end(), d4);
CHECK(*itr != d1);
CHECK(*itr != d2);
CHECK(*itr == d3);
}
};
}