Ejemplo n.º 1
0
 def test_can_multiply_two_numbers(self):
     input_data = ["2 4 *"]
     expected = [8]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 2
0
 def test_errors_if_there_is_nothing_on_the_stack(self):
     input_data = ["*"]
     with self.assertRaises(StackUnderflowError):
         evaluate(input_data)
Ejemplo n.º 3
0
 def test_is_case_insensitive(self):
     input_data = ["1 2 Drop"]
     expected = [1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 4
0
 def test_errors_if_executing_a_non_existent_word(self):
     input_data = ["foo"]
     with self.assertRaises(ValueError):
         evaluate(input_data)
Ejemplo n.º 5
0
 def test_can_add_two_numbers(self):
     input_data = ["1 2 +"]
     expected = [3]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 6
0
 def test_multiplication_and_division(self):
     input_data = ["2 4 * 3 /"]
     expected = [2]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 7
0
 def test_can_override_other_user_defined_words(self):
     input_data = [": foo dup ;", ": foo dup dup ;", "1 foo"]
     expected = [1, 1, 1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 8
0
 def test_errors_if_dividing_by_zero(self):
     input_data = ["4 0 /"]
     with self.assertRaises(ZeroDivisionError):
         evaluate(input_data)
Ejemplo n.º 9
0
 def test_can_consist_of_built_in_words(self):
     input_data = [": dup-twice dup dup ;", "1 dup-twice"]
     expected = [1, 1, 1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 10
0
 def test_execute_in_the_right_order(self):
     input_data = [": countup 1 2 3 ;", "countup"]
     expected = [1, 2, 3]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 11
0
 def test_is_case_insensitive(self):
     input_data = ["3 4 Over"]
     expected = [3, 4, 3]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 12
0
 def test_copies_the_second_element_if_there_are_more_than_two(self):
     input_data = ["1 2 3 OVER"]
     expected = [1, 2, 3, 2]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 13
0
 def test_swaps_two_two_values_on_stack(self):
     input_data = ["1 2 3 SWAP"]
     expected = [1, 3, 2]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 14
0
 def test_can_divide_two_numbers(self):
     input_data = ["3 4 -"]
     expected = [-1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 15
0
 def test_can_override_built_in_words(self):
     input_data = [": swap dup ;", "1 swap"]
     expected = [1, 1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 16
0
 def test_performs_integer_division(self):
     input_data = ["8 3 /"]
     expected = [2]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 17
0
 def test_can_override_built_in_operators(self):
     input_data = [": + * ;", "3 4 +"]
     expected = [12]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 18
0
 def test_errors_if_there_is_only_one_value_on_the_stack(self):
     input_data = ["1 /"]
     with self.assertRaises(StackUnderflowError):
         evaluate(input_data)
Ejemplo n.º 19
0
 def test_is_case_insensitive(self):
     input_data = [": foo dup ;", "1 FOO"]
     expected = [1, 1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 20
0
 def test_addition_and_subtraction(self):
     input_data = ["1 2 + 4 -"]
     expected = [-1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 21
0
 def test_cannot_redefine_numbers(self):
     input_data = [": 1 2 ;"]
     with self.assertRaises(ValueError):
         evaluate(input_data)
Ejemplo n.º 22
0
 def test_copies_the_top_value_on_the_stack(self):
     input_data = ["1 DUP"]
     expected = [1, 1]
     self.assertEqual(expected, evaluate(input_data))
Ejemplo n.º 23
0
 def test_removes_the_top_value_on_the_stack_if_it_not_the_only_one(self):
     input_data = ["3 4 DROP"]
     expected = [3]
     self.assertEqual(expected, evaluate(input_data))