44
55
66# Tests adapted from `problem-specifications//canonical-data.json` @ v1.2.0
7+ # Tests for case-insensitivity are track-specific
8+
9+ class ForthParsingTest (unittest .TestCase ):
10+ def test_empty_input_empty_stack (self ):
11+ input_data = []
12+ expected = []
13+ self .assertEqual (evaluate (input_data ), expected )
14+
15+ def test_empty_line_empty_stack (self ):
16+ input_data = ["" ]
17+ expected = []
18+ self .assertEqual (evaluate (input_data ), expected )
19+
20+ def test_numbers_just_get_pushed_to_stack (self ):
21+ input_data = ["1 2 3 4 5" ]
22+ expected = [1 , 2 , 3 , 4 , 5 ]
23+ self .assertEqual (evaluate (input_data ), expected )
724
825
926class ForthAdditionTest (unittest .TestCase ):
1027 def test_can_add_two_numbers (self ):
1128 input_data = ["1 2 +" ]
1229 expected = [3 ]
13- self .assertEqual (expected , evaluate (input_data ))
30+ self .assertEqual (evaluate (input_data ), expected )
1431
1532 def test_errors_if_there_is_nothing_on_the_stack (self ):
1633 input_data = ["+" ]
@@ -27,7 +44,7 @@ class ForthSubtractionTest(unittest.TestCase):
2744 def test_can_subtract_two_numbers (self ):
2845 input_data = ["3 4 -" ]
2946 expected = [- 1 ]
30- self .assertEqual (expected , evaluate (input_data ))
47+ self .assertEqual (evaluate (input_data ), expected )
3148
3249 def test_errors_if_there_is_nothing_on_the_stack (self ):
3350 input_data = ["-" ]
@@ -44,7 +61,7 @@ class ForthMultiplicationTest(unittest.TestCase):
4461 def test_can_multiply_two_numbers (self ):
4562 input_data = ["2 4 *" ]
4663 expected = [8 ]
47- self .assertEqual (expected , evaluate (input_data ))
64+ self .assertEqual (evaluate (input_data ), expected )
4865
4966 def test_errors_if_there_is_nothing_on_the_stack (self ):
5067 input_data = ["*" ]
@@ -59,14 +76,14 @@ def test_errors_if_there_is_only_one_value_on_the_stack(self):
5976
6077class ForthDivisionTest (unittest .TestCase ):
6178 def test_can_divide_two_numbers (self ):
62- input_data = ["3 4 - " ]
63- expected = [- 1 ]
64- self .assertEqual (expected , evaluate (input_data ))
79+ input_data = ["12 3 / " ]
80+ expected = [4 ]
81+ self .assertEqual (evaluate (input_data ), expected )
6582
6683 def test_performs_integer_division (self ):
6784 input_data = ["8 3 /" ]
6885 expected = [2 ]
69- self .assertEqual (expected , evaluate (input_data ))
86+ self .assertEqual (evaluate (input_data ), expected )
7087
7188 def test_errors_if_dividing_by_zero (self ):
7289 input_data = ["4 0 /" ]
@@ -88,24 +105,24 @@ class ForthCombinedArithmeticTest(unittest.TestCase):
88105 def test_addition_and_subtraction (self ):
89106 input_data = ["1 2 + 4 -" ]
90107 expected = [- 1 ]
91- self .assertEqual (expected , evaluate (input_data ))
108+ self .assertEqual (evaluate (input_data ), expected )
92109
93110 def test_multiplication_and_division (self ):
94111 input_data = ["2 4 * 3 /" ]
95112 expected = [2 ]
96- self .assertEqual (expected , evaluate (input_data ))
113+ self .assertEqual (evaluate (input_data ), expected )
97114
98115
99116class ForthDupTest (unittest .TestCase ):
100117 def test_copies_the_top_value_on_the_stack (self ):
101118 input_data = ["1 DUP" ]
102119 expected = [1 , 1 ]
103- self .assertEqual (expected , evaluate (input_data ))
120+ self .assertEqual (evaluate (input_data ), expected )
104121
105122 def test_is_case_insensitive (self ):
106123 input_data = ["1 2 Dup" ]
107124 expected = [1 , 2 , 2 ]
108- self .assertEqual (expected , evaluate (input_data ))
125+ self .assertEqual (evaluate (input_data ), expected )
109126
110127 def test_errors_if_there_is_nothing_on_the_stack (self ):
111128 input_data = ["dup" ]
@@ -117,17 +134,17 @@ class ForthDropTest(unittest.TestCase):
117134 def test_removes_the_top_value_on_the_stack_if_it_is_the_only_one (self ):
118135 input_data = ["1 DROP" ]
119136 expected = []
120- self .assertEqual (expected , evaluate (input_data ))
137+ self .assertEqual (evaluate (input_data ), expected )
121138
122139 def test_removes_the_top_value_on_the_stack_if_it_not_the_only_one (self ):
123140 input_data = ["3 4 DROP" ]
124141 expected = [3 ]
125- self .assertEqual (expected , evaluate (input_data ))
142+ self .assertEqual (evaluate (input_data ), expected )
126143
127144 def test_is_case_insensitive (self ):
128145 input_data = ["1 2 Drop" ]
129146 expected = [1 ]
130- self .assertEqual (expected , evaluate (input_data ))
147+ self .assertEqual (evaluate (input_data ), expected )
131148
132149 def test_errors_if_there_is_nothing_on_the_stack (self ):
133150 input_data = ["drop" ]
@@ -139,17 +156,17 @@ class ForthSwapTest(unittest.TestCase):
139156 def test_swaps_only_two_values_on_stack (self ):
140157 input_data = ["1 2 SWAP" ]
141158 expected = [2 , 1 ]
142- self .assertEqual (expected , evaluate (input_data ))
159+ self .assertEqual (evaluate (input_data ), expected )
143160
144161 def test_swaps_two_two_values_on_stack (self ):
145162 input_data = ["1 2 3 SWAP" ]
146163 expected = [1 , 3 , 2 ]
147- self .assertEqual (expected , evaluate (input_data ))
164+ self .assertEqual (evaluate (input_data ), expected )
148165
149166 def test_is_case_insensitive (self ):
150167 input_data = ["3 4 Swap" ]
151168 expected = [4 , 3 ]
152- self .assertEqual (expected , evaluate (input_data ))
169+ self .assertEqual (evaluate (input_data ), expected )
153170
154171 def test_errors_if_there_is_nothing_on_the_stack (self ):
155172 input_data = ["swap" ]
@@ -166,17 +183,17 @@ class ForthOverTest(unittest.TestCase):
166183 def test_copies_the_second_element_if_there_are_only_two (self ):
167184 input_data = ["1 2 OVER" ]
168185 expected = [1 , 2 , 1 ]
169- self .assertEqual (expected , evaluate (input_data ))
186+ self .assertEqual (evaluate (input_data ), expected )
170187
171188 def test_copies_the_second_element_if_there_are_more_than_two (self ):
172189 input_data = ["1 2 3 OVER" ]
173190 expected = [1 , 2 , 3 , 2 ]
174- self .assertEqual (expected , evaluate (input_data ))
191+ self .assertEqual (evaluate (input_data ), expected )
175192
176193 def test_is_case_insensitive (self ):
177194 input_data = ["3 4 Over" ]
178195 expected = [3 , 4 , 3 ]
179- self .assertEqual (expected , evaluate (input_data ))
196+ self .assertEqual (evaluate (input_data ), expected )
180197
181198 def test_errors_if_there_is_nothing_on_the_stack (self ):
182199 input_data = ["over" ]
@@ -196,15 +213,15 @@ def test_can_consist_of_built_in_words(self):
196213 "1 dup-twice"
197214 ]
198215 expected = [1 , 1 , 1 ]
199- self .assertEqual (expected , evaluate (input_data ))
216+ self .assertEqual (evaluate (input_data ), expected )
200217
201218 def test_execute_in_the_right_order (self ):
202219 input_data = [
203220 ": countup 1 2 3 ;" ,
204221 "countup"
205222 ]
206223 expected = [1 , 2 , 3 ]
207- self .assertEqual (expected , evaluate (input_data ))
224+ self .assertEqual (evaluate (input_data ), expected )
208225
209226 def test_can_override_other_user_defined_words (self ):
210227 input_data = [
@@ -213,31 +230,31 @@ def test_can_override_other_user_defined_words(self):
213230 "1 foo"
214231 ]
215232 expected = [1 , 1 , 1 ]
216- self .assertEqual (expected , evaluate (input_data ))
233+ self .assertEqual (evaluate (input_data ), expected )
217234
218235 def test_can_override_built_in_words (self ):
219236 input_data = [
220237 ": swap dup ;" ,
221238 "1 swap"
222239 ]
223240 expected = [1 , 1 ]
224- self .assertEqual (expected , evaluate (input_data ))
241+ self .assertEqual (evaluate (input_data ), expected )
225242
226243 def test_can_override_built_in_operators (self ):
227244 input_data = [
228245 ": + * ;" ,
229246 "3 4 +"
230247 ]
231248 expected = [12 ]
232- self .assertEqual (expected , evaluate (input_data ))
249+ self .assertEqual (evaluate (input_data ), expected )
233250
234251 def test_is_case_insensitive (self ):
235252 input_data = [
236253 ": foo dup ;" ,
237254 "1 FOO"
238255 ]
239256 expected = [1 , 1 ]
240- self .assertEqual (expected , evaluate (input_data ))
257+ self .assertEqual (evaluate (input_data ), expected )
241258
242259 def test_cannot_redefine_numbers (self ):
243260 input_data = [": 1 2 ;" ]
0 commit comments