def test_vehicle_spawned_in_bubble_is_not_captured(vehicle, bubble): manager = BubbleManager([bubble], road_network) # Spawned inside bubble, didn't "drive through" airlocking region, so should _not_ # get captured vehicle = Vehicle( id="vehicle-1", pose=Pose.from_center((0, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) change = manager.step_bubble_state([vehicle], []) assert len(manager.vehicle_ids_in_bubble(bubble)) == 0 # Spawned vehicle drove through airlock so _should_ get captured vehicle = Vehicle( id="vehicle-2", pose=Pose.from_center((-8, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) change = manager.step_bubble_state([vehicle], []) vehicle.position = (-6, 0) change = manager.step_bubble_state([vehicle], []) assert len(manager.vehicle_ids_in_bubble(bubble)) == 1 manager.teardown()
def test_bubble_manager_state_change(vehicle, bubble): manager = BubbleManager([bubble], road_network) # Outside airlock and bubble vehicle = Vehicle( id="vehicle-1", pose=Pose.from_center((0, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) vehicle.position = (-8, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.entered_airlock_1) == len(change.entered_bubble) == 0 # Inside airlock, begin collecting experiences, but don't hijack vehicle.position = (-6, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.entered_airlock_1) == 1 and len( change.entered_bubble) == 0 # Entered bubble, now hijack vehicle.position = (-3, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.entered_airlock_1) == 0 and len( change.entered_bubble) == 1 assert change.entered_bubble[0][0] == vehicle.id # Leave bubble into exiting airlock vehicle.position = (6, 0) change = manager.step_bubble_state([], [vehicle]) assert len(change.entered_bubble) == 0 and len(change.exited_bubble) == 1 # Exit bubble and airlock, now relinquish vehicle.position = (8, 0) change = manager.step_bubble_state([vehicle], []) assert len(change.exited_bubble) == 0 and len(change.exited_airlock_2) == 1 manager.teardown()
def start_keep_alive_boid_agents(self, sim): for bubble in filter( lambda b: b.is_boid and b.keep_alive, sim.scenario.bubbles ): actor = bubble.actor agent_id = BubbleManager._make_boid_social_agent_id(actor) social_agent = make_social_agent( locator=actor.agent_locator, **actor.policy_kwargs, ) actor = bubble.actor social_agent_data_model = SocialAgent( id=SocialAgentId.new(actor.name), name=actor.name, is_boid=True, is_boid_keep_alive=True, agent_locator=actor.agent_locator, policy_kwargs=actor.policy_kwargs, initial_speed=actor.initial_speed, ) self.start_social_agent(agent_id, social_agent, social_agent_data_model)
def test_bubble_manager_limit(vehicle, bubble): limit = 2 bubble = replace(bubble, limit=limit) manager = BubbleManager([bubble], road_network) vehicles_captured = [ Vehicle( id=f"vehicle-{i}", pose=Pose.from_center((0, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) for i in range(limit) ] vehicles_not_captured = [ Vehicle( id=f"vehicle-{i}", pose=Pose.from_center((0, 0, 0), Heading(0)), showbase=mock.MagicMock(), chassis=mock.Mock(), ) for i in range(5) ] for position in [(-8, 0), (-6, 0), (-3, 0), (0, 0), (6, 0), (8, 0)]: for vehicle in vehicles_captured: vehicle.position = position for vehicle in vehicles_not_captured: vehicle.position = position change = manager.step_bubble_state(vehicles_captured, vehicles_not_captured) vehicle_ids_in_bubble = manager.vehicle_ids_in_bubble(bubble) assert len(vehicle_ids_in_bubble) <= limit assert set(vehicle_ids_in_bubble).issubset( set([v.id for v in vehicles_captured])) manager.teardown()