Esempio n. 1
0
 def test_user_defined_words_are_case_insensitive(self):
     input_data = [
         ": foo dup ;",
         "1 FOO Foo foo"
     ]
     expected = [1, 1, 1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 2
0
 def test_definitions_are_case_insensitive(self):
     input_data = [
         ": SWAP DUP Dup dup ;",
         "1 swap"
     ]
     expected = [1, 1, 1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 3
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(evaluate(input_data), expected)
Esempio n. 4
0
 def test_can_override_built_in_words(self):
     input_data = [
         ": swap dup ;",
         "1 swap"
     ]
     expected = [1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 5
0
 def test_can_override_built_in_operators(self):
     input_data = [
         ": + * ;",
         "3 4 +"
     ]
     expected = [12]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 6
0
 def test_execute_in_the_right_order(self):
     input_data = [
         ": countup 1 2 3 ;",
         "countup"
     ]
     expected = [1, 2, 3]
     self.assertEqual(evaluate(input_data), expected)
Esempio 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(evaluate(input_data), expected)
Esempio n. 8
0
 def test_can_define_word_that_uses_word_with_same_name(self):
     input_data = [
         ": foo 10 ;",
         ": foo foo 1 + ;",
         "foo"
     ]
     expected = [11]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 9
0
 def test_can_use_different_words_with_same_name(self):
     input_data = [
         ": foo 5 ;",
         ": bar foo ;",
         ": foo 6 ;",
         "bar foo"
     ]
     expected = [5, 6]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 10
0
 def test_cannot_redefine_numbers(self):
     input_data = [": 1 2 ;"]
     with self.assertRaisesWithMessage(ValueError):
         evaluate(input_data)
Esempio n. 11
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(evaluate(input_data), expected)
Esempio n. 12
0
 def test_execute_in_the_right_order(self):
     input_data = [": countup 1 2 3 ;", "countup"]
     expected = [1, 2, 3]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 13
0
 def test_can_override_built_in_words(self):
     input_data = [": swap dup ;", "1 swap"]
     expected = [1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 14
0
 def test_swaps_two_two_values_on_stack(self):
     input_data = ["1 2 3 SWAP"]
     expected = [1, 3, 2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 15
0
 def test_errors_if_there_is_nothing_on_the_stack(self):
     input_data = ["over"]
     with self.assertRaisesWithMessage(StackUnderflowError):
         evaluate(input_data)
Esempio n. 16
0
 def test_multiplication_and_division(self):
     input_data = ["2 4 * 3 /"]
     expected = [2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 17
0
 def test_can_add_two_numbers(self):
     input_data = ["1 2 +"]
     expected = [3]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 18
0
 def test_errors_if_there_is_only_one_value_on_the_stack(self):
     input_data = ["1 *"]
     with self.assertRaisesWithMessage(StackUnderflowError):
         evaluate(input_data)
Esempio n. 19
0
 def test_errors_if_there_is_nothing_on_the_stack(self):
     with self.assertRaisesWithMessage(StackUnderflowError):
         evaluate(["drop"])
Esempio n. 20
0
 def test_user_defined_words_are_case_insensitive(self):
     input_data = [": foo dup ;", "1 FOO Foo foo"]
     expected = [1, 1, 1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 21
0
 def test_swaps_two_two_values_on_stack(self):
     input_data = ["1 2 3 swap"]
     expected = [1, 3, 2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 22
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(evaluate(input_data), expected)
Esempio n. 23
0
 def test_errors_if_there_is_nothing_on_the_stack(self):
     input_data = ["over"]
     with self.assertRaisesWithMessage(StackUnderflowError):
         evaluate(input_data)
Esempio n. 24
0
 def test_numbers_just_get_pushed_to_stack(self):
     input_data = ["1 2 3 4 5"]
     expected = [1, 2, 3, 4, 5]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 25
0
 def test_can_subtract_two_numbers(self):
     input_data = ["3 4 -"]
     expected = [-1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 26
0
 def test_cannot_redefine_numbers(self):
     input_data = [": 1 2 ;"]
     with self.assertRaisesWithMessage(ValueError):
         evaluate(input_data)
Esempio n. 27
0
 def test_can_divide_two_numbers(self):
     input_data = ["12 3 /"]
     expected = [4]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 28
0
 def test_errors_if_executing_a_non_existent_word(self):
     input_data = ["foo"]
     with self.assertRaisesWithMessage(ValueError):
         evaluate(input_data)
Esempio n. 29
0
 def test_errors_if_there_is_only_one_value_on_the_stack(self):
     with self.assertRaisesWithMessage(StackUnderflowError):
         evaluate(["1 swap"])
Esempio n. 30
0
 def test_dup_is_case_insensitive(self):
     input_data = ["1 DUP Dup dup"]
     expected = [1, 1, 1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 31
0
 def test_copies_the_top_value_on_the_stack(self):
     input_data = ["1 2 dup"]
     expected = [1, 2, 2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 32
0
 def test_can_add_two_numbers(self):
     input_data = ["1 2 +"]
     expected = [3]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 33
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(evaluate(input_data), expected)
Esempio n. 34
0
 def test_drop_is_case_insensitive(self):
     input_data = ["1 2 3 4 DROP Drop drop"]
     expected = [1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 35
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(evaluate(input_data), expected)
Esempio n. 36
0
 def test_swap_is_case_insensitive(self):
     input_data = ["1 2 SWAP 3 Swap 4 swap"]
     expected = [2, 3, 4, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 37
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(evaluate(input_data), expected)
Esempio n. 38
0
 def test_over_is_case_insensitive(self):
     input_data = ["1 2 OVER Over over"]
     expected = [1, 2, 1, 2, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 39
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(evaluate(input_data), expected)
Esempio n. 40
0
 def test_dup_is_case_insensitive(self):
     input_data = ["1 DUP Dup dup"]
     expected = [1, 1, 1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 41
0
 def test_can_override_built_in_operators(self):
     input_data = [": + * ;", "3 4 +"]
     expected = [12]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 42
0
 def test_swap_is_case_insensitive(self):
     input_data = ["1 2 SWAP 3 Swap 4 swap"]
     expected = [2, 3, 4, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 43
0
 def test_errors_if_executing_a_non_existent_word(self):
     input_data = ["foo"]
     with self.assertRaisesWithMessage(ValueError):
         evaluate(input_data)
Esempio n. 44
0
 def test_copies_the_top_value_on_the_stack(self):
     input_data = ["1 2 dup"]
     expected = [1, 2, 2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 45
0
 def test_drop_is_case_insensitive(self):
     input_data = ["1 2 3 4 DROP Drop drop"]
     expected = [1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 46
0
 def test_can_subtract_two_numbers(self):
     input_data = ["3 4 -"]
     expected = [-1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 47
0
 def test_over_is_case_insensitive(self):
     input_data = ["1 2 OVER Over over"]
     expected = [1, 2, 1, 2, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 48
0
 def test_can_multiply_two_numbers(self):
     input_data = ["2 4 *"]
     expected = [8]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 49
0
 def test_definitions_are_case_insensitive(self):
     input_data = [": SWAP DUP Dup dup ;", "1 swap"]
     expected = [1, 1, 1, 1]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 50
0
 def test_can_divide_two_numbers(self):
     input_data = ["12 3 /"]
     expected = [4]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 51
0
 def test_can_multiply_two_numbers(self):
     input_data = ["2 4 *"]
     expected = [8]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 52
0
 def test_performs_integer_division(self):
     input_data = ["8 3 /"]
     expected = [2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 53
0
 def test_numbers_just_get_pushed_to_stack(self):
     input_data = ["1 2 3 4 5"]
     expected = [1, 2, 3, 4, 5]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 54
0
 def test_errors_if_dividing_by_zero(self):
     input_data = ["4 0 /"]
     with self.assertRaisesWithMessage(ZeroDivisionError):
         evaluate(input_data)
Esempio n. 55
0
 def test_removes_the_top_value_on_the_stack_if_it_is_not_the_only_one(
         self):
     self.assertEqual(evaluate(["1 2 drop"]), [1])
Esempio n. 56
0
 def test_errors_if_there_is_only_one_value_on_the_stack(self):
     input_data = ["1 /"]
     with self.assertRaisesWithMessage(StackUnderflowError):
         evaluate(input_data)
Esempio n. 57
0
 def test_swaps_the_top_two_values_on_the_stack_if_they_are_not_the_only_ones(
         self):
     self.assertEqual(evaluate(["1 2 3 swap"]), [1, 3, 2])
Esempio n. 58
0
 def test_multiplication_and_division(self):
     input_data = ["2 4 * 3 /"]
     expected = [2]
     self.assertEqual(evaluate(input_data), expected)
Esempio n. 59
0
 def test_copies_the_second_element_if_there_are_only_two(self):
     self.assertEqual(evaluate(["1 2 over"]), [1, 2, 1])
Esempio n. 60
0
 def test_addition_and_subtraction(self):
     input_data = ["1 2 + 4 -"]
     expected = [-1]
     self.assertEqual(evaluate(input_data), expected)