Skip to content

Commit

Permalink
Fix issue where world passed to rule iterator creation wasn't used
Browse files Browse the repository at this point in the history
  • Loading branch information
SanderMertens committed Aug 4, 2023
1 parent 61076ac commit 74a7f74
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 8 deletions.
2 changes: 1 addition & 1 deletion flecs.h
Original file line number Diff line number Diff line change
Expand Up @@ -28890,7 +28890,7 @@ struct rule final : rule_base, iterable<Components...> {
if (!world) {
world = m_world;
}
return ecs_rule_iter(m_world, m_rule);
return ecs_rule_iter(world, m_rule);
}

ecs_iter_next_action_t next_action() const override {
Expand Down
2 changes: 1 addition & 1 deletion include/flecs/addons/cpp/mixins/rule/impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ struct rule final : rule_base, iterable<Components...> {
if (!world) {
world = m_world;
}
return ecs_rule_iter(m_world, m_rule);
return ecs_rule_iter(world, m_rule);
}

ecs_iter_next_action_t next_action() const override {
Expand Down
9 changes: 6 additions & 3 deletions test/cpp_api/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,8 @@
"cascade_w_type",
"named_query",
"term_w_write",
"term_w_read"
"term_w_read",
"iter_w_stage"
]
}, {
"id": "FilterBuilder",
Expand Down Expand Up @@ -769,7 +770,8 @@
"read_pair_component_id",
"read_pair_component_name",
"read_enum",
"assign_after_init"
"assign_after_init",
"iter_w_stage"
]
}, {
"id": "RuleBuilder",
Expand Down Expand Up @@ -801,7 +803,8 @@
"named_scoped_rule",
"is_valid",
"unresolved_by_name",
"scope"
"scope",
"iter_w_stage"
]
}, {
"id": "SystemBuilder",
Expand Down
20 changes: 20 additions & 0 deletions test/cpp_api/src/FilterBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2509,3 +2509,23 @@ void FilterBuilder_assign_after_init() {

test_int(count, 1);
}

void FilterBuilder_iter_w_stage() {
flecs::world ecs;

ecs.set_stage_count(2);
flecs::world stage = ecs.get_stage(1);

auto e1 = ecs.entity().add<Position>();

auto q = ecs.filter<Position>();

int32_t count = 0;
q.each(stage, [&](flecs::iter& it, size_t i, Position&) {
test_assert(it.world() == stage);
test_assert(it.entity(i) == e1);
count ++;
});

test_int(count, 1);
}
20 changes: 20 additions & 0 deletions test/cpp_api/src/QueryBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2014,3 +2014,23 @@ void QueryBuilder_term_w_read() {
test_assert(f.term(1).inout() == flecs::In);
test_assert(f.term(1).get_src() == 0);
}

void QueryBuilder_iter_w_stage() {
flecs::world ecs;

ecs.set_stage_count(2);
flecs::world stage = ecs.get_stage(1);

auto e1 = ecs.entity().add<Position>();

auto q = ecs.query<Position>();

int32_t count = 0;
q.each(stage, [&](flecs::iter& it, size_t i, Position&) {
test_assert(it.world() == stage);
test_assert(it.entity(i) == e1);
count ++;
});

test_int(count, 1);
}
22 changes: 22 additions & 0 deletions test/cpp_api/src/RuleBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -775,3 +775,25 @@ void RuleBuilder_scope() {

r.destruct();
}

void RuleBuilder_iter_w_stage() {
flecs::world ecs;

ecs.set_stage_count(2);
flecs::world stage = ecs.get_stage(1);

auto e1 = ecs.entity().add<Position>();

auto q = ecs.rule<Position>();

int32_t count = 0;
q.each(stage, [&](flecs::iter& it, size_t i, Position&) {
test_assert(it.world() == stage);
test_assert(it.entity(i) == e1);
count ++;
});

test_int(count, 1);

q.destruct();
}
21 changes: 18 additions & 3 deletions test/cpp_api/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ void QueryBuilder_cascade_w_type(void);
void QueryBuilder_named_query(void);
void QueryBuilder_term_w_write(void);
void QueryBuilder_term_w_read(void);
void QueryBuilder_iter_w_stage(void);

// Testsuite 'FilterBuilder'
void FilterBuilder_builder_assign_same_type(void);
Expand Down Expand Up @@ -742,6 +743,7 @@ void FilterBuilder_read_pair_component_id(void);
void FilterBuilder_read_pair_component_name(void);
void FilterBuilder_read_enum(void);
void FilterBuilder_assign_after_init(void);
void FilterBuilder_iter_w_stage(void);

// Testsuite 'RuleBuilder'
void RuleBuilder_1_type(void);
Expand Down Expand Up @@ -772,6 +774,7 @@ void RuleBuilder_named_scoped_rule(void);
void RuleBuilder_is_valid(void);
void RuleBuilder_unresolved_by_name(void);
void RuleBuilder_scope(void);
void RuleBuilder_iter_w_stage(void);

// Testsuite 'SystemBuilder'
void SystemBuilder_builder_assign_same_type(void);
Expand Down Expand Up @@ -3696,6 +3699,10 @@ bake_test_case QueryBuilder_testcases[] = {
{
"term_w_read",
QueryBuilder_term_w_read
},
{
"iter_w_stage",
QueryBuilder_iter_w_stage
}
};

Expand Down Expand Up @@ -4127,6 +4134,10 @@ bake_test_case FilterBuilder_testcases[] = {
{
"assign_after_init",
FilterBuilder_assign_after_init
},
{
"iter_w_stage",
FilterBuilder_iter_w_stage
}
};

Expand Down Expand Up @@ -4242,6 +4253,10 @@ bake_test_case RuleBuilder_testcases[] = {
{
"scope",
RuleBuilder_scope
},
{
"iter_w_stage",
RuleBuilder_iter_w_stage
}
};

Expand Down Expand Up @@ -6149,21 +6164,21 @@ static bake_test_suite suites[] = {
"QueryBuilder",
NULL,
NULL,
67,
68,
QueryBuilder_testcases
},
{
"FilterBuilder",
NULL,
NULL,
107,
108,
FilterBuilder_testcases
},
{
"RuleBuilder",
NULL,
NULL,
28,
29,
RuleBuilder_testcases
},
{
Expand Down

0 comments on commit 74a7f74

Please sign in to comment.