diff options
Diffstat (limited to 'ecs/tests/query.rs')
| -rw-r--r-- | ecs/tests/query.rs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/ecs/tests/query.rs b/ecs/tests/query.rs index 062fd5a..7b218e3 100644 --- a/ecs/tests/query.rs +++ b/ecs/tests/query.rs @@ -1,4 +1,5 @@ use ecs::component::Component; +use ecs::pair::{Pair, Wildcard}; use ecs::query::term::Without; use ecs::query::{ TermWithFieldTuple as QueryTermWithFieldTuple, @@ -320,3 +321,93 @@ fn query_without_comp_and_archetype_nonexistant() vec![ent_1_id, ent_2_id], ); } + +#[test] +fn query_with_wildcard_target_pair() +{ + setup(); + + let _test_lock = TEST_LOCK.lock(); + + let mut world = World::new(); + + let ent_1_id = world.create_entity((A, C)); + + world.create_entity((B,)); + + let ent_2_id = world.create_entity(( + B, + Pair::builder().relation::<G>().target_id(ent_1_id).build(), + )); + + world.create_entity(( + B, + Pair::builder().relation::<F>().target_id(ent_1_id).build(), + )); + world.create_entity(( + B, + A, + C, + Pair::builder().relation::<F>().target_id(ent_1_id).build(), + )); + + let ent_3_id = world.create_entity(( + B, + Pair::builder().relation::<G>().target_id(ent_2_id).build(), + )); + + let ent_4_id = world.create_entity(( + B, + E, + Pair::builder().relation::<G>().target_as_data(D).build(), + )); + + assert_query_finds_ents( + world.query::<(&B, Pair<G, Wildcard>), ()>(), + vec![ent_2_id, ent_3_id, ent_4_id], + ); +} + +#[test] +fn query_with_component_target_pair() +{ + setup(); + + let _test_lock = TEST_LOCK.lock(); + + let mut world = World::new(); + + let ent_1_id = world.create_entity((A, C)); + + world.create_entity((B,)); + + world.create_entity(( + B, + Pair::builder().relation::<G>().target_id(ent_1_id).build(), + )); + + world.create_entity(( + B, + Pair::builder().relation::<F>().target_id(ent_1_id).build(), + )); + world.create_entity(( + B, + A, + C, + Pair::builder().relation::<F>().target_id(ent_1_id).build(), + )); + + let ent_2_id = world + .create_entity((B, Pair::builder().relation::<G>().target_as_data(F).build())); + + let ent_3_id = world.create_entity(( + B, + E, + Pair::builder().relation::<G>().target_as_data(F).build(), + )); + + assert_query_finds_ents( + world.query::<(&B, Pair<G, &F>), ()>(), + vec![ent_2_id, ent_3_id], + ); +} |
