@@ -2811,6 +2811,78 @@ void Traversal_this_up_childof_inherited(void) {
2811
2811
ecs_fini (world );
2812
2812
}
2813
2813
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
+
2814
2886
void Traversal_this_written_self_up_childof_inherited (void ) {
2815
2887
ecs_world_t * world = ecs_mini ();
2816
2888
@@ -2889,6 +2961,92 @@ void Traversal_this_written_up_childof_inherited(void) {
2889
2961
ecs_fini (world );
2890
2962
}
2891
2963
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
+
2892
3050
void Traversal_var_self_up_childof_inherited (void ) {
2893
3051
ecs_world_t * world = ecs_mini ();
2894
3052
0 commit comments