@@ -3763,6 +3763,58 @@ void Cached_up_w_delete_table_and_move_parent(void) {
37633763 ecs_fini (world );
37643764}
37653765
3766+ void Cached_cascade_default_group_reinsert_after_empty_table_delete (void ) {
3767+ ecs_world_t * world = ecs_mini ();
3768+
3769+ ECS_COMPONENT (world , Position );
3770+
3771+ ecs_query_t * q = ecs_query (world , {
3772+ .expr = "Position, ?Position(cascade)" ,
3773+ .cache_kind = EcsQueryCacheAuto
3774+ });
3775+ test_assert (q != NULL );
3776+
3777+ ecs_entity_t p = ecs_new (world );
3778+ ecs_entity_t c = ecs_new_w_pair (world , EcsChildOf , p );
3779+ ecs_set (world , c , Position , {10 , 20 });
3780+
3781+ ecs_entity_t e1 = ecs_new (world );
3782+ ecs_set (world , e1 , Position , {1 , 2 });
3783+
3784+ ecs_iter_t it = ecs_query_iter (world , q );
3785+ test_bool (true, ecs_query_next (& it ));
3786+ test_bool (true, ecs_query_next (& it ));
3787+ test_bool (false, ecs_query_next (& it ));
3788+
3789+ ecs_delete (world , e1 );
3790+
3791+ int32_t deleted = ecs_delete_empty_tables (world , & (ecs_delete_empty_tables_desc_t ) {
3792+ .delete_generation = 1
3793+ });
3794+ deleted += ecs_delete_empty_tables (world , & (ecs_delete_empty_tables_desc_t ) {
3795+ .delete_generation = 1
3796+ });
3797+ test_assert (deleted > 0 );
3798+
3799+ ecs_entity_t e2 = ecs_new (world );
3800+ ecs_set (world , e2 , Position , {3 , 4 });
3801+
3802+ ecs_delete (world , e2 );
3803+
3804+ /* Reproduces assert in flecs_query_cache_remove_group:
3805+ * ecs_assert(cur != NULL, ECS_INTERNAL_ERROR, NULL);
3806+ */
3807+ deleted = ecs_delete_empty_tables (world , & (ecs_delete_empty_tables_desc_t ) {
3808+ .delete_generation = 1
3809+ });
3810+ deleted += ecs_delete_empty_tables (world , & (ecs_delete_empty_tables_desc_t ) {
3811+ .delete_generation = 1
3812+ });
3813+ test_assert (deleted > 0 );
3814+
3815+ ecs_fini (world );
3816+ }
3817+
37663818void Cached_it_ptrs (void ) {
37673819 ecs_world_t * world = ecs_mini ();
37683820
0 commit comments