Skip to content

Commit

Permalink
#124 add pair tests for filters
Browse files Browse the repository at this point in the history
  • Loading branch information
SanderMertens committed Aug 19, 2021
1 parent 3f22eb2 commit 6bc8bb0
Show file tree
Hide file tree
Showing 3 changed files with 207 additions and 1 deletion.
4 changes: 4 additions & 0 deletions test/api/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -1055,6 +1055,10 @@
"filter_iter_3_tags_2_or",
"filter_iter_1_component",
"filter_iter_2_components",
"filter_iter_pair_id",
"filter_iter_2_pair_ids",
"filter_iter_pair_pred_obj",
"filter_iter_pair_2_pred_obj",
"filter_iter_null",
"filter_iter_1_not_tag",
"filter_iter_2_tags_1_optional",
Expand Down
182 changes: 182 additions & 0 deletions test/api/src/Filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1456,6 +1456,188 @@ void Filter_filter_iter_2_components() {
ecs_fini(world);
}

void Filter_filter_iter_pair_id() {
ecs_world_t *world = ecs_init();

ECS_TAG(world, Rel);
ECS_TAG(world, Obj);
ECS_TAG(world, Tag);

ecs_entity_t e_1 = ecs_new_w_pair(world, Rel, Obj);
ecs_entity_t e_2 = ecs_new_w_pair(world, Rel, Obj);
ecs_entity_t e_3 = ecs_new_w_pair(world, Rel, Obj);

ecs_add_id(world, e_3, Tag);

ecs_filter_t f;
ecs_filter_init(world, &f, &(ecs_filter_desc_t) {
.terms = {{ ecs_pair(Rel, EcsWildcard) }}
});

ecs_iter_t it = ecs_filter_iter(world, &f);

test_assert(ecs_filter_next(&it));
test_int(it.count, 2);
test_int(it.entities[0], e_1);
test_int(it.entities[1], e_2);
test_int(ecs_term_id(&it, 1), ecs_pair(Rel, Obj));
test_int(ecs_term_source(&it, 1), 0);

test_assert(ecs_filter_next(&it));
test_int(it.count, 1);
test_int(it.entities[0], e_3);
test_int(ecs_term_id(&it, 1), ecs_pair(Rel, Obj));
test_int(ecs_term_source(&it, 1), 0);

test_assert(!ecs_filter_next(&it));

ecs_filter_fini(&f);

ecs_fini(world);
}

void Filter_filter_iter_2_pair_ids() {
ecs_world_t *world = ecs_init();

ECS_TAG(world, RelA);
ECS_TAG(world, ObjA);
ECS_TAG(world, RelB);
ECS_TAG(world, ObjB);
ECS_TAG(world, Tag);

ecs_entity_t e_1 = ecs_new_w_pair(world, RelA, ObjA);
ecs_entity_t e_2 = ecs_new_w_pair(world, RelA, ObjA);
ecs_entity_t e_3 = ecs_new_w_pair(world, RelA, ObjA);

ecs_add_pair(world, e_1, RelB, ObjB);
ecs_add_pair(world, e_2, RelB, ObjB);
ecs_add_pair(world, e_3, RelB, ObjB);

ecs_add_id(world, e_3, Tag);

ecs_filter_t f;
ecs_filter_init(world, &f, &(ecs_filter_desc_t) {
.terms = {
{ ecs_pair(RelA, ObjA) },
{ ecs_pair(RelB, EcsWildcard) }
}
});

ecs_iter_t it = ecs_filter_iter(world, &f);

test_assert(ecs_filter_next(&it));
test_int(it.count, 2);
test_int(it.entities[0], e_1);
test_int(it.entities[1], e_2);
test_int(ecs_term_id(&it, 1), ecs_pair(RelA, ObjA));
test_int(ecs_term_id(&it, 2), ecs_pair(RelB, ObjB));
test_int(ecs_term_source(&it, 1), 0);

test_assert(ecs_filter_next(&it));
test_int(it.count, 1);
test_int(it.entities[0], e_3);
test_int(ecs_term_id(&it, 1), ecs_pair(RelA, ObjA));
test_int(ecs_term_id(&it, 2), ecs_pair(RelB, ObjB));
test_int(ecs_term_source(&it, 1), 0);

test_assert(!ecs_filter_next(&it));

ecs_filter_fini(&f);

ecs_fini(world);
}

void Filter_filter_iter_pair_pred_obj() {
ecs_world_t *world = ecs_init();

ECS_TAG(world, Rel);
ECS_TAG(world, Obj);
ECS_TAG(world, Tag);

ecs_entity_t e_1 = ecs_new_w_pair(world, Rel, Obj);
ecs_entity_t e_2 = ecs_new_w_pair(world, Rel, Obj);
ecs_entity_t e_3 = ecs_new_w_pair(world, Rel, Obj);

ecs_add_id(world, e_3, Tag);

ecs_filter_t f;
ecs_filter_init(world, &f, &(ecs_filter_desc_t) {
.terms = {{ .pred.entity = Rel, .args[1].entity = EcsWildcard }}
});

ecs_iter_t it = ecs_filter_iter(world, &f);

test_assert(ecs_filter_next(&it));
test_int(it.count, 2);
test_int(it.entities[0], e_1);
test_int(it.entities[1], e_2);
test_int(ecs_term_id(&it, 1), ecs_pair(Rel, Obj));
test_int(ecs_term_source(&it, 1), 0);

test_assert(ecs_filter_next(&it));
test_int(it.count, 1);
test_int(it.entities[0], e_3);
test_int(ecs_term_id(&it, 1), ecs_pair(Rel, Obj));
test_int(ecs_term_source(&it, 1), 0);

test_assert(!ecs_filter_next(&it));

ecs_filter_fini(&f);

ecs_fini(world);
}

void Filter_filter_iter_pair_2_pred_obj() {
ecs_world_t *world = ecs_init();

ECS_TAG(world, RelA);
ECS_TAG(world, ObjA);
ECS_TAG(world, RelB);
ECS_TAG(world, ObjB);
ECS_TAG(world, Tag);

ecs_entity_t e_1 = ecs_new_w_pair(world, RelA, ObjA);
ecs_entity_t e_2 = ecs_new_w_pair(world, RelA, ObjA);
ecs_entity_t e_3 = ecs_new_w_pair(world, RelA, ObjA);

ecs_add_pair(world, e_1, RelB, ObjB);
ecs_add_pair(world, e_2, RelB, ObjB);
ecs_add_pair(world, e_3, RelB, ObjB);

ecs_add_id(world, e_3, Tag);

ecs_filter_t f;
ecs_filter_init(world, &f, &(ecs_filter_desc_t) {
.terms = {
{ .pred.entity = RelA, .args[1].entity = ObjA },
{ .pred.entity = RelB, .args[1].entity = EcsWildcard }
}
});

ecs_iter_t it = ecs_filter_iter(world, &f);

test_assert(ecs_filter_next(&it));
test_int(it.count, 2);
test_int(it.entities[0], e_1);
test_int(it.entities[1], e_2);
test_int(ecs_term_id(&it, 1), ecs_pair(RelA, ObjA));
test_int(ecs_term_id(&it, 2), ecs_pair(RelB, ObjB));
test_int(ecs_term_source(&it, 1), 0);

test_assert(ecs_filter_next(&it));
test_int(it.count, 1);
test_int(it.entities[0], e_3);
test_int(ecs_term_id(&it, 1), ecs_pair(RelA, ObjA));
test_int(ecs_term_id(&it, 2), ecs_pair(RelB, ObjB));
test_int(ecs_term_source(&it, 1), 0);

test_assert(!ecs_filter_next(&it));

ecs_filter_fini(&f);

ecs_fini(world);
}

void Filter_filter_iter_null() {
ecs_world_t *world = ecs_init();

Expand Down
22 changes: 21 additions & 1 deletion test/api/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,10 @@ void Filter_filter_iter_2_tags_1_not(void);
void Filter_filter_iter_3_tags_2_or(void);
void Filter_filter_iter_1_component(void);
void Filter_filter_iter_2_components(void);
void Filter_filter_iter_pair_id(void);
void Filter_filter_iter_2_pair_ids(void);
void Filter_filter_iter_pair_pred_obj(void);
void Filter_filter_iter_pair_2_pred_obj(void);
void Filter_filter_iter_null(void);
void Filter_filter_iter_1_not_tag(void);
void Filter_filter_iter_2_tags_1_optional(void);
Expand Down Expand Up @@ -5749,6 +5753,22 @@ bake_test_case Filter_testcases[] = {
"filter_iter_2_components",
Filter_filter_iter_2_components
},
{
"filter_iter_pair_id",
Filter_filter_iter_pair_id
},
{
"filter_iter_2_pair_ids",
Filter_filter_iter_2_pair_ids
},
{
"filter_iter_pair_pred_obj",
Filter_filter_iter_pair_pred_obj
},
{
"filter_iter_pair_2_pred_obj",
Filter_filter_iter_pair_2_pred_obj
},
{
"filter_iter_null",
Filter_filter_iter_null
Expand Down Expand Up @@ -9805,7 +9825,7 @@ static bake_test_suite suites[] = {
"Filter",
NULL,
NULL,
46,
50,
Filter_testcases
},
{
Expand Down

0 comments on commit 6bc8bb0

Please sign in to comment.