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()))