Elevator: tests and solutions


makePythonTdd Elevator

The code in makePythonTdd.sh from Elevator

 1#!/bin/bash
 2uv init elevator
 3cd elevator
 4mkdir tests
 5touch tests/__init__.py
 6
 7echo "import unittest
 8
 9
10class TestElevator(unittest.TestCase):
11
12    def test_failure(self):
13        self.assertFalse(True)
14
15
16# Exceptions seen
17# AssertionError
18" > tests/test_elevator.py
19
20echo "pytest" > requirements.txt
21echo "pytest-watcher" >> requirements.txt
22uv add --requirement requirements.txt
23uv run pytest-watcher . --now

The code in makePythonTdd.ps1 from Elevator

 1uv init elevator
 2cd elevator
 3New-Item "src/elevator.py"
 4mkdir tests
 5New-Item tests/__init__.py
 6
 7"import unittest
 8
 9
10class TestElevator(unittest.TestCase):
11
12    def test_failure(self):
13        self.assertFalse(True)
14
15
16# Exceptions seen
17# AssertionError
18" | Out-File "tests/test_elevator.py" -Encoding UTF8
19
20"pytest" | Out-File requirements.txt -Encoding UTF8
21"pytest-watcher" >> requirements.txt
22uv add --requirement requirements.txt
23uv run pytest-watcher . --now

Elevator: tests

The code in elevator/tests/test_elevator.py from Elevator

elevator/tests/test_elevator.py
 1import src.elevator
 2import unittest
 3
 4
 5class TestElevator(unittest.TestCase):
 6
 7    def test_emergency_w_above_weight_doors_closed_number_pushed(self):
 8        self.assertFalse(
 9            src.elevator.controller(
10                number_pushed=True,
11                doors_closed=True,
12                above_weight=True,
13                emergency=True,
14            )
15        )
16        self.assertFalse(
17            src.elevator.controller(
18                number_pushed=True,
19                doors_closed=True,
20                above_weight=True,
21                emergency=False,
22            )
23        )
elevator/tests/test_elevator.py
25    def test_emergency_w_below_weight_doors_closed_number_pushed(self):
26        self.assertFalse(
27            src.elevator.controller(
28                number_pushed=True,
29                doors_closed=True,
30                above_weight=False,
31                emergency=True,
32            )
33        )
34        self.assertTrue(
35            src.elevator.controller(
36                number_pushed=True,
37                doors_closed=True,
38                above_weight=False,
39                emergency=False,
40            )
41        )
elevator/tests/test_elevator.py
43    def test_emergency_w_above_weight_doors_open_number_pushed(self):
44        self.assertFalse(
45            src.elevator.controller(
46                number_pushed=True,
47                doors_closed=False,
48                above_weight=True,
49                emergency=True,
50            )
51        )
52        self.assertFalse(
53            src.elevator.controller(
54                number_pushed=True,
55                doors_closed=False,
56                above_weight=True,
57                emergency=False,
58            )
59        )
elevator/tests/test_elevator.py
61    def test_emergency_w_below_weight_doors_open_number_pushed(self):
62        self.assertFalse(
63            src.elevator.controller(
64                number_pushed=True,
65                doors_closed=False,
66                above_weight=False,
67                emergency=True,
68            )
69        )
70        self.assertFalse(
71            src.elevator.controller(
72                number_pushed=True,
73                doors_closed=False,
74                above_weight=False,
75                emergency=False,
76            )
77        )
elevator/tests/test_elevator.py
79    def test_emergency_w_above_weight_doors_closed_number_not_pushed(self):
80        self.assertFalse(
81            src.elevator.controller(
82                number_pushed=False,
83                doors_closed=True,
84                above_weight=True,
85                emergency=True,
86            )
87        )
88        self.assertFalse(
89            src.elevator.controller(
90                number_pushed=False,
91                doors_closed=True,
92                above_weight=True,
93                emergency=False,
94            )
95        )
elevator/tests/test_elevator.py
 97    def test_emergency_w_below_weight_doors_closed_number_not_pushed(self):
 98        self.assertFalse(
 99            src.elevator.controller(
100                number_pushed=False,
101                doors_closed=True,
102                above_weight=False,
103                emergency=True,
104            )
105        )
106        self.assertFalse(
107            src.elevator.controller(
108                number_pushed=False,
109                doors_closed=True,
110                above_weight=False,
111                emergency=False,
112            )
113        )
elevator/tests/test_elevator.py
115    def test_emergency_w_above_weight_doors_open_number_not_pushed(self):
116        self.assertFalse(
117            src.elevator.controller(
118                number_pushed=False,
119                doors_closed=False,
120                above_weight=True,
121                emergency=True,
122            )
123        )
124        self.assertFalse(
125            src.elevator.controller(
126                number_pushed=False,
127                doors_closed=False,
128                above_weight=True,
129                emergency=False,
130            )
131        )
elevator/tests/test_elevator.py
133    def test_emergency_w_below_weight_doors_open_number_not_pushed(self):
134        self.assertFalse(
135            src.elevator.controller(
136                number_pushed=False,
137                doors_closed=False,
138                above_weight=False,
139                emergency=True,
140            )
141        )
142        self.assertFalse(
143            src.elevator.controller(
144                number_pushed=False,
145                doors_closed=False,
146                above_weight=False,
147                emergency=False,
148            )
149        )
150
151
152# Exceptions seen
153# AssertionError
154# NameError
155# AttributeError
156# TypeError
157# SyntaxError

Elevator: solution

The code in elevator/src/elevator.py from Elevator

elevator/src/elevator.py
 1def controller(
 2        number_pushed, doors_closed=False,
 3        above_weight=False, emergency=False,
 4    ):
 5    if (
 6        not (number_pushed and doors_closed)
 7        or above_weight
 8        or emergency
 9    ):
10        return False
11    return True