psemek/libs/ecs/tests/callback.cpp
2023-12-18 12:45:42 +03:00

85 lines
1.7 KiB
C++

#include <psemek/test/test.hpp>
#include <psemek/ecs/container.hpp>
#include <psemek/ecs/declare_uuid.hpp>
using namespace psemek;
using namespace psemek::ecs;
namespace
{
struct component_1
{
int value;
psemek_ecs_declare_uuid("component_1")
};
struct component_2
{
int value;
psemek_ecs_declare_uuid("component_2")
};
}
test_case(ecs_callback_constructor_create)
{
container container;
int value = 0;
container.constructor<component_1>([&value](component_1 const & c1){
value = c1.value;
});
container.create(component_1{10});
expect_equal(value, 10);
container.create(component_1{20});
expect_equal(value, 20);
container.create(component_2{100});
expect_equal(value, 20);
container.create();
expect_equal(value, 20);
container.create(component_1{30});
expect_equal(value, 30);
container.create(component_1{40}, component_2{200});
expect_equal(value, 40);
}
test_case(ecs_callback_destructor_destroy)
{
container container;
int value = 0;
container.destructor<component_1>([&value](component_1 const & c1){
value = c1.value;
});
auto h1 = container.create(component_1{10});
auto h2 = container.create(component_1{20});
auto h3 = container.create(component_2{100});
auto h4 = container.create();
auto h5 = container.create(component_1{30});
auto h6 = container.create(component_1{40}, component_2{200});
expect_equal(value, 0);
container.destroy(h1);
expect_equal(value, 10);
container.destroy(h2);
expect_equal(value, 20);
container.destroy(h3);
expect_equal(value, 20);
container.destroy(h4);
expect_equal(value, 20);
container.destroy(h5);
expect_equal(value, 30);
container.destroy(h6);
expect_equal(value, 40);
}