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

401 lines
11 KiB
C

#include <addons.h>
void RulesScopes_term_w_not_scope_1_term(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_TAG(world, TagA);
ecs_entity_t parent_1 = ecs_new(world, Root);
ecs_add(world, parent_1, TagA);
ecs_entity_t parent_2 = ecs_new(world, Root);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ TagA }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_2, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_2_terms(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_TAG(world, TagA);
ECS_TAG(world, TagB);
ecs_entity_t parent_1 = ecs_new(world, Root);
ecs_add(world, parent_1, TagA);
ecs_entity_t parent_2 = ecs_new(world, Root);
ecs_add(world, parent_2, TagB);
ecs_entity_t parent_3 = ecs_new(world, Root);
ecs_add(world, parent_3, TagA);
ecs_add(world, parent_3, TagB);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ TagA, TagB }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_1, it.entities[0]);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_2, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_1_term_w_not(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_TAG(world, TagA);
ecs_entity_t parent_1 = ecs_new(world, Root);
ecs_add(world, parent_1, TagA);
ecs_new(world, Root);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ !TagA }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_1, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_2_terms_w_not(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_TAG(world, TagA);
ECS_TAG(world, TagB);
ecs_entity_t parent_1 = ecs_new(world, Root);
ecs_add(world, parent_1, TagA);
ecs_entity_t parent_2 = ecs_new(world, Root);
ecs_add(world, parent_2, TagB);
ecs_entity_t parent_3 = ecs_new(world, Root);
ecs_add(world, parent_3, TagA);
ecs_add(world, parent_3, TagB);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ TagA, !TagB }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_2, it.entities[0]);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_3, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_1_term_w_var(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ecs_entity_t parent_1 = ecs_new(world, Root);
ecs_new_w_pair(world, EcsChildOf, parent_1);
ecs_new_w_pair(world, EcsChildOf, parent_1);
ecs_entity_t parent_2 = ecs_new(world, Root);
ecs_new_w_pair(world, EcsChildOf, parent_2);
ecs_entity_t parent_3 = ecs_new(world, Root);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ ChildOf($child, $this) }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_3, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_2_terms_w_var(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_COMPONENT(world, Position);
ecs_entity_t parent_0 = ecs_new(world, Root);
{
ecs_entity_t child_1 = ecs_new_w_pair(world, EcsChildOf, parent_0);
ecs_set(world, child_1, Position, {10, 20});
ecs_entity_t child_2 = ecs_new_w_pair(world, EcsChildOf, parent_0);
ecs_set(world, child_2, Position, {10, 20});
}
ecs_entity_t parent_1 = ecs_new(world, Root);
{
ecs_entity_t child_1 = ecs_new_w_pair(world, EcsChildOf, parent_1);
ecs_set(world, child_1, Position, {10, 20});
ecs_new_w_pair(world, EcsChildOf, parent_1);
}
ecs_entity_t parent_2 = ecs_new(world, Root);
{
ecs_new_w_pair(world, EcsChildOf, parent_2);
ecs_new_w_pair(world, EcsChildOf, parent_2);
}
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ ChildOf($child, $this), Position($child) }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_2, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_1_term_w_not_w_var(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ecs_entity_t parent_0 = ecs_new(world, Root);
{
ecs_new_w_pair(world, EcsChildOf, parent_0);
ecs_new_w_pair(world, EcsChildOf, parent_0);
}
ecs_new(world, Root);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ !ChildOf($child, $this) }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_0, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_2_terms_w_not_w_var(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_COMPONENT(world, Position);
ecs_entity_t parent_0 = ecs_new(world, Root);
{
ecs_entity_t child_1 = ecs_new_w_pair(world, EcsChildOf, parent_0);
ecs_set(world, child_1, Position, {10, 20});
ecs_entity_t child_2 = ecs_new_w_pair(world, EcsChildOf, parent_0);
ecs_set(world, child_2, Position, {10, 20});
}
ecs_entity_t parent_1 = ecs_new(world, Root);
{
ecs_entity_t child_1 = ecs_new_w_pair(world, EcsChildOf, parent_1);
ecs_set(world, child_1, Position, {10, 20});
ecs_new_w_pair(world, EcsChildOf, parent_1);
}
ecs_entity_t parent_2 = ecs_new(world, Root);
{
ecs_new_w_pair(world, EcsChildOf, parent_2);
ecs_new_w_pair(world, EcsChildOf, parent_2);
}
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ ChildOf($child, $this), !Position($child) }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(parent_0, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_2_terms_w_or(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_TAG(world, TagA);
ECS_TAG(world, TagB);
ecs_entity_t e1 = ecs_new(world, Root);
ecs_add(world, e1, TagA);
ecs_entity_t e2 = ecs_new(world, Root);
ecs_add(world, e2, TagB);
ecs_entity_t e3 = ecs_new(world, Root);
ecs_add(world, e3, TagA);
ecs_add(world, e3, TagB);
ecs_entity_t e4 = ecs_new(world, Root);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ TagA || TagB }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(e4, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}
void RulesScopes_term_w_not_scope_3_terms_w_or(void) {
ecs_world_t *world = ecs_init();
ECS_TAG(world, Root);
ECS_TAG(world, TagA);
ECS_TAG(world, TagB);
ECS_TAG(world, TagC);
ecs_entity_t e1 = ecs_new(world, Root);
ecs_add(world, e1, TagA);
ecs_entity_t e2 = ecs_new(world, Root);
ecs_add(world, e2, TagB);
ecs_entity_t e3 = ecs_new(world, Root);
ecs_add(world, e3, TagA);
ecs_add(world, e3, TagB);
ecs_entity_t e4 = ecs_new(world, Root);
ecs_add(world, e4, TagC);
ecs_entity_t e5 = ecs_new(world, Root);
ecs_rule_t *r = ecs_rule(world, {
.expr = "Root, !{ TagA || TagB || TagC }"
});
test_assert(r != NULL);
{
ecs_iter_t it = ecs_rule_iter(world, r);
test_bool(true, ecs_rule_next(&it));
test_uint(1, it.count);
test_uint(Root, ecs_field_id(&it, 1));
test_uint(0, ecs_field_src(&it, 1));
test_bool(true, ecs_field_is_set(&it, 1));
test_uint(e5, it.entities[0]);
test_bool(false, ecs_rule_next(&it));
}
ecs_rule_fini(r);
ecs_fini(world);
}