def test_second_at_charge_leave(self): channel = Channel() car1 = Car(name=1, lane=0, intention='l', channel=channel) do_round([car1], channel) car1.enter_intersection() for i in range(4): do_round([car1], channel) self.assertTrue(car1.is_supervisor()) car2 = Car(name=2, lane=1, intention='l', channel=channel) do_round([car1, car2], channel) car2.enter_intersection() car3 = Car(name=3, lane=2, intention='s', channel=channel) do_round([car1, car2, car3], channel) car3.enter_intersection() car4 = Car(name=4, lane=2, intention='r', channel=channel) do_round([car1, car2, car3, car4], channel) car4.enter_intersection() # follow lists: # 1: [] # 2: [1] # 3: [2] # 4: [3] channel.do_round() for car in [car1, car2, car3, car4]: self.assertEqual([1, 2], [car.get_supervisor_car(), car.get_second_at_charge()]) # Before car 2 leaves self.assertEqual([], list(car1.get_following_cars().keys())) self.assertEqual([1], list(car2.get_following_cars().keys())) self.assertEqual([2], list(car3.get_following_cars().keys())) self.assertEqual([3], list(car4.get_following_cars().keys())) for car in [car1, car2, car3, car4]: self.assertEqual({4}, car.get_leaf_cars()) do_round([car1, car2, car3, car4], channel) car2.leave_inner_intersection() do_round([car1, car2, car3, car4], channel) for car in [car1, car3, car4]: self.assertEqual([1, 3], [car.get_supervisor_car(), car.get_second_at_charge()]) self.assertEqual([1, None], [car2.get_supervisor_car(), car2.get_second_at_charge()]) self.assertTrue(car1.is_supervisor()) self.assertTrue(car3.is_second_at_charge()) self.assertFalse(car4.is_supervisor()) self.assertFalse(car4.is_second_at_charge()) for car in [car1, car2, car3, car4]: self.assertTrue(2 not in car.get_graph()) for node in car.get_graph().values(): self.assertTrue(2 not in node.get_follow_list()) # After self.assertEqual([], list(car1.get_following_cars().keys())) self.assertEqual([1], list(car2.get_following_cars().keys())) self.assertEqual([], list(car3.get_following_cars().keys())) self.assertEqual([3], list(car4.get_following_cars().keys()))