Allow adding systems to multiple sets that share the same base set (#7709)
# Objective Fixes #7702. ## Solution - Added an test that ensures that no error is returned if a system or set is inside two different sets that share the same base set. - Added an check to only return an error if the two base sets are not equal.
This commit is contained in:
		
							parent
							
								
									b35818c0a3
								
							
						
					
					
						commit
						6a63940367
					
				@ -797,6 +797,28 @@ mod tests {
 | 
				
			|||||||
            ));
 | 
					            ));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #[test]
 | 
				
			||||||
 | 
					        fn allow_same_base_sets() {
 | 
				
			||||||
 | 
					            let mut world = World::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            let mut schedule = Schedule::new();
 | 
				
			||||||
 | 
					            schedule
 | 
				
			||||||
 | 
					                .configure_set(Normal::X.in_base_set(Base::A))
 | 
				
			||||||
 | 
					                .configure_set(Normal::Y.in_base_set(Base::A))
 | 
				
			||||||
 | 
					                .add_system(named_system.in_set(Normal::X).in_set(Normal::Y));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            let result = schedule.initialize(&mut world);
 | 
				
			||||||
 | 
					            assert!(matches!(result, Ok(())));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            let mut schedule = Schedule::new();
 | 
				
			||||||
 | 
					            schedule
 | 
				
			||||||
 | 
					                .configure_set(Normal::X.in_base_set(Base::A))
 | 
				
			||||||
 | 
					                .configure_set(Normal::Y.in_base_set(Base::A).in_set(Normal::X));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            let result = schedule.initialize(&mut world);
 | 
				
			||||||
 | 
					            assert!(matches!(result, Ok(())));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #[test]
 | 
					        #[test]
 | 
				
			||||||
        fn default_base_set_ordering() {
 | 
					        fn default_base_set_ordering() {
 | 
				
			||||||
            let mut world = World::default();
 | 
					            let mut world = World::default();
 | 
				
			||||||
 | 
				
			|||||||
@ -840,20 +840,26 @@ impl ScheduleGraph {
 | 
				
			|||||||
                        neighbor,
 | 
					                        neighbor,
 | 
				
			||||||
                    )? {
 | 
					                    )? {
 | 
				
			||||||
                        if let Some(first_set) = base_set {
 | 
					                        if let Some(first_set) = base_set {
 | 
				
			||||||
                            return Err(match node_id {
 | 
					                            if first_set != calculated_base_set {
 | 
				
			||||||
                                NodeId::System(index) => {
 | 
					                                return Err(match node_id {
 | 
				
			||||||
                                    ScheduleBuildError::SystemInMultipleBaseSets {
 | 
					                                    NodeId::System(index) => {
 | 
				
			||||||
                                        system: systems[index].name(),
 | 
					                                        ScheduleBuildError::SystemInMultipleBaseSets {
 | 
				
			||||||
                                        first_set: system_sets[first_set.index()].name(),
 | 
					                                            system: systems[index].name(),
 | 
				
			||||||
                                        second_set: system_sets[calculated_base_set.index()].name(),
 | 
					                                            first_set: system_sets[first_set.index()].name(),
 | 
				
			||||||
 | 
					                                            second_set: system_sets[calculated_base_set.index()]
 | 
				
			||||||
 | 
					                                                .name(),
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                }
 | 
					                                    NodeId::Set(index) => {
 | 
				
			||||||
                                NodeId::Set(index) => ScheduleBuildError::SetInMultipleBaseSets {
 | 
					                                        ScheduleBuildError::SetInMultipleBaseSets {
 | 
				
			||||||
                                    set: system_sets[index].name(),
 | 
					                                            set: system_sets[index].name(),
 | 
				
			||||||
                                    first_set: system_sets[first_set.index()].name(),
 | 
					                                            first_set: system_sets[first_set.index()].name(),
 | 
				
			||||||
                                    second_set: system_sets[calculated_base_set.index()].name(),
 | 
					                                            second_set: system_sets[calculated_base_set.index()]
 | 
				
			||||||
                                },
 | 
					                                                .name(),
 | 
				
			||||||
                            });
 | 
					                                        }
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                });
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        base_set = Some(calculated_base_set);
 | 
					                        base_set = Some(calculated_base_set);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user