예제 #1
0
 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)
예제 #2
0
    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})
예제 #3
0
 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])
예제 #4
0
 def test_basic(self):
     parsed = PositionParser("1 3 N")
     self.assertEqual(parsed.location, Location(1, 3))
     self.assertEqual(parsed.direction, Direction.N)
예제 #5
0
 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))
예제 #6
0
 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)
예제 #7
0
 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)
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 def _parse(self, data):
     segments = data.split(" ")
     self.location = Location(int(segments[0]), int(segments[1]))
     self.direction = Direction[segments[2]]