Files
PixelDefense/engine/libs/flecs/test/api/src/Clone.c

351 lines
8.7 KiB
C

#include <api.h>
void Clone_empty(void) {
ecs_world_t *world = ecs_mini();
ecs_entity_t e1 = ecs_new(world, 0);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, false);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(!ecs_get_type(world, e1));
test_assert(!ecs_get_type(world, e2));
ecs_fini(world);
}
void Clone_empty_w_value(void) {
ecs_world_t *world = ecs_mini();
ecs_entity_t e1 = ecs_new(world, 0);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, true);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(!ecs_get_type(world, e1));
test_assert(!ecs_get_type(world, e2));
ecs_fini(world);
}
void Clone_null(void) {
install_test_abort();
ecs_world_t *world = ecs_mini();
test_expect_abort();
ecs_clone(world, 0, 0, false);
}
void Clone_null_w_value(void) {
install_test_abort();
ecs_world_t *world = ecs_mini();
test_expect_abort();
ecs_clone(world, 0, 0, true);
}
void Clone_1_component(void) {
ecs_world_t *world = ecs_mini();
ECS_COMPONENT(world, Position);
ecs_entity_t e1 = ecs_new(world, Position);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, false);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
test_assert(ecs_get(world, e1, Position) !=
ecs_get(world, e2, Position));
ecs_fini(world);
}
void Clone_2_component(void) {
ecs_world_t *world = ecs_mini();
ECS_COMPONENT(world, Position);
ECS_COMPONENT(world, Velocity);
ECS_ENTITY(world, e1, Position, Velocity);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, false);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
test_assert(ecs_get(world, e1, Position) !=
ecs_get(world, e2, Position));
test_assert(ecs_has(world, e1, Velocity));
test_assert(ecs_has(world, e2, Velocity));
test_assert(ecs_get(world, e1, Velocity) !=
ecs_get(world, e2, Velocity));
ecs_fini(world);
}
void Clone_3_component(void) {
ecs_world_t *world = ecs_mini();
ECS_COMPONENT(world, Position);
ECS_COMPONENT(world, Velocity);
ECS_COMPONENT(world, Mass);
ECS_ENTITY(world, e1, Position, Velocity, Mass);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, false);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
test_assert(ecs_get(world, e1, Position) !=
ecs_get(world, e2, Position));
test_assert(ecs_has(world, e1, Velocity));
test_assert(ecs_has(world, e2, Velocity));
test_assert(ecs_get(world, e1, Velocity) !=
ecs_get(world, e2, Velocity));
test_assert(ecs_has(world, e1, Mass));
test_assert(ecs_has(world, e2, Mass));
test_assert(ecs_get(world, e1, Mass) !=
ecs_get(world, e2, Mass));
ecs_fini(world);
}
void Clone_1_component_w_value(void) {
ecs_world_t *world = ecs_mini();
ECS_COMPONENT(world, Position);
ecs_entity_t e1 = ecs_new(world, 0);
test_assert(e1 != 0);
ecs_set(world, e1, Position, {10, 20});
ecs_entity_t e2 = ecs_clone(world, 0, e1, true);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
const Position *p_1 = ecs_get(world, e1, Position);
test_assert(p_1 != NULL);
test_int(p_1->x, 10);
test_int(p_1->y, 20);
const Position *p_2 = ecs_get(world, e2, Position);
test_assert(p_2 != NULL);
test_assert(p_1 != p_2);
test_int(p_2->x, 10);
test_int(p_2->y, 20);
ecs_fini(world);
}
void Clone_2_component_w_value(void) {
ecs_world_t *world = ecs_mini();
ECS_COMPONENT(world, Position);
ECS_COMPONENT(world, Velocity);
ecs_entity_t e1 = ecs_new(world, 0);
test_assert(e1 != 0);
ecs_set(world, e1, Position, {10, 20});
ecs_set(world, e1, Velocity, {30, 40});
ecs_entity_t e2 = ecs_clone(world, 0, e1, true);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
test_assert(ecs_has(world, e1, Velocity));
test_assert(ecs_has(world, e2, Velocity));
const Position *p_1 = ecs_get(world, e1, Position);
test_assert(p_1 != NULL);
test_int(p_1->x, 10);
test_int(p_1->y, 20);
const Position *p_2 = ecs_get(world, e2, Position);
test_assert(p_2 != NULL);
test_assert(p_1 != p_2);
test_int(p_2->x, 10);
test_int(p_2->y, 20);
const Velocity *v_1 = ecs_get(world, e1, Velocity);
test_assert(v_1 != NULL);
test_int(v_1->x, 30);
test_int(v_1->y, 40);
const Velocity *v_2 = ecs_get(world, e2, Velocity);
test_assert(v_2 != NULL);
test_assert(v_1 != v_2);
test_int(v_2->x, 30);
test_int(v_2->y, 40);
ecs_fini(world);
}
void Clone_3_component_w_value(void) {
ecs_world_t *world = ecs_mini();
ECS_COMPONENT(world, Position);
ECS_COMPONENT(world, Velocity);
ECS_COMPONENT(world, Mass);
ecs_entity_t e1 = ecs_new(world, 0);
test_assert(e1 != 0);
ecs_set(world, e1, Position, {10, 20});
ecs_set(world, e1, Velocity, {30, 40});
ecs_set(world, e1, Mass, {50});
ecs_entity_t e2 = ecs_clone(world, 0, e1, true);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
test_assert(ecs_has(world, e1, Velocity));
test_assert(ecs_has(world, e2, Velocity));
test_assert(ecs_has(world, e1, Mass));
test_assert(ecs_has(world, e2, Mass));
const Position *p_1 = ecs_get(world, e1, Position);
test_assert(p_1 != NULL);
test_int(p_1->x, 10);
test_int(p_1->y, 20);
const Position *p_2 = ecs_get(world, e2, Position);
test_assert(p_2 != NULL);
test_assert(p_1 != p_2);
test_int(p_2->x, 10);
test_int(p_2->y, 20);
const Velocity *v_1 = ecs_get(world, e1, Velocity);
test_assert(v_1 != NULL);
test_int(v_1->x, 30);
test_int(v_1->y, 40);
const Velocity *v_2 = ecs_get(world, e2, Velocity);
test_assert(v_2 != NULL);
test_assert(v_1 != v_2);
test_int(v_2->x, 30);
test_int(v_2->y, 40);
const Mass *m_1 = ecs_get(world, e1, Mass);
test_assert(m_1 != NULL);
test_int(*m_1, 50);
const Mass *m_2 = ecs_get(world, e2, Mass);
test_assert(m_2 != NULL);
test_assert(m_1 != m_2);
test_int(*m_2, 50);
ecs_fini(world);
}
void Clone_tag(void) {
ecs_world_t *world = ecs_mini();
ECS_ENTITY(world, Tag, 0);
ecs_entity_t e1 = ecs_new_w_id(world, Tag);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, false);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has_id(world, e1, Tag));
test_assert(ecs_has_id(world, e2, Tag));
ecs_fini(world);
}
void Clone_tag_w_value(void) {
ecs_world_t *world = ecs_mini();
ECS_ENTITY(world, Tag, 0);
ecs_entity_t e1 = ecs_new_w_id(world, Tag);
test_assert(e1 != 0);
ecs_entity_t e2 = ecs_clone(world, 0, e1, true);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has_id(world, e1, Tag));
test_assert(ecs_has_id(world, e2, Tag));
ecs_fini(world);
}
void Clone_1_tag_1_component(void) {
ecs_world_t *world = ecs_mini();
ECS_ENTITY(world, Tag, 0);
ECS_COMPONENT(world, Position);
ECS_ENTITY(world, e1, Position, Tag);
ecs_set(world, e1, Position, {10, 20});
ecs_entity_t e2 = ecs_clone(world, 0, e1, false);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has_id(world, e1, Tag));
test_assert(ecs_has_id(world, e2, Tag));
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
ecs_fini(world);
}
void Clone_1_tag_1_component_w_value(void) {
ecs_world_t *world = ecs_mini();
ECS_ENTITY(world, Tag, 0);
ECS_COMPONENT(world, Position);
ecs_entity_t e1 = ecs_new_id(world);
ecs_add(world, e1, Tag);
ecs_set(world, e1, Position, {10, 20});
ecs_entity_t e2 = ecs_clone(world, 0, e1, true);
test_assert(e2 != 0);
test_assert(e1 != e2);
test_assert(ecs_has_id(world, e1, Tag));
test_assert(ecs_has_id(world, e2, Tag));
test_assert(ecs_has(world, e1, Position));
test_assert(ecs_has(world, e2, Position));
const Position *p = ecs_get(world, e2, Position);
test_assert(p != NULL);
test_int(p->x, 10);
test_int(p->y, 20);
ecs_fini(world);
}