383 lines
10 KiB
C
383 lines
10 KiB
C
#include <api.h>
|
|
|
|
#define test_delta(prev, cur, field, value)\
|
|
test_int(value, (cur)->field - (prev)->field);\
|
|
(prev)->field = (cur)->field
|
|
|
|
void WorldInfo_get_tick(void) {
|
|
ecs_world_t *world = ecs_init();
|
|
|
|
const ecs_world_info_t *info = ecs_get_world_info(world);
|
|
test_assert(info != NULL);
|
|
|
|
test_int(info->frame_count_total, 0);
|
|
ecs_progress(world, 1);
|
|
test_int(info->frame_count_total, 1);
|
|
ecs_progress(world, 1);
|
|
test_int(info->frame_count_total, 2);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_table_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, table_count, 0);
|
|
|
|
ecs_add_id(world, e, c);
|
|
test_delta(&prev, cur, table_count, 1);
|
|
|
|
ecs_delete(world, c);
|
|
test_delta(&prev, cur, table_count, -1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_empty_table_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
|
|
ecs_add_id(world, e, c);
|
|
ecs_run_aperiodic(world, 0);
|
|
test_delta(&prev, cur, empty_table_count, 0);
|
|
|
|
ecs_delete(world, e);
|
|
ecs_run_aperiodic(world, 0);
|
|
test_delta(&prev, cur, empty_table_count, 1);
|
|
|
|
ecs_delete(world, c);
|
|
ecs_run_aperiodic(world, 0);
|
|
test_delta(&prev, cur, empty_table_count, -1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_tag_table_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, tag_table_count, 0);
|
|
|
|
ecs_add_id(world, e, c);
|
|
test_delta(&prev, cur, tag_table_count, 1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_trivial_table_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_COMPONENT(world, Position);
|
|
ECS_COMPONENT(world, Velocity);
|
|
|
|
/* Make it possible to delete components */
|
|
ecs_remove_pair(world, ecs_id(Position), EcsOnDelete, EcsWildcard);
|
|
ecs_remove_pair(world, ecs_id(Velocity), EcsOnDelete, EcsWildcard);
|
|
|
|
ecs_set_hooks(world, Velocity, {
|
|
.ctor = ecs_default_ctor
|
|
});
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t e1 = ecs_new_id(world);
|
|
test_delta(&prev, cur, trivial_table_count, 0);
|
|
|
|
ecs_add(world, e1, Position);
|
|
test_delta(&prev, cur, trivial_table_count, 1);
|
|
|
|
ecs_entity_t e2 = ecs_new_id(world);
|
|
test_delta(&prev, cur, trivial_table_count, 0);
|
|
|
|
ecs_add(world, e2, Velocity);
|
|
test_delta(&prev, cur, trivial_table_count, 0);
|
|
|
|
ecs_delete(world, ecs_id(Position));
|
|
test_delta(&prev, cur, trivial_table_count, -1);
|
|
|
|
ecs_delete(world, ecs_id(Velocity));
|
|
test_delta(&prev, cur, trivial_table_count, 0);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_table_record_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, table_record_count, 0);
|
|
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, table_record_count, 4);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev, cur, table_record_count, 5);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, table_record_count, -5);
|
|
|
|
ecs_delete(world, c_2);
|
|
test_delta(&prev, cur, table_record_count, -4);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_table_storage_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
ECS_COMPONENT(world, Position);
|
|
|
|
/* Make it possible to delete components */
|
|
ecs_remove_pair(world, ecs_id(Position), EcsOnDelete, EcsWildcard);
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, table_storage_count, 0);
|
|
|
|
ecs_add(world, e, Position);
|
|
test_delta(&prev, cur, table_storage_count, 1);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, table_storage_count, 0);
|
|
|
|
ecs_delete(world, ecs_id(Position));
|
|
test_delta(&prev, cur, table_storage_count, -1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_table_create_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, table_create_total, 0);
|
|
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, table_create_total, 1);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev, cur, table_create_total, 1);
|
|
|
|
ecs_delete(world, c_2);
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, table_create_total, 0);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_table_delete_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, table_delete_total, 0);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev, cur, table_delete_total, 0);
|
|
|
|
ecs_entity_t e2 = ecs_new_id(world);
|
|
ecs_add_id(world, e2, c_2);
|
|
test_delta(&prev, cur, table_delete_total, 0);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, table_delete_total, 2);
|
|
ecs_delete(world, c_2);
|
|
test_delta(&prev, cur, table_delete_total, 1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_id_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, id_count, 1);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev, cur, id_count, 1);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, id_count, -1);
|
|
|
|
ecs_delete(world, c_2);
|
|
test_delta(&prev, cur, id_count, -1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_id_tag_component_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ECS_COMPONENT(world, Position);
|
|
|
|
/* Make it possible to delete components */
|
|
ecs_remove_pair(world, ecs_id(Position), EcsOnDelete, EcsWildcard);
|
|
|
|
ecs_world_info_t prev_1 = *cur;
|
|
ecs_world_info_t prev_2 = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev_1, cur, tag_id_count, 0);
|
|
test_delta(&prev_2, cur, component_id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev_1, cur, tag_id_count, 1);
|
|
test_delta(&prev_2, cur, component_id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev_1, cur, tag_id_count, 1);
|
|
test_delta(&prev_2, cur, component_id_count, 0);
|
|
|
|
ecs_add(world, e, Position);
|
|
test_delta(&prev_1, cur, tag_id_count, 0);
|
|
test_delta(&prev_2, cur, component_id_count, 0);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev_1, cur, tag_id_count, -1);
|
|
test_delta(&prev_2, cur, component_id_count, 0);
|
|
|
|
ecs_delete(world, c_2);
|
|
test_delta(&prev_1, cur, tag_id_count, -1);
|
|
test_delta(&prev_2, cur, component_id_count, 0);
|
|
|
|
ecs_delete(world, ecs_id(Position));
|
|
test_delta(&prev_1, cur, tag_id_count, 0);
|
|
test_delta(&prev_2, cur, component_id_count, -1);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_id_pair_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, pair_id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, pair_id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev, cur, pair_id_count, 0);
|
|
|
|
ecs_add_pair(world, e, c_1, c_2);
|
|
test_delta(&prev, cur, pair_id_count, 1);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, pair_id_count, -1);
|
|
|
|
ecs_delete(world, c_2);
|
|
test_delta(&prev, cur, pair_id_count, 0);
|
|
|
|
ecs_fini(world);
|
|
}
|
|
|
|
void WorldInfo_id_wildcard_count(void) {
|
|
ecs_world_t *world = ecs_mini();
|
|
|
|
const ecs_world_info_t *cur = ecs_get_world_info(world);
|
|
test_assert(cur != NULL);
|
|
|
|
ecs_world_info_t prev = *cur;
|
|
|
|
ecs_entity_t c_1 = ecs_new_id(world);
|
|
ecs_entity_t c_2 = ecs_new_id(world);
|
|
ecs_entity_t c_3 = ecs_new_id(world);
|
|
ecs_entity_t e = ecs_new_id(world);
|
|
test_delta(&prev, cur, wildcard_id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_1);
|
|
test_delta(&prev, cur, wildcard_id_count, 0);
|
|
|
|
ecs_add_id(world, e, c_2);
|
|
test_delta(&prev, cur, wildcard_id_count, 0);
|
|
|
|
ecs_add_pair(world, e, c_1, c_2);
|
|
test_delta(&prev, cur, wildcard_id_count, 2);
|
|
|
|
ecs_add_pair(world, e, c_3, c_2);
|
|
test_delta(&prev, cur, wildcard_id_count, 1);
|
|
|
|
ecs_delete(world, c_1);
|
|
test_delta(&prev, cur, wildcard_id_count, -1);
|
|
|
|
ecs_delete(world, c_3);
|
|
test_delta(&prev, cur, wildcard_id_count, -1);
|
|
|
|
ecs_delete(world, c_2);
|
|
test_delta(&prev, cur, wildcard_id_count, -1);
|
|
|
|
ecs_fini(world);
|
|
}
|