Coverage for tests/test_rover.py : 100%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import pytest
3from rover.rover import Rover
6def test_rover_initialisation():
7 assert Rover(0, 0, "EAST")
10def test_rover_can_move(rover):
11 command = "F"
12 assert rover.move(command) is not None
15@pytest.mark.parametrize(
16 ("init", "command", "expected"),
17 [
18 ((0, 0, "EAST"), "F", (1, 0, "EAST")),
19 ((0, 0, "EAST"), "B", (-1, 0, "EAST")),
20 ((0, 0, "EAST"), "R", (0, 0, "SOUTH")),
21 ((0, 0, "EAST"), "L", (0, 0, "NORTH")),
22 # change starting point
23 ((0, 0, "WEST"), "F", (-1, 0, "WEST")),
24 ((0, 0, "SOUTH"), "R", (0, 0, "WEST")),
25 ((0, 0, "SOUTH"), "F", (0, -1, "SOUTH")),
26 ],
27)
28def test_rover_receive_commands(init, command, expected):
29 rover = Rover(*init)
30 assert rover.move(command) == expected
33def test_rover_rejects_invalid_commands(rover):
34 command = " W "
35 with pytest.raises(ValueError):
36 rover.move(command)
39@pytest.mark.parametrize(
40 ("init", "command", "expected"),
41 [
42 ((0, 0, "NORTH"), "FB", (0, 0, "NORTH")),
43 ((0, 0, "NORTH"), "FF", (0, 2, "NORTH")),
44 ((4, 2, "EAST"), "FLFFFRFLB", (6, 4, "NORTH")),
45 ],
46)
47def test_rover_can_receive_multiple_commands(init, command, expected):
48 rover = Rover(*init)
49 assert rover.move(command) == expected
52@pytest.mark.parametrize(
53 ("init", "obstacles", "command", "expected"),
54 [
55 (
56 (0, 0, "NORTH"),
57 [[0, 1]],
58 "F",
59 (0, 0, "NORTH", "STOPPED"),
60 ),
61 (
62 (0, 0, "NORTH"),
63 [[1, 1]],
64 "FRF",
65 (0, 1, "EAST", "STOPPED"),
66 ),
67 (
68 (4, 2, "EAST"),
69 [[1, 4], [5, 5], [7, 4]],
70 "FLFFFRFLB",
71 (5, 4, "NORTH", "STOPPED"),
72 ),
73 ],
74)
75def test_rover_avoids_obstacles(init, obstacles, command, expected):
76 rover = Rover(*init, obstacles=obstacles)
77 assert rover.move(command) == expected