@@ -2811,6 +2811,78 @@ void Traversal_this_up_childof_inherited(void) {
28112811 ecs_fini (world );
28122812}
28132813
2814+ void Traversal_this_self_up_childof_inherited_override (void ) {
2815+ ecs_world_t * world = ecs_mini ();
2816+
2817+ ECS_ENTITY (world , Foo , (OnInstantiate , Inherit ));
2818+
2819+ ecs_entity_t base = ecs_entity (world , { .add = ecs_ids (Foo ) });
2820+ ecs_entity_t parent = ecs_entity (world , { .add = ecs_ids (ecs_isa (base ), Foo ) });
2821+ ecs_entity_t child = ecs_entity (world , { .parent = parent });
2822+
2823+ ecs_query_t * r = ecs_query (world , {
2824+ .expr = "Foo(self|up)" ,
2825+ .cache_kind = cache_kind
2826+ });
2827+
2828+ test_assert (r != NULL );
2829+
2830+ ecs_iter_t it = ecs_query_iter (world , r );
2831+ test_bool (true, ecs_query_next (& it ));
2832+ test_int (1 , it .count );
2833+ test_uint (base , it .entities [0 ]);
2834+ test_uint (0 , ecs_field_src (& it , 0 ));
2835+ test_uint (Foo , ecs_field_id (& it , 0 ));
2836+
2837+ test_bool (true, ecs_query_next (& it ));
2838+ test_int (1 , it .count );
2839+ test_uint (parent , it .entities [0 ]);
2840+ test_uint (0 , ecs_field_src (& it , 0 ));
2841+ test_uint (Foo , ecs_field_id (& it , 0 ));
2842+
2843+ test_bool (true, ecs_query_next (& it ));
2844+ test_int (1 , it .count );
2845+ test_uint (child , it .entities [0 ]);
2846+ test_uint (parent , ecs_field_src (& it , 0 ));
2847+ test_uint (Foo , ecs_field_id (& it , 0 ));
2848+
2849+ test_bool (false, ecs_query_next (& it ));
2850+
2851+ ecs_query_fini (r );
2852+
2853+ ecs_fini (world );
2854+ }
2855+
2856+ void Traversal_this_up_childof_inherited_override (void ) {
2857+ ecs_world_t * world = ecs_mini ();
2858+
2859+ ECS_ENTITY (world , Foo , (OnInstantiate , Inherit ));
2860+
2861+ ecs_entity_t base = ecs_entity (world , { .add = ecs_ids (Foo ) });
2862+ ecs_entity_t parent = ecs_entity (world , { .add = ecs_ids (ecs_isa (base ), Foo ) });
2863+ ecs_entity_t child = ecs_entity (world , { .parent = parent });
2864+
2865+ ecs_query_t * r = ecs_query (world , {
2866+ .expr = "Foo(up)" ,
2867+ .cache_kind = cache_kind
2868+ });
2869+
2870+ test_assert (r != NULL );
2871+
2872+ ecs_iter_t it = ecs_query_iter (world , r );
2873+ test_bool (true, ecs_query_next (& it ));
2874+ test_int (1 , it .count );
2875+ test_uint (child , it .entities [0 ]);
2876+ test_uint (parent , ecs_field_src (& it , 0 ));
2877+ test_uint (Foo , ecs_field_id (& it , 0 ));
2878+
2879+ test_bool (false, ecs_query_next (& it ));
2880+
2881+ ecs_query_fini (r );
2882+
2883+ ecs_fini (world );
2884+ }
2885+
28142886void Traversal_this_written_self_up_childof_inherited (void ) {
28152887 ecs_world_t * world = ecs_mini ();
28162888
@@ -2889,6 +2961,92 @@ void Traversal_this_written_up_childof_inherited(void) {
28892961 ecs_fini (world );
28902962}
28912963
2964+ void Traversal_this_written_self_up_childof_inherited_override (void ) {
2965+ ecs_world_t * world = ecs_mini ();
2966+
2967+ ECS_ENTITY (world , Foo , (OnInstantiate , Inherit ));
2968+ ECS_ENTITY (world , Tag , (OnInstantiate , Inherit ));
2969+
2970+ ecs_query_t * r = ecs_query (world , {
2971+ .expr = "Tag(self), Foo(self|up)" ,
2972+ .cache_kind = cache_kind
2973+ });
2974+
2975+ test_assert (r != NULL );
2976+
2977+ ecs_set_with (world , Tag );
2978+ ecs_entity_t base = ecs_entity (world , { .add = ecs_ids (Foo ) });
2979+ ecs_entity_t parent = ecs_entity (world , { .add = ecs_ids (ecs_isa (base ), Foo ) });
2980+ ecs_entity_t child = ecs_entity (world , { .parent = parent });
2981+ ecs_set_with (world , 0 );
2982+
2983+ ecs_iter_t it = ecs_query_iter (world , r );
2984+ test_bool (true, ecs_query_next (& it ));
2985+ test_int (1 , it .count );
2986+ test_uint (base , it .entities [0 ]);
2987+ test_uint (0 , ecs_field_src (& it , 0 ));
2988+ test_uint (0 , ecs_field_src (& it , 1 ));
2989+ test_uint (Tag , ecs_field_id (& it , 0 ));
2990+ test_uint (Foo , ecs_field_id (& it , 1 ));
2991+
2992+ test_bool (true, ecs_query_next (& it ));
2993+ test_int (1 , it .count );
2994+ test_uint (parent , it .entities [0 ]);
2995+ test_uint (0 , ecs_field_src (& it , 0 ));
2996+ test_uint (0 , ecs_field_src (& it , 1 ));
2997+ test_uint (Tag , ecs_field_id (& it , 0 ));
2998+ test_uint (Foo , ecs_field_id (& it , 1 ));
2999+
3000+ test_bool (true, ecs_query_next (& it ));
3001+ test_int (1 , it .count );
3002+ test_uint (child , it .entities [0 ]);
3003+ test_uint (0 , ecs_field_src (& it , 0 ));
3004+ test_uint (parent , ecs_field_src (& it , 1 ));
3005+ test_uint (Tag , ecs_field_id (& it , 0 ));
3006+ test_uint (Foo , ecs_field_id (& it , 1 ));
3007+
3008+ test_bool (false, ecs_query_next (& it ));
3009+
3010+ ecs_query_fini (r );
3011+
3012+ ecs_fini (world );
3013+ }
3014+
3015+ void Traversal_this_written_up_childof_inherited_override (void ) {
3016+ ecs_world_t * world = ecs_mini ();
3017+
3018+ ECS_ENTITY (world , Foo , (OnInstantiate , Inherit ));
3019+ ECS_ENTITY (world , Tag , (OnInstantiate , Inherit ));
3020+
3021+ ecs_query_t * r = ecs_query (world , {
3022+ .expr = "Tag(self), Foo(up)" ,
3023+ .cache_kind = cache_kind
3024+ });
3025+
3026+ test_assert (r != NULL );
3027+
3028+ ecs_set_with (world , Tag );
3029+ ecs_entity_t base = ecs_entity (world , { .add = ecs_ids (Foo ) });
3030+ ecs_entity_t parent = ecs_entity (world , { .add = ecs_ids (ecs_isa (base ), Foo ) });
3031+ ecs_entity_t child = ecs_entity (world , { .parent = parent });
3032+ ecs_set_with (world , 0 );
3033+
3034+ ecs_iter_t it = ecs_query_iter (world , r );
3035+ test_bool (true, ecs_query_next (& it ));
3036+ test_int (1 , it .count );
3037+ test_uint (child , it .entities [0 ]);
3038+ test_uint (0 , ecs_field_src (& it , 0 ));
3039+ test_uint (parent , ecs_field_src (& it , 1 ));
3040+ test_uint (Tag , ecs_field_id (& it , 0 ));
3041+ test_uint (Foo , ecs_field_id (& it , 1 ));
3042+
3043+ test_bool (false, ecs_query_next (& it ));
3044+
3045+ ecs_query_fini (r );
3046+
3047+ ecs_fini (world );
3048+ }
3049+
28923050void Traversal_var_self_up_childof_inherited (void ) {
28933051 ecs_world_t * world = ecs_mini ();
28943052
0 commit comments