truth table: tests and solutions
Nullary and Unary Operations tests
the code from truth_table/tests/test_nullary_unary.py from truth table: Nullary and Unary Operations
1import src.truth_table
2import unittest
3
4
5class TestNullaryOperations(unittest.TestCase):
6
7 def test_logical_true(self):
8 self.assertTrue(
9 src.truth_table.logical_true()
10 )
11
12 def test_logical_false(self):
13 self.assertFalse(
14 src.truth_table.logical_false()
15 )
16
17
18class TestUnaryOperations(unittest.TestCase):
19
20 def test_logical_identity(self):
21 self.assertTrue(
22 src.truth_table.logical_identity(True)
23 )
24 self.assertFalse(
25 src.truth_table.logical_identity(False)
26 )
27
28 def test_logical_negation_aka_not(self):
29 self.assertFalse(
30 src.truth_table.logical_negation(True)
31 )
32 self.assertTrue(
33 src.truth_table.logical_negation(False)
34 )
35
36
37# Exceptions seen
38# AssertionError
39# AttributeError
40# TypeError
Binary Operations tests
Binary Operations 1 tests
the code from truth_table/tests/test_binary.py from truth table: Binary Operations 1
1import src.truth_table
2import unittest
3
4
5class TestBinaryOperations(unittest.TestCase):
6
7 def test_contradiction(self):
8 contradiction = src.truth_table.contradiction
9 self.assertFalse(contradiction(True, True))
10 self.assertFalse(contradiction(True, False))
11 self.assertFalse(contradiction(False, True))
12 self.assertFalse(contradiction(False, False))
13
14 def test_logical_conjunction(self):
15 logical_conjunction = (
16 src.truth_table.logical_conjunction
17 )
18 self.assertTrue(
19 logical_conjunction(True, True)
20 )
21 self.assertFalse(
22 logical_conjunction(True, False)
23 )
24 self.assertFalse(
25 logical_conjunction(False, True)
26 )
27 self.assertFalse(
28 logical_conjunction(False, False)
29 )
30
31 def test_project_second(self):
32 project_second = src.truth_table.project_second
33 self.assertTrue(project_second(True, True))
34 self.assertFalse(project_second(True, False))
35 self.assertTrue(project_second(False, True))
36 self.assertFalse(project_second(False, False))
37
38 def test_converse_non_implication(self):
39 converse_non_implication = (
40 src.truth_table.converse_non_implication
41 )
42 self.assertFalse(
43 converse_non_implication(True, True)
44 )
45 self.assertFalse(
46 converse_non_implication(True, False)
47 )
48 self.assertTrue(
49 converse_non_implication(False, True)
50 )
51 self.assertFalse(
52 converse_non_implication(False, False)
53 )
54
55
56# Exceptions seen
57# AttributeError
58# TypeError
59# AssertionError
Binary Operations 2 tests
the code from truth_table/tests/test_binary.py from truth table: Binary Operations 2
1import src.truth_table
2import unittest
3
4
5class TestBinaryOperations(unittest.TestCase):
6
7 def test_contradiction(self):
8 self.assertFalse(
9 src.truth_table.contradiction(True, True)
10 )
11 self.assertFalse(
12 src.truth_table.contradiction(True, False)
13 )
14 self.assertFalse(
15 src.truth_table.contradiction(False, True)
16 )
17 self.assertFalse(
18 src.truth_table.contradiction(False, False)
19 )
20
21 def test_logical_conjunction(self):
22 self.assertTrue(
23 src.truth_table.logical_conjunction(
24 True, True
25 )
26 )
27 self.assertFalse(
28 src.truth_table.logical_conjunction(
29 True, False
30 )
31 )
32 self.assertFalse(
33 src.truth_table.logical_conjunction(
34 False, True
35 )
36 )
37 self.assertFalse(
38 src.truth_table.logical_conjunction(
39 False, False
40 )
41 )
42
43 def test_project_second(self):
44 self.assertTrue(
45 src.truth_table.project_second(True, True)
46 )
47 self.assertFalse(
48 src.truth_table.project_second(True, False)
49 )
50 self.assertTrue(
51 src.truth_table.project_second(False, True)
52 )
53 self.assertFalse(
54 src.truth_table.project_second(False, False)
55 )
56
57 def test_converse_non_implication(self):
58 self.assertFalse(
59 src.truth_table.converse_non_implication(
60 True, True
61 )
62 )
63 self.assertFalse(
64 src.truth_table.converse_non_implication(
65 True, False
66 )
67 )
68 self.assertTrue(
69 src.truth_table.converse_non_implication(
70 False, True
71 )
72 )
73 self.assertFalse(
74 src.truth_table.converse_non_implication(
75 False, False
76 )
77 )
78
79 def test_negate_first(self):
80 self.assertFalse(
81 src.truth_table.negate_first(True, True)
82 )
83 self.assertFalse(
84 src.truth_table.negate_first(True, False)
85 )
86 self.assertTrue(
87 src.truth_table.negate_first(False, True)
88 )
89 self.assertTrue(
90 src.truth_table.negate_first(False, False)
91 )
92
93 def test_logical_nand(self):
94 self.assertFalse(
95 src.truth_table.logical_nand(True, True)
96 )
97 self.assertTrue(
98 src.truth_table.logical_nand(True, False)
99 )
100 self.assertTrue(
101 src.truth_table.logical_nand(False, True)
102 )
103 self.assertTrue(
104 src.truth_table.logical_nand(False, False)
105 )
106
107 def test_tautology(self):
108 self.assertTrue(
109 src.truth_table.tautology(True, True)
110 )
111 self.assertTrue(
112 src.truth_table.tautology(True, False)
113 )
114 self.assertTrue(
115 src.truth_table.tautology(False, True)
116 )
117 self.assertTrue(
118 src.truth_table.tautology(False, False)
119 )
120
121 def test_logical_disjunction(self):
122 self.assertTrue(
123 src.truth_table.logical_disjunction(
124 True, True
125 )
126 )
127 self.assertTrue(
128 src.truth_table.logical_disjunction(
129 True, False
130 )
131 )
132 self.assertTrue(
133 src.truth_table.logical_disjunction(
134 False, True
135 )
136 )
137 self.assertFalse(
138 src.truth_table.logical_disjunction(
139 False, False
140 )
141 )
142
143
144# Exceptions seen
145# AttributeError
146# TypeError
147# AssertionError
148# SyntaxError
Binary Operations 3 tests
the code from truth_table/tests/test_binary.py from truth table: Binary Operations 3
1import src.truth_table
2import unittest
3
4
5class TestBinaryOperations(unittest.TestCase):
6
7 def test_contradiction(self):
8 self.assertFalse(
9 src.truth_table.contradiction(True, True)
10 )
11 self.assertFalse(
12 src.truth_table.contradiction(True, False)
13 )
14 self.assertFalse(
15 src.truth_table.contradiction(False, True)
16 )
17 self.assertFalse(
18 src.truth_table.contradiction(False, False)
19 )
20
21 def test_logical_conjunction(self):
22 self.assertTrue(
23 src.truth_table.logical_conjunction(
24 True, True
25 )
26 )
27 self.assertFalse(
28 src.truth_table.logical_conjunction(
29 True, False
30 )
31 )
32 self.assertFalse(
33 src.truth_table.logical_conjunction(
34 False, True
35 )
36 )
37 self.assertFalse(
38 src.truth_table.logical_conjunction(
39 False, False
40 )
41 )
42
43 def test_project_second(self):
44 self.assertTrue(
45 src.truth_table.project_second(True, True)
46 )
47 self.assertFalse(
48 src.truth_table.project_second(True, False)
49 )
50 self.assertTrue(
51 src.truth_table.project_second(False, True)
52 )
53 self.assertFalse(
54 src.truth_table.project_second(False, False)
55 )
56
57 def test_converse_non_implication(self):
58 self.assertFalse(
59 src.truth_table.converse_non_implication(
60 True, True
61 )
62 )
63 self.assertFalse(
64 src.truth_table.converse_non_implication(
65 True, False
66 )
67 )
68 self.assertTrue(
69 src.truth_table.converse_non_implication(
70 False, True
71 )
72 )
73 self.assertFalse(
74 src.truth_table.converse_non_implication(
75 False, False
76 )
77 )
78
79 def test_negate_first(self):
80 self.assertFalse(
81 src.truth_table.negate_first(True, True)
82 )
83 self.assertFalse(
84 src.truth_table.negate_first(True, False)
85 )
86 self.assertTrue(
87 src.truth_table.negate_first(False, True)
88 )
89 self.assertTrue(
90 src.truth_table.negate_first(False, False)
91 )
92
93 def test_logical_nand(self):
94 self.assertFalse(
95 src.truth_table.logical_nand(True, True)
96 )
97 self.assertTrue(
98 src.truth_table.logical_nand(True, False)
99 )
100 self.assertTrue(
101 src.truth_table.logical_nand(False, True)
102 )
103 self.assertTrue(
104 src.truth_table.logical_nand(False, False)
105 )
106
107 def test_tautology(self):
108 self.assertTrue(
109 src.truth_table.tautology(True, True)
110 )
111 self.assertTrue(
112 src.truth_table.tautology(True, False)
113 )
114 self.assertTrue(
115 src.truth_table.tautology(False, True)
116 )
117 self.assertTrue(
118 src.truth_table.tautology(False, False)
119 )
120
121 def test_logical_disjunction(self):
122 self.assertTrue(
123 src.truth_table.logical_disjunction(
124 True, True
125 )
126 )
127 self.assertTrue(
128 src.truth_table.logical_disjunction(
129 True, False
130 )
131 )
132 self.assertTrue(
133 src.truth_table.logical_disjunction(
134 False, True
135 )
136 )
137 self.assertFalse(
138 src.truth_table.logical_disjunction(
139 False, False
140 )
141 )
142
143 def test_exclusive_disjunction(self):
144 self.assertFalse(
145 src.truth_table.exclusive_disjunction(
146 True, True
147 )
148 )
149 self.assertTrue(
150 src.truth_table.exclusive_disjunction(
151 True, False
152 )
153 )
154 self.assertTrue(
155 src.truth_table.exclusive_disjunction(
156 False, True
157 )
158 )
159 self.assertFalse(
160 src.truth_table.exclusive_disjunction(
161 False, False
162 )
163 )
164
165 def test_material_non_implication(self):
166 self.assertFalse(
167 src.truth_table.material_non_implication(
168 True, True
169 )
170 )
171 self.assertTrue(
172 src.truth_table.material_non_implication(
173 True, False
174 )
175 )
176 self.assertFalse(
177 src.truth_table.material_non_implication(
178 False, True
179 )
180 )
181 self.assertFalse(
182 src.truth_table.material_non_implication(
183 False, False
184 )
185 )
186
187 def test_project_first(self):
188 self.assertTrue(
189 src.truth_table.project_first(True, True)
190 )
191 self.assertTrue(
192 src.truth_table.project_first(True, False)
193 )
194 self.assertFalse(
195 src.truth_table.project_first(False, True)
196 )
197 self.assertFalse(
198 src.truth_table.project_first(False, False)
199 )
200
201 def test_converse_implication(self):
202 self.assertTrue(
203 src.truth_table.converse_implication(
204 True, True
205 )
206 )
207 self.assertTrue(
208 src.truth_table.converse_implication(
209 True, False
210 )
211 )
212 self.assertFalse(
213 src.truth_table.converse_implication(
214 False, True
215 )
216 )
217 self.assertTrue(
218 src.truth_table.converse_implication(
219 False, False
220 )
221 )
222
223
224# Exceptions seen
225# AttributeError
226# TypeError
227# AssertionError
228# SyntaxError
Binary Operations 4 tests
the code from truth_table/tests/test_binary.py from truth table: Binary Operations 4
solutions
the solutions in truth_table/src/truth_table.py from truth table
1def logical_true():
2 return True
3
4
5def logical_false():
6 return False
7
8
9def logical_identity(the_input):
10 return the_input
11
12
13def logical_negation(the_input):
14 return not the_input
15
16
17def contradiction(first_input, second_input):
18 return False
19
20
21def logical_conjunction(first_input, second_input):
22 return first_input and second_input
23
24
25def project_second(first_input, second_input):
26 return second_input
27
28
29def converse_non_implication(first_input, second_input):
30 return logical_conjunction(
31 logical_negation(first_input),
32 second_input
33 )
34 return not first_input and second_input
35
36
37def negate_first(first_input, second_input):
38 return not first_input
39
40
41def logical_nand(first_input, second_input):
42 return logical_negation(
43 logical_conjunction(first_input, second_input)
44 )
45 return not (first_input and second_input)
46
47
48def tautology(first_input, second_input):
49 return True
50
51
52def logical_disjunction(first_input, second_input):
53 return logical_negation(
54 logical_conjunction(
55 logical_negation(first_input),
56 logical_negation(second_input)
57 )
58 )
59 return first_input or second_input
60
61
62def exclusive_disjunction(first_input, second_input):
63 return first_input != second_input
64 return not (first_input == second_input)
65 return logical_disjunction(
66 converse_non_implication(
67 first_input,
68 second_input
69 ),
70 material_non_implication(
71 first_input,
72 second_input
73 )
74 )
75 return (
76 (not first_input and second_input)
77 or
78 (first_input and not second_input)
79 )
80
81
82def material_non_implication(first_input, second_input):
83 return logical_conjunction(
84 first_input,
85 logical_negation(second_input)
86 )
87 return first_input and not second_input
88
89
90def project_first(first_input, second_input):
91 return first_input
92
93
94def converse_implication(first_input, second_input):
95 return logical_disjunction(
96 first_input,
97 logical_negation(second_input)
98 )
99 return first_input or not second_input
100
101
102def negate_second(first_input, second_input):
103 return not second_input
104
105
106def logical_nor(first_input, second_input):
107 return not (first_input or second_input)
108
109
110def logical_equality(first_input, second_input):
111 return first_input == second_input
112 return (
113 (first_input or not second_input)
114 and
115 (not first_input or second_input)
116 )
117
118
119def material_implication(first_input, second_input):
120 return not first_input or second_input
Traffic Light: tests and solutions
the code from traffic_light/tests/test_traffic_light.py from Traffic Light
1import src.traffic_light
2import unittest
3
4
5RED, YELLOW, GREEN = 'RED', 'YELLOW', 'GREEN'
6NO_WALK = 'NO WALK'
7WALK = (RED, 'WALK')
8YELLOW_NO_WALK = (YELLOW, NO_WALK)
9GREEN_NO_WALK = (GREEN, NO_WALK)
10
11
12class TestTrafficLight(unittest.TestCase):
13
14 def test_red_traffic_light_w_walk(self):
15 self.assertEqual(
16 src.traffic_light.show(
17 current_light=RED,
18 timer_done=True,
19 walk_button=True,
20 ),
21 WALK
22 )
23
24 self.assertEqual(
25 src.traffic_light.show(
26 current_light=RED,
27 timer_done=True,
28 walk_button=False,
29 ),
30 GREEN_NO_WALK
31 )
32
33 self.assertEqual(
34 src.traffic_light.show(
35 current_light=RED,
36 timer_done=False,
37 walk_button=True,
38 ),
39 WALK
40 )
41
42 self.assertEqual(
43 src.traffic_light.show(
44 current_light=RED,
45 timer_done=False,
46 walk_button=False,
47 ),
48 WALK
49 )
50
51 def test_yellow_traffic_light_w_walk(self):
52 self.assertEqual(
53 src.traffic_light.show(
54 current_light=YELLOW,
55 timer_done=True,
56 walk_button=True,
57 ),
58 WALK
59 )
60
61 self.assertEqual(
62 src.traffic_light.show(
63 current_light=YELLOW,
64 timer_done=True,
65 walk_button=False,
66 ),
67 WALK
68 )
69
70 self.assertEqual(
71 src.traffic_light.show(
72 current_light=YELLOW,
73 timer_done=False,
74 walk_button=True,
75 ),
76 YELLOW_NO_WALK
77 )
78
79 self.assertEqual(
80 src.traffic_light.show(
81 current_light=YELLOW,
82 timer_done=False,
83 walk_button=False,
84 ),
85 YELLOW_NO_WALK
86 )
87
88 def test_green_traffic_light_w_walk(self):
89 self.assertEqual(
90 src.traffic_light.show(
91 current_light=GREEN,
92 timer_done=True,
93 walk_button=True,
94 ),
95 YELLOW_NO_WALK
96 )
97
98 self.assertEqual(
99 src.traffic_light.show(
100 current_light=GREEN,
101 timer_done=True,
102 walk_button=False,
103 ),
104 YELLOW_NO_WALK
105 )
106
107 self.assertEqual(
108 src.traffic_light.show(
109 current_light=GREEN,
110 timer_done=False,
111 walk_button=True,
112 ),
113 GREEN_NO_WALK
114 )
115
116 self.assertEqual(
117 src.traffic_light.show(
118 current_light=GREEN,
119 timer_done=False,
120 walk_button=False,
121 ),
122 GREEN_NO_WALK
123 )
124
125
126# Exceptions seen
127# AssertionError
128# NameError
129# AttributeError
130# TypeError
131# SyntaxError
the code from traffic_light/src/traffic_light.py from Traffic Light
1def show(
2 current_light='RED', timer_done=False,
3 walk_button=False,
4 ):
5 red, yellow, green = 'RED', 'YELLOW', 'GREEN'
6 walk = (red, 'WALK')
7 no_walk = 'NO WALK'
8
9 if not timer_done and current_light != red:
10 return current_light, no_walk
11
12 if timer_done:
13 if current_light == green:
14 return yellow, no_walk
15 if current_light == red and not walk_button:
16 return green, no_walk
17
18 return walk
Automated Teller Machine: tests and solutions
the code from atm/tests/test_atm.py from Automated Teller Machine
1import src.atm
2import unittest
3
4
5DENIED = 'DENIED'
6
7
8class TestATM(unittest.TestCase):
9
10 def test_right_pin_enough_money_w_card(self):
11 self.assertEqual(
12 src.atm.withdraw(
13 right_pin=True,
14 enough_money=True,
15 above_daily_limit=True,
16 card_expired=True,
17 ),
18 DENIED
19 )
20
21 self.assertEqual(
22 src.atm.withdraw(
23 right_pin=True,
24 enough_money=True,
25 above_daily_limit=True,
26 card_expired=False,
27 ),
28 DENIED
29 )
30
31 self.assertEqual(
32 src.atm.withdraw(
33 right_pin=True,
34 enough_money=True,
35 above_daily_limit=False,
36 card_expired=True,
37 ),
38 DENIED
39 )
40
41 self.assertEqual(
42 src.atm.withdraw(
43 right_pin=True,
44 enough_money=True,
45 above_daily_limit=False,
46 card_expired=False,
47 ),
48 'CASH'
49 )
50
51 def test_right_pin_not_enough_money_w_card(self):
52 self.assertEqual(
53 src.atm.withdraw(
54 right_pin=True,
55 enough_money=False,
56 above_daily_limit=True,
57 card_expired=True,
58 ),
59 DENIED
60 )
61
62 self.assertEqual(
63 src.atm.withdraw(
64 right_pin=True,
65 enough_money=False,
66 above_daily_limit=True,
67 card_expired=False,
68 ),
69 DENIED
70 )
71
72 self.assertEqual(
73 src.atm.withdraw(
74 right_pin=True,
75 enough_money=False,
76 above_daily_limit=False,
77 card_expired=True,
78 ),
79 DENIED
80 )
81
82 self.assertEqual(
83 src.atm.withdraw(
84 right_pin=True,
85 enough_money=False,
86 above_daily_limit=False,
87 card_expired=True,
88 ),
89 DENIED
90 )
91
92 def test_wrong_pin_enough_money_w_card(self):
93 self.assertEqual(
94 src.atm.withdraw(
95 right_pin=False,
96 enough_money=True,
97 above_daily_limit=True,
98 card_expired=True,
99 ),
100 DENIED
101 )
102
103 self.assertEqual(
104 src.atm.withdraw(
105 right_pin=False,
106 enough_money=True,
107 above_daily_limit=True,
108 card_expired=False,
109 ),
110 DENIED
111 )
112
113 self.assertEqual(
114 src.atm.withdraw(
115 right_pin=False,
116 enough_money=True,
117 above_daily_limit=False,
118 card_expired=True,
119 ),
120 DENIED
121 )
122
123 self.assertEqual(
124 src.atm.withdraw(
125 right_pin=False,
126 enough_money=True,
127 above_daily_limit=False,
128 card_expired=False,
129 ),
130 DENIED
131 )
132
133 def test_wrong_pin_not_enough_money_w_card(self):
134 self.assertEqual(
135 src.atm.withdraw(
136 right_pin=False,
137 enough_money=False,
138 above_daily_limit=True,
139 card_expired=True,
140 ),
141 DENIED
142 )
143
144 self.assertEqual(
145 src.atm.withdraw(
146 right_pin=False,
147 enough_money=False,
148 above_daily_limit=True,
149 card_expired=False,
150 ),
151 DENIED
152 )
153
154 self.assertEqual(
155 src.atm.withdraw(
156 right_pin=False,
157 enough_money=False,
158 above_daily_limit=False,
159 card_expired=True,
160 ),
161 DENIED
162 )
163
164 self.assertEqual(
165 src.atm.withdraw(
166 right_pin=False,
167 enough_money=False,
168 above_daily_limit=False,
169 card_expired=False,
170 ),
171 DENIED
172 )
173
174
175# Exceptions seen
176# AssertionError
177# NameError
178# AttributeError
179# TypeError
180# SyntaxError
the code from atm/src/atm.py from Automated Teller Machine
1def withdraw(
2 right_pin, enough_money,
3 above_daily_limit=False, card_expired=False,
4 ):
5 denied = 'DENIED'
6
7 if card_expired:
8 return denied
9
10 if above_daily_limit:
11 return denied
12
13 if not right_pin:
14 return denied
15
16 if not enough_money:
17 return denied
18
19 return 'CASH'
Microwave: tests and solutions
the code from microwave/tests/test_microwave.py from Microwave
1import src.microwave
2import unittest
3
4
5OFF = 'OFF'
6
7
8class TestMicrowave(unittest.TestCase):
9
10 def test_too_hot_open_door_timer_set(self):
11 self.assertEqual(
12 src.microwave.microwave(
13 door_is_open=True,
14 timer_is_set=True,
15 start_is_pushed=True,
16 too_hot=True,
17 ),
18 OFF
19 )
20
21 self.assertEqual(
22 src.microwave.microwave(
23 door_is_open=True,
24 timer_is_set=True,
25 start_is_pushed=True,
26 too_hot=False,
27 ),
28 OFF
29 )
30
31 self.assertEqual(
32 src.microwave.microwave(
33 door_is_open=True,
34 timer_is_set=True,
35 start_is_pushed=False,
36 too_hot=True,
37 ),
38 OFF
39 )
40
41 self.assertEqual(
42 src.microwave.microwave(
43 door_is_open=True,
44 timer_is_set=True,
45 start_is_pushed=False,
46 too_hot=False,
47 ),
48 OFF
49 )
50
51 def test_too_hot_open_door_timer_not_set(self):
52 self.assertEqual(
53 src.microwave.microwave(
54 door_is_open=True,
55 timer_is_set=False,
56 start_is_pushed=True,
57 too_hot=True,
58 ),
59 OFF
60 )
61
62 self.assertEqual(
63 src.microwave.microwave(
64 door_is_open=True,
65 timer_is_set=False,
66 start_is_pushed=True,
67 too_hot=False,
68 ),
69 OFF
70 )
71
72 self.assertEqual(
73 src.microwave.microwave(
74 door_is_open=True,
75 timer_is_set=False,
76 start_is_pushed=False,
77 too_hot=True,
78 ),
79 OFF
80 )
81
82 self.assertEqual(
83 src.microwave.microwave(
84 door_is_open=True,
85 timer_is_set=False,
86 start_is_pushed=False,
87 too_hot=False,
88 ),
89 OFF
90 )
91
92 def test_too_hot_closed_door_timer_set(self):
93 self.assertEqual(
94 src.microwave.microwave(
95 door_is_open=False,
96 timer_is_set=True,
97 start_is_pushed=True,
98 too_hot=True,
99 ),
100 OFF
101 )
102
103 self.assertEqual(
104 src.microwave.microwave(
105 door_is_open=False,
106 timer_is_set=True,
107 start_is_pushed=True,
108 too_hot=False,
109 ),
110 'HEATING'
111 )
112
113 self.assertEqual(
114 src.microwave.microwave(
115 door_is_open=False,
116 timer_is_set=True,
117 start_is_pushed=False,
118 too_hot=True,
119 ),
120 OFF
121 )
122
123 self.assertEqual(
124 src.microwave.microwave(
125 door_is_open=False,
126 timer_is_set=True,
127 start_is_pushed=False,
128 too_hot=False,
129 ),
130 OFF
131 )
132
133 def test_too_hot_closed_door_timer_not_set(self):
134 self.assertEqual(
135 src.microwave.microwave(
136 door_is_open=False,
137 timer_is_set=False,
138 start_is_pushed=True,
139 too_hot=True,
140 ),
141 OFF
142 )
143
144 self.assertEqual(
145 src.microwave.microwave(
146 door_is_open=False,
147 timer_is_set=False,
148 start_is_pushed=True,
149 too_hot=False,
150 ),
151 OFF
152 )
153
154 self.assertEqual(
155 src.microwave.microwave(
156 door_is_open=False,
157 timer_is_set=False,
158 start_is_pushed=False,
159 too_hot=True,
160 ),
161 OFF
162 )
163
164 self.assertEqual(
165 src.microwave.microwave(
166 door_is_open=False,
167 timer_is_set=False,
168 start_is_pushed=False,
169 too_hot=False,
170 ),
171 OFF
172 )
173
174
175# Exceptions seen
176# AssertionError
177# NameError
178# AttributeError
179# TypeError
180# SyntaxError
the code from microwave/src/microwave.py from Microwave
1def microwave(
2 door_is_open, start_is_pushed,
3 timer_is_set=False, too_hot=False,
4 ):
5 off = 'OFF'
6
7 if too_hot:
8 return off
9 if not timer_is_set:
10 return off
11 if not start_is_pushed:
12 return off
13 if door_is_open:
14 return off
15
16 return 'HEATING'
17
18 if (
19 not door_is_open
20 and start_is_pushed
21 and timer_is_set
22 and not too_hot
23 ):
24 return 'HEATING'
25
26 return 'OFF'
27
28 if too_hot or not timer_is_set:
29 return 'OFF'
30
31 if door_is_open or not start_is_pushed:
32 return 'OFF'
33 else:
34 return 'HEATING'
Car: tests and solutions
the code from car/tests/test_car.py from Car
1import src.car
2import unittest
3
4
5OFF = 'OFF'
6
7
8class TestCar(unittest.TestCase):
9
10 def test_key_close_brake_pressed_w_gear(self):
11 self.assertEqual(
12 src.car.starter(
13 key_is_close=True,
14 brake_is_pressed=True,
15 start_is_pushed=True,
16 in_park=True,
17 ),
18 'ON'
19 )
20
21 self.assertEqual(
22 src.car.starter(
23 key_is_close=True,
24 brake_is_pressed=True,
25 start_is_pushed=True,
26 in_park=False,
27 ),
28 OFF
29 )
30
31 self.assertEqual(
32 src.car.starter(
33 key_is_close=True,
34 brake_is_pressed=True,
35 start_is_pushed=False,
36 in_park=True,
37 ),
38 OFF
39 )
40
41 self.assertEqual(
42 src.car.starter(
43 key_is_close=True,
44 brake_is_pressed=True,
45 start_is_pushed=False,
46 in_park=False,
47 ),
48 OFF
49 )
50
51 def test_key_close_brake_not_pressed_w_gear(self):
52 self.assertEqual(
53 src.car.starter(
54 key_is_close=True,
55 brake_is_pressed=False,
56 start_is_pushed=True,
57 in_park=True,
58 ),
59 OFF
60 )
61
62 self.assertEqual(
63 src.car.starter(
64 key_is_close=True,
65 brake_is_pressed=False,
66 start_is_pushed=True,
67 in_park=False,
68 ),
69 OFF
70 )
71
72 self.assertEqual(
73 src.car.starter(
74 key_is_close=True,
75 brake_is_pressed=False,
76 start_is_pushed=False,
77 in_park=True,
78 ),
79 OFF
80 )
81
82 self.assertEqual(
83 src.car.starter(
84 key_is_close=True,
85 brake_is_pressed=False,
86 start_is_pushed=False,
87 in_park=False,
88 ),
89 OFF
90 )
91
92 def test_key_far_brake_pressed_w_gear(self):
93 self.assertEqual(
94 src.car.starter(
95 key_is_close=False,
96 brake_is_pressed=True,
97 start_is_pushed=True,
98 in_park=True,
99 ),
100 OFF
101 )
102
103 self.assertEqual(
104 src.car.starter(
105 key_is_close=False,
106 brake_is_pressed=True,
107 start_is_pushed=True,
108 in_park=False,
109 ),
110 OFF
111 )
112
113 self.assertEqual(
114 src.car.starter(
115 key_is_close=False,
116 brake_is_pressed=True,
117 start_is_pushed=False,
118 in_park=True,
119 ),
120 OFF
121 )
122
123 self.assertEqual(
124 src.car.starter(
125 key_is_close=False,
126 brake_is_pressed=True,
127 start_is_pushed=False,
128 in_park=False,
129 ),
130 OFF
131 )
132
133 def test_key_far_brake_not_pressed_w_gear(self):
134 self.assertEqual(
135 src.car.starter(
136 key_is_close=False,
137 brake_is_pressed=False,
138 start_is_pushed=True,
139 in_park=True,
140 ),
141 OFF
142 )
143
144 self.assertEqual(
145 src.car.starter(
146 key_is_close=False,
147 brake_is_pressed=False,
148 start_is_pushed=True,
149 in_park=False,
150 ),
151 OFF
152 )
153
154 self.assertEqual(
155 src.car.starter(
156 key_is_close=False,
157 brake_is_pressed=False,
158 start_is_pushed=False,
159 in_park=True,
160 ),
161 OFF
162 )
163
164 self.assertEqual(
165 src.car.starter(
166 key_is_close=False,
167 brake_is_pressed=False,
168 start_is_pushed=False,
169 in_park=False,
170 ),
171 OFF
172 )
173
174
175# Exceptions seen
176# AssertionError
177# NameError
178# AttributeError
179# TypeError
180# SyntaxError
the code from car/src/car.py from Car
1def starter(
2 key_is_close, start_is_pushed,
3 brake_is_pressed=False, in_park=False,
4 ):
5 if not (
6 key_is_close
7 and start_is_pushed
8 and brake_is_pressed
9 and in_park
10 ):
11 return 'OFF'
12
13 return 'ON'
Elevator: tests and solutions
the code from elevator/tests/test_elevator.py from Elevator
1import src.elevator
2import unittest
3
4
5NOT_MOVE = 'NOT MOVE'
6
7
8class TestElevator(unittest.TestCase):
9
10 def test_doors_clear_number_pushed_w_emergency(self):
11 self.assertEqual(
12 src.elevator.elevator(
13 doors_clear=True,
14 number_pushed=True,
15 above_weight_limit=True,
16 emergency=True,
17 ),
18 NOT_MOVE
19 )
20
21 self.assertEqual(
22 src.elevator.elevator(
23 doors_clear=True,
24 number_pushed=True,
25 above_weight_limit=True,
26 emergency=False,
27 ),
28 NOT_MOVE
29 )
30
31 self.assertEqual(
32 src.elevator.elevator(
33 doors_clear=True,
34 number_pushed=True,
35 above_weight_limit=False,
36 emergency=True,
37 ),
38 NOT_MOVE
39 )
40
41 self.assertEqual(
42 src.elevator.elevator(
43 doors_clear=True,
44 number_pushed=True,
45 above_weight_limit=False,
46 emergency=False,
47 ),
48 'MOVE'
49 )
50
51 def test_doors_clear_number_not_pushed_w_emergency(self):
52 self.assertEqual(
53 src.elevator.elevator(
54 doors_clear=True,
55 number_pushed=False,
56 above_weight_limit=True,
57 emergency=True,
58 ),
59 NOT_MOVE
60 )
61
62 self.assertEqual(
63 src.elevator.elevator(
64 doors_clear=True,
65 number_pushed=False,
66 above_weight_limit=True,
67 emergency=False,
68 ),
69 NOT_MOVE
70 )
71
72 self.assertEqual(
73 src.elevator.elevator(
74 doors_clear=True,
75 number_pushed=False,
76 above_weight_limit=False,
77 emergency=True,
78 ),
79 NOT_MOVE
80 )
81
82 self.assertEqual(
83 src.elevator.elevator(
84 doors_clear=True,
85 number_pushed=False,
86 above_weight_limit=False,
87 emergency=False,
88 ),
89 NOT_MOVE
90 )
91
92 def test_doors_not_clear_number_pushed_w_emergency(self):
93 self.assertEqual(
94 src.elevator.elevator(
95 doors_clear=False,
96 number_pushed=True,
97 above_weight_limit=True,
98 emergency=True,
99 ),
100 NOT_MOVE
101 )
102
103 self.assertEqual(
104 src.elevator.elevator(
105 doors_clear=False,
106 number_pushed=True,
107 above_weight_limit=True,
108 emergency=False,
109 ),
110 NOT_MOVE
111 )
112
113 self.assertEqual(
114 src.elevator.elevator(
115 doors_clear=False,
116 number_pushed=True,
117 above_weight_limit=False,
118 emergency=True,
119 ),
120 NOT_MOVE
121 )
122
123 self.assertEqual(
124 src.elevator.elevator(
125 doors_clear=False,
126 number_pushed=True,
127 above_weight_limit=False,
128 emergency=False,
129 ),
130 NOT_MOVE
131 )
132
133 def test_doors_not_clear_number_not_pushed_w_emergency(self):
134 self.assertEqual(
135 src.elevator.elevator(
136 doors_clear=False,
137 number_pushed=False,
138 above_weight_limit=True,
139 emergency=True,
140 ),
141 NOT_MOVE
142 )
143
144 self.assertEqual(
145 src.elevator.elevator(
146 doors_clear=False,
147 number_pushed=False,
148 above_weight_limit=True,
149 emergency=False,
150 ),
151 NOT_MOVE
152 )
153
154 self.assertEqual(
155 src.elevator.elevator(
156 doors_clear=False,
157 number_pushed=False,
158 above_weight_limit=False,
159 emergency=True,
160 ),
161 NOT_MOVE
162 )
163
164 self.assertEqual(
165 src.elevator.elevator(
166 doors_clear=False,
167 above_weight_limit=False,
168 number_pushed=False,
169 emergency=False,
170 ),
171 NOT_MOVE
172 )
173
174
175# Exceptions seen
176# AssertionError
177# NameError
178# AttributeError
179# TypeError
the code from elevator/src/elevator.py from Microwave
1def elevator(
2 doors_clear, number_pushed,
3 above_weight_limit=False, emergency=False,
4 ):
5 if (
6 emergency
7 or above_weight_limit
8 or not (
9 doors_clear
10 and
11 number_pushed
12 )
13 ):
14 return 'NOT MOVE'
15
16 return 'MOVE'
17
18 not_move = 'NOT MOVE'
19
20 if emergency:
21 return not_move
22
23 if above_weight_limit:
24 return not_move
25
26 if not doors_clear:
27 return not_move
28
29 if not number_pushed:
30 return not_move
31
32 return 'MOVE'
Parking Garage: tests and solutions
the code from parking_garage/tests/test_parking_garage.py from ParkingGarage
1
the code from parking_garage/src/parking_garage.py from Microwave
1