diff --git a/flecs.h b/flecs.h index 32cb72ba2..322bb3da9 100644 --- a/flecs.h +++ b/flecs.h @@ -28890,7 +28890,7 @@ struct rule final : rule_base, iterable { 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 { diff --git a/include/flecs/addons/cpp/mixins/rule/impl.hpp b/include/flecs/addons/cpp/mixins/rule/impl.hpp index a055f60d4..0fc6a3874 100644 --- a/include/flecs/addons/cpp/mixins/rule/impl.hpp +++ b/include/flecs/addons/cpp/mixins/rule/impl.hpp @@ -100,7 +100,7 @@ struct rule final : rule_base, iterable { 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 { diff --git a/test/cpp_api/project.json b/test/cpp_api/project.json index 17b738f3e..182f8a408 100644 --- a/test/cpp_api/project.json +++ b/test/cpp_api/project.json @@ -658,7 +658,8 @@ "cascade_w_type", "named_query", "term_w_write", - "term_w_read" + "term_w_read", + "iter_w_stage" ] }, { "id": "FilterBuilder", @@ -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", @@ -801,7 +803,8 @@ "named_scoped_rule", "is_valid", "unresolved_by_name", - "scope" + "scope", + "iter_w_stage" ] }, { "id": "SystemBuilder", diff --git a/test/cpp_api/src/FilterBuilder.cpp b/test/cpp_api/src/FilterBuilder.cpp index 790407f18..2a1332487 100644 --- a/test/cpp_api/src/FilterBuilder.cpp +++ b/test/cpp_api/src/FilterBuilder.cpp @@ -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(); + + auto q = ecs.filter(); + + 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); +} diff --git a/test/cpp_api/src/QueryBuilder.cpp b/test/cpp_api/src/QueryBuilder.cpp index 638baa257..0d86f3f74 100644 --- a/test/cpp_api/src/QueryBuilder.cpp +++ b/test/cpp_api/src/QueryBuilder.cpp @@ -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(); + + auto q = ecs.query(); + + 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); +} diff --git a/test/cpp_api/src/RuleBuilder.cpp b/test/cpp_api/src/RuleBuilder.cpp index 12ff7633d..43543bdaa 100644 --- a/test/cpp_api/src/RuleBuilder.cpp +++ b/test/cpp_api/src/RuleBuilder.cpp @@ -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(); + + auto q = ecs.rule(); + + 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(); +} diff --git a/test/cpp_api/src/main.cpp b/test/cpp_api/src/main.cpp index 98801839f..e1e5641b8 100644 --- a/test/cpp_api/src/main.cpp +++ b/test/cpp_api/src/main.cpp @@ -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); @@ -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); @@ -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); @@ -3696,6 +3699,10 @@ bake_test_case QueryBuilder_testcases[] = { { "term_w_read", QueryBuilder_term_w_read + }, + { + "iter_w_stage", + QueryBuilder_iter_w_stage } }; @@ -4127,6 +4134,10 @@ bake_test_case FilterBuilder_testcases[] = { { "assign_after_init", FilterBuilder_assign_after_init + }, + { + "iter_w_stage", + FilterBuilder_iter_w_stage } }; @@ -4242,6 +4253,10 @@ bake_test_case RuleBuilder_testcases[] = { { "scope", RuleBuilder_scope + }, + { + "iter_w_stage", + RuleBuilder_iter_w_stage } }; @@ -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 }, {