Files
PixelDefense/engine/libs/flecs/test/addons/src/Tasks.c

151 lines
3.2 KiB
C

#include <addons.h>
void Task(ecs_iter_t *it) {
probe_iter(it);
}
void Tasks_no_components(void) {
ecs_world_t *world = ecs_init();
ECS_SYSTEM(world, Task, EcsOnUpdate, 0);
Probe ctx = {0};
ecs_set_ctx(world, &ctx, NULL);
ecs_progress(world, 1);
test_int(ctx.count, 0);
test_int(ctx.invoked, 1);
test_int(ctx.term_count, 0);
ecs_fini(world);
}
void Tasks_one_tag(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Foo);
ECS_SYSTEM(world, Task, EcsOnUpdate, Foo(Task));
Probe ctx = {0};
ecs_set_ctx(world, &ctx, NULL);
ecs_progress(world, 1);
test_int(ctx.count, 0);
test_int(ctx.invoked, 1);
test_int(ctx.term_count, 1);
test_int(ctx.c[0][0], Foo);
ecs_fini(world);
}
void Tasks_from_system(void) {
ecs_world_t *world = ecs_init();
ECS_COMPONENT(world, Position);
ECS_SYSTEM(world, Task, EcsOnUpdate, Position(Task));
Probe ctx = {0};
ecs_set_ctx(world, &ctx, NULL);
ecs_progress(world, 1);
test_int(ctx.count, 0);
test_int(ctx.invoked, 1);
test_int(ctx.term_count, 1);
test_int(ctx.c[0][0], ecs_id(Position));
ecs_fini(world);
}
static int phase_counter = 0;
static
void OnLoadTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 0);
phase_counter ++;
}
static
void PostLoadTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 1);
phase_counter ++;
}
static
void PreUpdateTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 2);
phase_counter ++;
}
static
void OnUpdateTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 3);
phase_counter ++;
}
static
void OnValidateTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 4);
phase_counter ++;
}
static
void PostUpdateTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 5);
phase_counter ++;
}
static
void PreStoreTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 6);
phase_counter ++;
}
static
void OnStoreTask(ecs_iter_t *it) {
test_assert(it->entities == NULL);
test_int(it->count, 0);
test_int(phase_counter, 7);
phase_counter ++;
}
void Tasks_tasks_in_phases(void) {
ecs_world_t *world = ecs_init();
ECS_COMPONENT(world, Position);
ECS_SYSTEM(world, OnLoadTask, EcsOnLoad, Position());
ECS_SYSTEM(world, PostLoadTask, EcsPostLoad, Position());
ECS_SYSTEM(world, PreUpdateTask, EcsPreUpdate, Position());
ECS_SYSTEM(world, OnUpdateTask, EcsOnUpdate, Position());
ECS_SYSTEM(world, OnValidateTask, EcsOnValidate, Position());
ECS_SYSTEM(world, PostUpdateTask, EcsPostUpdate, Position());
ECS_SYSTEM(world, PreStoreTask, EcsPreStore, Position());
ECS_SYSTEM(world, OnStoreTask, EcsOnStore, Position());
ecs_progress(world, 1);
test_int(phase_counter, 8);
ecs_fini(world);
}