def test_basic(self): parsed_input = InputParser("4 5\n1 2 N\nLML\n3 3 E\nMMR") self.assertEqual(parsed_input.grid, Grid(4, 5)) self.assertEqual(len(parsed_input.rovers_moves), 2) self.assertEqual( parsed_input.rovers_moves[0][0], Rover(Grid(4, 5), Location(1, 2), Direction.N), ) self.assertEqual(parsed_input.rovers_moves[0][1], [Movement.L, Movement.M, Movement.L]) self.assertEqual( parsed_input.rovers_moves[1][0], Rover(Grid(4, 5), Location(3, 3), Direction.E), ) self.assertEqual(parsed_input.rovers_moves[1][1], [Movement.M, Movement.M, Movement.R])
def test_move_collision(self): g = Grid(3, 3) r1 = Rover(g, Location(1, 1), Direction.N) r2 = Rover(g, Location(2, 2), Direction.S) self.assertFalse( r1.move(Movement.M, Movement.R, Movement.M, Movement.M)) self.assertRover(r1, g, Location(1, 2), Direction.E, RoverState.STOPPED) self.assertEqual(r2.state, RoverState.OPERATIONAL)
def test_hashable(self): g = Grid(3, 3) r1 = Rover(g, Location(1, 1), Direction.N) r2 = Rover(g, Location(2, 2), Direction.N) r3 = Rover(g, Location(3, 3), Direction.N) rover_set = {r1, r2} self.assertIn(r1, rover_set) self.assertIn(r2, rover_set) self.assertNotIn(r3, rover_set) rover_set.add(r3) self.assertIn(r3, rover_set) self.assertEqual(rover_set, {r2, r3, r1})
def test_basic(self): parsed = GridParser("3 4") self.assertEqual(parsed.grid, Grid(3, 4))
def test_disabled_movement(self): g = Grid(3, 3) r1 = Rover(g, Location(2, 2), Direction.N, RoverState.STOPPED) self.assertFalse(r1.move(Movement.M)) self.assertEqual(r1.location, Location(2, 2))
def test_move_border_collision(self): g = Grid(3, 3) r1 = Rover(g, Location(1, 1), Direction.N) self.assertFalse(r1.move(Movement.M, Movement.M, Movement.M)) self.assertRover(r1, g, Location(1, 3), Direction.N, RoverState.STOPPED)
def test_move(self): g = Grid(3, 3) r1 = Rover(g, Location(1, 1), Direction.N) r1.move(Movement.M, Movement.R, Movement.M, Movement.M) self.assertRover(r1, g, Location(3, 2), Direction.E, RoverState.OPERATIONAL)
def test_move_west(self): g = Grid(3, 3) r1 = Rover(g, Location(2, 2), Direction.W) self.assertTrue(r1.move(Movement.M)) self.assertRover(r1, g, Location(1, 2), Direction.W)
def test_initial_collision(self): g = Grid(2, 2) r1 = Rover(g, Location(1, 1), Direction.N) r2 = Rover(g, Location(1, 1), Direction.E) self.assertEqual(r1.state, RoverState.OPERATIONAL) self.assertEqual(r2.state, RoverState.ERROR)
def _parse(self, data): length, width = tuple(map(int, data.split(" "))) self.grid = Grid(length, width)