gobstones 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +133 -0
  3. data/.rubocop_todo.yml +75 -0
  4. data/.simplecov +1 -3
  5. data/.tool-versions +1 -0
  6. data/.travis.yml +9 -2
  7. data/Gemfile +11 -5
  8. data/Gemfile.lock +65 -39
  9. data/README.md +8 -1
  10. data/Rakefile +1 -1
  11. data/bin/gobstones +1 -1
  12. data/gobstones.gemspec +12 -11
  13. data/lib/gobstones/cli/printer.rb +41 -28
  14. data/lib/gobstones/cli/runner.rb +50 -15
  15. data/lib/gobstones/extensions/all.rb +1 -1
  16. data/lib/gobstones/extensions/boolean.rb +1 -5
  17. data/lib/gobstones/extensions/{fixnum.rb → integer.rb} +2 -4
  18. data/lib/gobstones/extensions/string.rb +1 -3
  19. data/lib/gobstones/lang/all.rb +3 -3
  20. data/lib/gobstones/lang/commands/all.rb +11 -10
  21. data/lib/gobstones/lang/commands/boom.rb +26 -0
  22. data/lib/gobstones/lang/commands/command_block.rb +23 -23
  23. data/lib/gobstones/lang/commands/conditional.rb +26 -0
  24. data/lib/gobstones/lang/commands/if.rb +13 -0
  25. data/lib/gobstones/lang/commands/if_then_else.rb +26 -0
  26. data/lib/gobstones/lang/commands/ir_al_origen.rb +15 -0
  27. data/lib/gobstones/lang/commands/mover.rb +23 -0
  28. data/lib/gobstones/lang/commands/multiple_assignment.rb +34 -21
  29. data/lib/gobstones/lang/commands/poner.rb +31 -0
  30. data/lib/gobstones/lang/commands/procedure_call.rb +8 -8
  31. data/lib/gobstones/lang/commands/repeat_with.rb +69 -0
  32. data/lib/gobstones/lang/commands/sacar.rb +29 -0
  33. data/lib/gobstones/lang/commands/single_assignment.rb +15 -20
  34. data/lib/gobstones/lang/commands/skip.rb +15 -0
  35. data/lib/gobstones/lang/commands/vaciar_tablero.rb +15 -0
  36. data/lib/gobstones/lang/commands/while.rb +20 -0
  37. data/lib/gobstones/lang/definitions/definition.rb +16 -23
  38. data/lib/gobstones/lang/definitions/definition_call.rb +7 -15
  39. data/lib/gobstones/lang/definitions/function.rb +1 -7
  40. data/lib/gobstones/lang/definitions/main.rb +1 -8
  41. data/lib/gobstones/lang/definitions/no_return_statement.rb +2 -8
  42. data/lib/gobstones/lang/definitions/procedure.rb +1 -7
  43. data/lib/gobstones/lang/definitions/return_from_function.rb +6 -13
  44. data/lib/gobstones/lang/definitions/return_from_main.rb +15 -10
  45. data/lib/gobstones/lang/definitions/var_tuple.rb +10 -12
  46. data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +17 -27
  47. data/lib/gobstones/lang/expressions/boolean_expressions.rb +4 -10
  48. data/lib/gobstones/lang/expressions/comparison_expressions.rb +0 -16
  49. data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +3 -5
  50. data/lib/gobstones/lang/expressions/expression.rb +18 -0
  51. data/lib/gobstones/lang/expressions/function_call.rb +9 -6
  52. data/lib/gobstones/lang/expressions/one_arg_expression.rb +8 -16
  53. data/lib/gobstones/lang/expressions/primitive_functions.rb +24 -16
  54. data/lib/gobstones/lang/expressions/two_arg_expression.rb +9 -16
  55. data/lib/gobstones/lang/expressions/type_bound_functions.rb +30 -25
  56. data/lib/gobstones/lang/expressions/var_name.rb +9 -13
  57. data/lib/gobstones/lang/literals/all.rb +3 -3
  58. data/lib/gobstones/lang/literals/{booleans.rb → boolean.rb} +24 -22
  59. data/lib/gobstones/lang/literals/{colors.rb → color.rb} +4 -14
  60. data/lib/gobstones/lang/literals/{directions.rb → direction.rb} +3 -13
  61. data/lib/gobstones/lang/literals/literal.rb +35 -27
  62. data/lib/gobstones/lang/literals/number.rb +6 -8
  63. data/lib/gobstones/lang/program.rb +9 -16
  64. data/lib/gobstones/modules/equality_definition.rb +23 -0
  65. data/lib/gobstones/parser/ast/ast.rb +48 -70
  66. data/lib/gobstones/parser/parse_error.rb +2 -7
  67. data/lib/gobstones/parser/treetop_parser.rb +9 -14
  68. data/lib/gobstones/runner/board.rb +12 -15
  69. data/lib/gobstones/runner/cell.rb +14 -20
  70. data/lib/gobstones/runner/errors/all.rb +1 -1
  71. data/lib/gobstones/runner/errors/boom_error.rb +0 -5
  72. data/lib/gobstones/runner/errors/definition_not_found_error.rb +7 -7
  73. data/lib/gobstones/runner/errors/empty_cell_error.rb +0 -5
  74. data/lib/gobstones/runner/errors/gobstones_runtime_error.rb +0 -5
  75. data/lib/gobstones/runner/errors/gobstones_type_error.rb +2 -7
  76. data/lib/gobstones/runner/errors/out_of_board_error.rb +0 -5
  77. data/lib/gobstones/runner/errors/undefined_variable_error.rb +6 -4
  78. data/lib/gobstones/runner/errors/wrong_arguments_error.rb +0 -5
  79. data/lib/gobstones/runner/execution_context.rb +16 -33
  80. data/lib/gobstones/runner/head.rb +17 -20
  81. data/lib/gobstones/runner/program_result.rb +12 -0
  82. data/lib/gobstones/type_check_result.rb +0 -4
  83. data/spec/lang/commands/boom_spec.rb +7 -0
  84. data/spec/lang/commands/command_block_spec.rb +15 -0
  85. data/spec/lang/commands/if_spec.rb +32 -0
  86. data/spec/lang/commands/if_then_else_spec.rb +19 -0
  87. data/spec/lang/commands/ir_al_origen_spec.rb +11 -0
  88. data/spec/lang/commands/mover_spec.rb +30 -0
  89. data/spec/lang/commands/multiple_assignment_spec.rb +39 -22
  90. data/spec/lang/commands/poner_spec.rb +27 -0
  91. data/spec/lang/commands/procedure_call_spec.rb +26 -28
  92. data/spec/lang/commands/procedure_spec.rb +32 -32
  93. data/spec/lang/commands/repeat_with_spec.rb +64 -0
  94. data/spec/lang/commands/sacar_spec.rb +32 -0
  95. data/spec/lang/commands/single_assignment_spec.rb +5 -6
  96. data/spec/lang/commands/skip_spec.rb +10 -0
  97. data/spec/lang/commands/vaciar_tablero_spec.rb +10 -0
  98. data/spec/lang/commands/while_spec.rb +39 -0
  99. data/spec/lang/definitions/main_spec.rb +34 -0
  100. data/spec/lang/definitions/no_return_statement_spec.rb +4 -5
  101. data/spec/lang/definitions/var_tuple_spec.rb +4 -7
  102. data/spec/lang/expressions/arithmetic_expressions_spec.rb +37 -64
  103. data/spec/lang/expressions/boolean_expressions_spec.rb +25 -34
  104. data/spec/lang/expressions/comparison_expressions_spec.rb +109 -155
  105. data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +3 -7
  106. data/spec/lang/expressions/function_call_spec.rb +24 -20
  107. data/spec/lang/expressions/primitive_functions_spec.rb +28 -39
  108. data/spec/lang/expressions/type_bound_functions_spec.rb +10 -18
  109. data/spec/lang/expressions/var_name_spec.rb +8 -12
  110. data/spec/lang/literals/{booleans_spec.rb → boolean_spec.rb} +3 -5
  111. data/spec/lang/literals/color_spec.rb +19 -0
  112. data/spec/lang/literals/direction_spec.rb +46 -0
  113. data/spec/lang/literals/{numbers_spec.rb → number_spec.rb} +3 -4
  114. data/spec/matchers/parse_matcher.rb +9 -11
  115. data/spec/parser/arithmetic_expressions_spec.rb +51 -61
  116. data/spec/parser/assignments_spec.rb +21 -31
  117. data/spec/parser/boolean_expressions_spec.rb +35 -43
  118. data/spec/parser/command_block_spec.rb +18 -20
  119. data/spec/parser/data_types_spec.rb +9 -19
  120. data/spec/parser/function_calls_spec.rb +19 -19
  121. data/spec/parser/function_definitions_spec.rb +17 -22
  122. data/spec/parser/gobstones_program_spec.rb +30 -30
  123. data/spec/parser/if_command_spec.rb +19 -28
  124. data/spec/parser/main_definition_spec.rb +13 -16
  125. data/spec/parser/nested_expressions_spec.rb +20 -24
  126. data/spec/parser/primitive_expressions_spec.rb +33 -38
  127. data/spec/parser/procedure_calls_spec.rb +17 -18
  128. data/spec/parser/procedure_definitions_spec.rb +12 -15
  129. data/spec/parser/repeat_with_command_spec.rb +10 -10
  130. data/spec/parser/simple_commands_spec.rb +23 -37
  131. data/spec/parser/treetop_parser_spec.rb +87 -83
  132. data/spec/parser/var_tuple_spec.rb +8 -12
  133. data/spec/parser/while_command_spec.rb +11 -14
  134. data/spec/runner/board_spec.rb +28 -33
  135. data/spec/runner/cell_spec.rb +21 -28
  136. data/spec/runner/execution_context_spec.rb +18 -35
  137. data/spec/runner/head_spec.rb +54 -60
  138. data/spec/spec_helper.rb +10 -1
  139. data/spec/support/board_assertions.rb +18 -0
  140. data/spec/{gobstones_lang_test_objects.rb → support/gobstones_lang_test_objects.rb} +6 -4
  141. data/spec/type_checker_spec.rb +19 -25
  142. metadata +80 -56
  143. data/.ruby-version +0 -1
  144. data/lib/gobstones/lang/commands/boom_cmd.rb +0 -31
  145. data/lib/gobstones/lang/commands/conditional_cmd.rb +0 -31
  146. data/lib/gobstones/lang/commands/if_cmd.rb +0 -38
  147. data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +0 -19
  148. data/lib/gobstones/lang/commands/mover_cmd.rb +0 -27
  149. data/lib/gobstones/lang/commands/poner_cmd.rb +0 -35
  150. data/lib/gobstones/lang/commands/repeat_with_cmd.rb +0 -77
  151. data/lib/gobstones/lang/commands/sacar_cmd.rb +0 -33
  152. data/lib/gobstones/lang/commands/skip_cmd.rb +0 -19
  153. data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +0 -19
  154. data/lib/gobstones/lang/commands/while_cmd.rb +0 -25
  155. data/lib/gobstones/modules/equal_by_class.rb +0 -13
  156. data/spec/lang/commands/boom_cmd_spec.rb +0 -8
  157. data/spec/lang/commands/cmd_block_spec.rb +0 -21
  158. data/spec/lang/commands/if_cmd_spec.rb +0 -50
  159. data/spec/lang/commands/ir_al_origen_cmd_spec.rb +0 -16
  160. data/spec/lang/commands/mover_cmd_spec.rb +0 -36
  161. data/spec/lang/commands/poner_cmd_spec.rb +0 -28
  162. data/spec/lang/commands/repeat_with_cmd_spec.rb +0 -60
  163. data/spec/lang/commands/sacar_cmd_spec.rb +0 -35
  164. data/spec/lang/commands/skip_cmd_spec.rb +0 -12
  165. data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +0 -14
  166. data/spec/lang/commands/while_cmd_spec.rb +0 -43
  167. data/spec/lang/literals/colors_spec.rb +0 -13
  168. data/spec/lang/literals/directions_spec.rb +0 -45
@@ -1,282 +1,236 @@
1
- describe "comparison expressions" do
2
-
1
+ RSpec.describe 'evaluating comparison expressions' do
3
2
  describe Equal do
4
-
5
- it "evaluates same booleans as equal" do
6
- expect(Equal.new(false_value, false_value).evaluate).to eq(true_value)
7
- expect(Equal.new(true_value, true_value).evaluate).to eq(true_value)
8
- expect(Equal.new(false_value, true_value).evaluate).to eq(false_value)
9
- expect(Equal.new(true_value, false_value).evaluate).to eq(false_value)
3
+ it 'evaluates same booleans as equal' do
4
+ expect(described_class.new(false_value, false_value).evaluate).to eq(true_value)
5
+ expect(described_class.new(true_value, true_value).evaluate).to eq(true_value)
6
+ expect(described_class.new(false_value, true_value).evaluate).to eq(false_value)
7
+ expect(described_class.new(true_value, false_value).evaluate).to eq(false_value)
10
8
  end
11
9
 
12
- it "evaluates same colors as equal" do
13
- color_classes = [Azul, Negro, Rojo, Verde]
10
+ it 'evaluates same colors as equal' do
11
+ color_classes = Color.all
14
12
  color_classes.each do |color_class|
15
- expect(Equal.new(color_class.new, color_class.new).
16
- evaluate).to eq(true_value)
13
+ expect(described_class.new(color_class.new, color_class.new).evaluate).to eq(true_value)
17
14
  (color_classes - [color_class]).each do |different_color_class|
18
- expect(Equal.new(color_class.new, different_color_class.new).
19
- evaluate).to eq(false_value)
15
+ expect(described_class.new(color_class.new, different_color_class.new).evaluate).to eq(false_value)
20
16
  end
21
17
  end
22
18
  end
23
19
 
24
- it "evaluates same directions as equal" do
25
- dir_classes = [Norte, Sur, Este, Oeste]
20
+ it 'evaluates same directions as equal' do
21
+ dir_classes = Direction.all
26
22
  dir_classes.each do |dir_class|
27
- expect(Equal.new(dir_class.new, dir_class.new).
28
- evaluate).to eq(true_value)
23
+ expect(described_class.new(dir_class.new, dir_class.new).evaluate).to eq(true_value)
29
24
  (dir_classes - [dir_class]).each do |different_dir_class|
30
- expect(Equal.new(dir_class.new, different_dir_class.new).
31
- evaluate).to eq(false_value)
25
+ expect(described_class.new(dir_class.new, different_dir_class.new).evaluate).to eq(false_value)
32
26
  end
33
27
  end
34
28
  end
35
29
 
36
- it "evaluates same numbers as equal" do
37
- expect(Equal.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
38
- expect(Equal.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
30
+ it 'evaluates same numbers as equal' do
31
+ expect(described_class.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
32
+ expect(described_class.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
39
33
  end
40
-
41
34
  end
42
35
 
43
36
  describe NotEqual do
44
-
45
- it "evaluates booleans as not equal" do
46
- expect(NotEqual.new(false_value, false_value).evaluate).to eq(false_value)
47
- expect(NotEqual.new(true_value, true_value).evaluate).to eq(false_value)
48
- expect(NotEqual.new(false_value, true_value).evaluate).to eq(true_value)
49
- expect(NotEqual.new(true_value, false_value).evaluate).to eq(true_value)
37
+ it 'evaluates booleans as not equal' do
38
+ expect(described_class.new(false_value, false_value).evaluate).to eq(false_value)
39
+ expect(described_class.new(true_value, true_value).evaluate).to eq(false_value)
40
+ expect(described_class.new(false_value, true_value).evaluate).to eq(true_value)
41
+ expect(described_class.new(true_value, false_value).evaluate).to eq(true_value)
50
42
  end
51
43
 
52
- it "evaluates same colors as equal" do
53
- color_classes = [Azul, Negro, Rojo, Verde]
44
+ it 'evaluates same colors as equal' do
45
+ color_classes = Color.all
54
46
  color_classes.each do |color_class|
55
- expect(NotEqual.new(color_class.new, color_class.new).
56
- evaluate).to eq(false_value)
47
+ expect(described_class.new(color_class.new, color_class.new).evaluate).to eq(false_value)
57
48
  (color_classes - [color_class]).each do |different_color_class|
58
- expect(NotEqual.new(color_class.new, different_color_class.new).
59
- evaluate).to eq(true_value)
49
+ expect(described_class.new(color_class.new, different_color_class.new).evaluate).to eq(true_value)
60
50
  end
61
51
  end
62
52
  end
63
53
 
64
- it "evaluates same directions as equal" do
65
- dir_classes = [Norte, Sur, Este, Oeste]
54
+ it 'evaluates same directions as equal' do
55
+ dir_classes = Direction.all
66
56
  dir_classes.each do |dir_class|
67
- expect(NotEqual.new(dir_class.new, dir_class.new).
68
- evaluate).to eq(false_value)
57
+ expect(described_class.new(dir_class.new, dir_class.new).evaluate).to eq(false_value)
69
58
  (dir_classes - [dir_class]).each do |different_dir_class|
70
- expect(NotEqual.new(dir_class.new, different_dir_class.new).
71
- evaluate).to eq(true_value)
59
+ expect(described_class.new(dir_class.new, different_dir_class.new).evaluate).to eq(true_value)
72
60
  end
73
61
  end
74
62
  end
75
63
 
76
- it "evaluates same numbers as equal" do
77
- expect(NotEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
78
- expect(NotEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
64
+ it 'evaluates same numbers as equal' do
65
+ expect(described_class.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
66
+ expect(described_class.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
79
67
  end
80
-
81
68
  end
82
69
 
83
70
  describe LessThan do
84
-
85
- it "evaluates for booleans" do
86
- expect(LessThan.new(false_value, false_value).evaluate).to eq(false_value)
87
- expect(LessThan.new(false_value, true_value).evaluate).to eq(true_value)
88
- expect(LessThan.new(true_value, false_value).evaluate).to eq(false_value)
89
- expect(LessThan.new(true_value, true_value).evaluate).to eq(false_value)
71
+ it 'evaluates for booleans' do
72
+ expect(described_class.new(false_value, false_value).evaluate).to eq(false_value)
73
+ expect(described_class.new(false_value, true_value).evaluate).to eq(true_value)
74
+ expect(described_class.new(true_value, false_value).evaluate).to eq(false_value)
75
+ expect(described_class.new(true_value, true_value).evaluate).to eq(false_value)
90
76
  end
91
77
 
92
- it "evaluates for numbers" do
93
- expect(LessThan.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
94
- expect(LessThan.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
95
- expect(LessThan.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
78
+ it 'evaluates for numbers' do
79
+ expect(described_class.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
80
+ expect(described_class.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
81
+ expect(described_class.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
96
82
  end
97
83
 
98
- it "evaluates for colors" do
84
+ it 'evaluates for colors' do
99
85
  color_classes = Color.order
100
86
  color_classes.each_with_index do |color_class, index|
101
87
  # should not be less than itself
102
- expect(LessThan.new(color_class.new, color_class.new).
103
- evaluate).to eq(false_value)
88
+ expect(described_class.new(color_class.new, color_class.new).evaluate).to eq(false_value)
104
89
  color_classes.take(index).each do |previous_color_class|
105
90
  # should not be less than any previous value
106
- expect(LessThan.new(color_class.new, previous_color_class.new).
107
- evaluate).to eq(false_value)
91
+ expect(described_class.new(color_class.new, previous_color_class.new).evaluate).to eq(false_value)
108
92
  end
109
- color_classes.drop(index+1).each do |next_color_class|
93
+ color_classes.drop(index + 1).each do |next_color_class|
110
94
  # should be less than any next value
111
- expect(LessThan.new(color_class.new, next_color_class.new).
112
- evaluate).to eq(true_value)
95
+ expect(described_class.new(color_class.new, next_color_class.new).evaluate).to eq(true_value)
113
96
  end
114
97
  end
115
98
  end
116
99
 
117
- it "evaluates for directions" do
100
+ it 'evaluates for directions' do
118
101
  dir_classes = Direction.order
119
102
  dir_classes.each_with_index do |dir_class, index|
120
- expect(LessThan.new(dir_class.new, dir_class.new).
121
- evaluate).to eq(false_value)
103
+ expect(described_class.new(dir_class.new, dir_class.new).evaluate).to eq(false_value)
122
104
  dir_classes.take(index).each do |previous_dir_class|
123
- expect(LessThan.new(dir_class.new, previous_dir_class.new).
124
- evaluate).to eq(false_value)
105
+ expect(described_class.new(dir_class.new, previous_dir_class.new).evaluate).to eq(false_value)
125
106
  end
126
- dir_classes.drop(index+1).each do |next_dir_class|
127
- expect(LessThan.new(dir_class.new, next_dir_class.new).
128
- evaluate).to eq(true_value)
107
+ dir_classes.drop(index + 1).each do |next_dir_class|
108
+ expect(described_class.new(dir_class.new, next_dir_class.new).evaluate).to eq(true_value)
129
109
  end
130
110
  end
131
111
  end
132
-
133
112
  end
134
113
 
135
114
  describe LessEqual do
136
-
137
- it "evaluates for booleans" do
138
- expect(LessEqual.new(false_value, false_value).evaluate).to eq(true_value)
139
- expect(LessEqual.new(false_value, true_value).evaluate).to eq(true_value)
140
- expect(LessEqual.new(true_value, false_value).evaluate).to eq(false_value)
141
- expect(LessEqual.new(true_value, true_value).evaluate).to eq(true_value)
115
+ it 'evaluates for booleans' do
116
+ expect(described_class.new(false_value, false_value).evaluate).to eq(true_value)
117
+ expect(described_class.new(false_value, true_value).evaluate).to eq(true_value)
118
+ expect(described_class.new(true_value, false_value).evaluate).to eq(false_value)
119
+ expect(described_class.new(true_value, true_value).evaluate).to eq(true_value)
142
120
  end
143
121
 
144
- it "evaluates for numbers" do
145
- expect(LessEqual.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
146
- expect(LessEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
147
- expect(LessEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
122
+ it 'evaluates for numbers' do
123
+ expect(described_class.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
124
+ expect(described_class.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
125
+ expect(described_class.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
148
126
  end
149
127
 
150
- it "evaluates for colors" do
128
+ it 'evaluates for colors' do
151
129
  color_classes = Color.order
152
130
  color_classes.each_with_index do |color_class, index|
153
- expect(LessEqual.new(color_class.new, color_class.new).
154
- evaluate).to eq(true_value)
131
+ expect(described_class.new(color_class.new, color_class.new).evaluate).to eq(true_value)
155
132
  color_classes.take(index).each do |previous_color_class|
156
- expect(LessEqual.new(color_class.new, previous_color_class.new).
157
- evaluate).to eq(false_value)
133
+ expect(described_class.new(color_class.new, previous_color_class.new).evaluate).to eq(false_value)
158
134
  end
159
- color_classes.drop(index+1).each do |next_color_class|
160
- expect(LessEqual.new(color_class.new, next_color_class.new).
161
- evaluate).to eq(true_value)
135
+ color_classes.drop(index + 1).each do |next_color_class|
136
+ expect(described_class.new(color_class.new, next_color_class.new).evaluate).to eq(true_value)
162
137
  end
163
138
  end
164
139
  end
165
140
 
166
- it "evaluates for directions" do
141
+ it 'evaluates for directions' do
167
142
  dir_classes = Direction.order
168
143
  dir_classes.each_with_index do |dir_class, index|
169
- expect(LessEqual.new(dir_class.new, dir_class.new).
170
- evaluate).to eq(true_value)
144
+ expect(described_class.new(dir_class.new, dir_class.new).evaluate).to eq(true_value)
171
145
  dir_classes.take(index).each do |previous_dir_class|
172
- expect(LessEqual.new(dir_class.new, previous_dir_class.new).
173
- evaluate).to eq(false_value)
146
+ expect(described_class.new(dir_class.new, previous_dir_class.new).evaluate).to eq(false_value)
174
147
  end
175
- dir_classes.drop(index+1).each do |next_dir_class|
176
- expect(LessEqual.new(dir_class.new, next_dir_class.new).
177
- evaluate).to eq(true_value)
148
+ dir_classes.drop(index + 1).each do |next_dir_class|
149
+ expect(described_class.new(dir_class.new, next_dir_class.new).evaluate).to eq(true_value)
178
150
  end
179
151
  end
180
152
  end
181
-
182
153
  end
183
154
 
184
155
  describe GreaterThan do
185
-
186
- it "evaluates for booleans" do
187
- expect(GreaterThan.new(false_value, false_value).evaluate).to eq(false_value)
188
- expect(GreaterThan.new(false_value, true_value).evaluate).to eq(false_value)
189
- expect(GreaterThan.new(true_value, false_value).evaluate).to eq(true_value)
190
- expect(GreaterThan.new(true_value, true_value).evaluate).to eq(false_value)
156
+ it 'evaluates for booleans' do
157
+ expect(described_class.new(false_value, false_value).evaluate).to eq(false_value)
158
+ expect(described_class.new(false_value, true_value).evaluate).to eq(false_value)
159
+ expect(described_class.new(true_value, false_value).evaluate).to eq(true_value)
160
+ expect(described_class.new(true_value, true_value).evaluate).to eq(false_value)
191
161
  end
192
162
 
193
- it "evaluates for numbers" do
194
- expect(GreaterThan.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
195
- expect(GreaterThan.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
196
- expect(GreaterThan.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
163
+ it 'evaluates for numbers' do
164
+ expect(described_class.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
165
+ expect(described_class.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
166
+ expect(described_class.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
197
167
  end
198
168
 
199
- it "evaluates for colors" do
169
+ it 'evaluates for colors' do
200
170
  color_classes = Color.order
201
171
  color_classes.each_with_index do |color_class, index|
202
- expect(GreaterThan.new(color_class.new, color_class.new).
203
- evaluate).to eq(false_value)
172
+ expect(described_class.new(color_class.new, color_class.new).evaluate).to eq(false_value)
204
173
  color_classes.take(index).each do |previous_color_class|
205
- expect(GreaterThan.new(color_class.new, previous_color_class.new).
206
- evaluate).to eq(true_value)
174
+ expect(described_class.new(color_class.new, previous_color_class.new).evaluate).to eq(true_value)
207
175
  end
208
- color_classes.drop(index+1).each do |next_color_class|
209
- expect(GreaterThan.new(color_class.new, next_color_class.new).
210
- evaluate).to eq(false_value)
176
+ color_classes.drop(index + 1).each do |next_color_class|
177
+ expect(described_class.new(color_class.new, next_color_class.new).evaluate).to eq(false_value)
211
178
  end
212
179
  end
213
180
  end
214
181
 
215
- it "evaluates for directions" do
182
+ it 'evaluates for directions' do
216
183
  dir_classes = Direction.order
217
184
  dir_classes.each_with_index do |dir_class, index|
218
- expect(GreaterThan.new(dir_class.new, dir_class.new).
219
- evaluate).to eq(false_value)
185
+ expect(described_class.new(dir_class.new, dir_class.new).evaluate).to eq(false_value)
220
186
  dir_classes.take(index).each do |previous_dir_class|
221
- expect(GreaterThan.new(dir_class.new, previous_dir_class.new).
222
- evaluate).to eq(true_value)
187
+ expect(described_class.new(dir_class.new, previous_dir_class.new).evaluate).to eq(true_value)
223
188
  end
224
- dir_classes.drop(index+1).each do |next_dir_class|
225
- expect(GreaterThan.new(dir_class.new, next_dir_class.new).
226
- evaluate).to eq(false_value)
189
+ dir_classes.drop(index + 1).each do |next_dir_class|
190
+ expect(described_class.new(dir_class.new, next_dir_class.new).evaluate).to eq(false_value)
227
191
  end
228
192
  end
229
193
  end
230
-
231
194
  end
232
195
 
233
196
  describe GreaterEqual do
234
-
235
- it "evaluates for booleans" do
236
- expect(GreaterEqual.new(false_value, false_value).evaluate).to eq(true_value)
237
- expect(GreaterEqual.new(false_value, true_value).evaluate).to eq(false_value)
238
- expect(GreaterEqual.new(true_value, false_value).evaluate).to eq(true_value)
239
- expect(GreaterEqual.new(true_value, true_value).evaluate).to eq(true_value)
197
+ it 'evaluates for booleans' do
198
+ expect(described_class.new(false_value, false_value).evaluate).to eq(true_value)
199
+ expect(described_class.new(false_value, true_value).evaluate).to eq(false_value)
200
+ expect(described_class.new(true_value, false_value).evaluate).to eq(true_value)
201
+ expect(described_class.new(true_value, true_value).evaluate).to eq(true_value)
240
202
  end
241
203
 
242
- it "evaluates for numbers" do
243
- expect(GreaterEqual.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
244
- expect(GreaterEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
245
- expect(GreaterEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
204
+ it 'evaluates for numbers' do
205
+ expect(described_class.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
206
+ expect(described_class.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
207
+ expect(described_class.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
246
208
  end
247
209
 
248
- it "evaluates for colors" do
210
+ it 'evaluates for colors' do
249
211
  color_classes = Color.order
250
212
  color_classes.each_with_index do |color_class, index|
251
- expect(GreaterEqual.new(color_class.new, color_class.new).
252
- evaluate).to eq(true_value)
213
+ expect(described_class.new(color_class.new, color_class.new).evaluate).to eq(true_value)
253
214
  color_classes.take(index).each do |previous_color_class|
254
- expect(GreaterEqual.new(color_class.new, previous_color_class.new).
255
- evaluate).to eq(true_value)
215
+ expect(described_class.new(color_class.new, previous_color_class.new).evaluate).to eq(true_value)
256
216
  end
257
- color_classes.drop(index+1).each do |next_color_class|
258
- expect(GreaterEqual.new(color_class.new, next_color_class.new).
259
- evaluate).to eq(false_value)
217
+ color_classes.drop(index + 1).each do |next_color_class|
218
+ expect(described_class.new(color_class.new, next_color_class.new).evaluate).to eq(false_value)
260
219
  end
261
220
  end
262
221
  end
263
222
 
264
- it "evaluates for directions" do
223
+ it 'evaluates for directions' do
265
224
  dir_classes = Direction.order
266
225
  dir_classes.each_with_index do |dir_class, index|
267
- expect(GreaterEqual.new(dir_class.new, dir_class.new).
268
- evaluate).to eq(true_value)
226
+ expect(described_class.new(dir_class.new, dir_class.new).evaluate).to eq(true_value)
269
227
  dir_classes.take(index).each do |previous_dir_class|
270
- expect(GreaterEqual.new(dir_class.new, previous_dir_class.new).
271
- evaluate).to eq(true_value)
228
+ expect(described_class.new(dir_class.new, previous_dir_class.new).evaluate).to eq(true_value)
272
229
  end
273
- dir_classes.drop(index+1).each do |next_dir_class|
274
- expect(GreaterEqual.new(dir_class.new, next_dir_class.new).
275
- evaluate).to eq(false_value)
230
+ dir_classes.drop(index + 1).each do |next_dir_class|
231
+ expect(described_class.new(dir_class.new, next_dir_class.new).evaluate).to eq(false_value)
276
232
  end
277
233
  end
278
234
  end
279
-
280
235
  end
281
-
282
236
  end
@@ -1,11 +1,7 @@
1
- describe EnclosedByParensExpression do
2
-
1
+ RSpec.describe EnclosedByParensExpression do
3
2
  let(:context) { clean_context }
4
3
 
5
- it "evaluates the inner expression" do
6
- expression = EnclosedByParensExpression.new rojo
7
-
8
- expect(expression.evaluate(context)).to eq(rojo)
4
+ it 'evaluates the inner expression' do
5
+ expect(described_class.new(rojo).evaluate(context)).to eq(rojo)
9
6
  end
10
-
11
7
  end
@@ -1,29 +1,33 @@
1
- describe FunctionCall do
1
+ RSpec.describe FunctionCall do
2
+ let(:my_function) { Function.new('myFunction', args, empty_body, return_statement) }
3
+ let(:program) { Program.new([my_function], no_return_statement) }
4
+ let(:context) { program_context_for(program) }
5
+ let(:call) { described_class.new('myFunction', calling_arguments) }
2
6
 
3
- it "evaluates an existing function and returns its result when calling it" do
4
- return_statement = ReturnFromFunction.new [42.to_gbs_num]
5
- my_function = Function.new 'myFunction', no_arguments, empty_body, return_statement
6
- program = Program.new [my_function], no_return_statement
7
- context = program_context_for program
8
- call = FunctionCall.new 'myFunction', []
7
+ context 'without arguments' do
8
+ let(:args) { no_arguments }
9
+ let(:return_statement) { ReturnFromFunction.new([42.to_gbs_num]) }
10
+ let(:calling_arguments) { [] }
9
11
 
10
- result = call.evaluate context
12
+ it 'evaluates an existing function and returns its result when calling it' do
13
+ result = call.evaluate(context)
11
14
 
12
- expect(result).to eq(42.to_gbs_num)
15
+ expect(result).to eq(42.to_gbs_num)
16
+ end
13
17
  end
14
18
 
15
- it "evaluates an existing function with some arguments" do
16
- number_a, number_b, number_c = 'a'.to_var_name, 'b'.to_var_name, 'c'.to_var_name
17
- return_statement = ReturnFromFunction.new [Add.new(Add.new(number_a, number_b), number_c)]
18
- args = VarTuple.new [number_a, number_b, number_c]
19
- my_function = Function.new 'myFunction', args, empty_body, return_statement
20
- program = Program.new [my_function], no_return_statement
21
- context = program_context_for program
22
- call = FunctionCall.new 'myFunction', [1.to_gbs_num, 2.to_gbs_num, 3.to_gbs_num]
19
+ context 'with arguments' do
20
+ let(:number_a) { 'a'.to_var_name }
21
+ let(:number_b) { 'b'.to_var_name }
22
+ let(:number_c) { 'c'.to_var_name }
23
+ let(:args) { VarTuple.new([number_a, number_b, number_c]) }
24
+ let(:return_statement) { ReturnFromFunction.new([Add.new(Add.new(number_a, number_b), number_c)]) }
25
+ let(:calling_arguments) { [1.to_gbs_num, 2.to_gbs_num, 3.to_gbs_num] }
23
26
 
24
- result = call.evaluate context
27
+ it 'evaluates an existing function with some arguments' do
28
+ result = call.evaluate(context)
25
29
 
26
- expect(result).to eq(6.to_gbs_num)
30
+ expect(result).to eq(6.to_gbs_num)
31
+ end
27
32
  end
28
-
29
33
  end