gobstones 0.0.1.1 → 0.0.2

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -3
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG +22 -2
  6. data/Gemfile +3 -3
  7. data/Gemfile.lock +32 -27
  8. data/bin/gobstones +1 -1
  9. data/examples/.gitkeep +0 -0
  10. data/gobstones.gemspec +2 -2
  11. data/lib/gobstones/cli/board_template +1 -1
  12. data/lib/gobstones/cli/printer.rb +1 -1
  13. data/lib/gobstones/cli/runner.rb +8 -2
  14. data/lib/gobstones/extensions/all.rb +2 -1
  15. data/lib/gobstones/extensions/boolean.rb +1 -1
  16. data/lib/gobstones/extensions/fixnum.rb +1 -1
  17. data/lib/gobstones/extensions/string.rb +9 -0
  18. data/lib/gobstones/lang/all.rb +1 -1
  19. data/lib/gobstones/lang/commands/all.rb +3 -2
  20. data/lib/gobstones/lang/commands/boom_cmd.rb +6 -3
  21. data/lib/gobstones/lang/commands/command_block.rb +1 -1
  22. data/lib/gobstones/lang/commands/conditional_cmd.rb +5 -1
  23. data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +1 -1
  24. data/lib/gobstones/lang/commands/mover_cmd.rb +4 -2
  25. data/lib/gobstones/lang/commands/multiple_assignment.rb +35 -0
  26. data/lib/gobstones/lang/commands/poner_cmd.rb +8 -4
  27. data/lib/gobstones/lang/commands/procedure_call.rb +1 -9
  28. data/lib/gobstones/lang/commands/repeat_with_cmd.rb +10 -6
  29. data/lib/gobstones/lang/commands/sacar_cmd.rb +9 -7
  30. data/lib/gobstones/lang/commands/{assignments.rb → single_assignment.rb} +5 -3
  31. data/lib/gobstones/lang/commands/skip_cmd.rb +2 -2
  32. data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +1 -1
  33. data/lib/gobstones/lang/commands/while_cmd.rb +1 -1
  34. data/lib/gobstones/lang/definitions/all.rb +1 -1
  35. data/lib/gobstones/lang/definitions/definition.rb +47 -5
  36. data/lib/gobstones/lang/definitions/definition_call.rb +17 -5
  37. data/lib/gobstones/lang/definitions/function.rb +9 -0
  38. data/lib/gobstones/lang/definitions/main.rb +1 -1
  39. data/lib/gobstones/lang/definitions/no_return_statement.rb +7 -3
  40. data/lib/gobstones/lang/definitions/procedure.rb +5 -20
  41. data/lib/gobstones/lang/definitions/return_from_function.rb +12 -2
  42. data/lib/gobstones/lang/definitions/return_from_main.rb +5 -1
  43. data/lib/gobstones/lang/definitions/var_tuple.rb +13 -1
  44. data/lib/gobstones/lang/expressions/all.rb +1 -1
  45. data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +1 -1
  46. data/lib/gobstones/lang/expressions/boolean_expressions.rb +3 -2
  47. data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +17 -0
  48. data/lib/gobstones/lang/expressions/function_call.rb +1 -1
  49. data/lib/gobstones/lang/expressions/one_arg_expression.rb +16 -4
  50. data/lib/gobstones/lang/expressions/primitive_functions.rb +18 -12
  51. data/lib/gobstones/lang/expressions/two_arg_expression.rb +7 -3
  52. data/lib/gobstones/lang/expressions/type_bound_functions.rb +1 -1
  53. data/lib/gobstones/lang/expressions/var_name.rb +9 -3
  54. data/lib/gobstones/lang/literals/all.rb +1 -1
  55. data/lib/gobstones/lang/literals/colors.rb +1 -1
  56. data/lib/gobstones/lang/literals/literal.rb +31 -21
  57. data/lib/gobstones/lang/literals/number.rb +1 -1
  58. data/lib/gobstones/lang/program.rb +13 -4
  59. data/lib/gobstones/modules/equal_by_class.rb +1 -1
  60. data/lib/gobstones/parser/ast/ast.rb +12 -8
  61. data/lib/gobstones/parser/grammar/gobstones.treetop +4 -4
  62. data/lib/gobstones/parser/parse_error.rb +1 -1
  63. data/lib/gobstones/runner/all.rb +1 -2
  64. data/lib/gobstones/runner/board.rb +13 -4
  65. data/lib/gobstones/runner/cell.rb +10 -0
  66. data/lib/gobstones/runner/errors/all.rb +1 -1
  67. data/lib/gobstones/runner/errors/definition_not_found_error.rb +1 -1
  68. data/lib/gobstones/runner/execution_context.rb +66 -16
  69. data/lib/gobstones/runner/head.rb +17 -3
  70. data/spec/gobstones_lang_test_objects.rb +75 -0
  71. data/spec/lang/commands/boom_cmd_spec.rb +3 -3
  72. data/spec/lang/commands/cmd_block_spec.rb +14 -14
  73. data/spec/lang/commands/if_cmd_spec.rb +21 -20
  74. data/spec/lang/commands/ir_al_origen_cmd_spec.rb +3 -3
  75. data/spec/lang/commands/mover_cmd_spec.rb +12 -14
  76. data/spec/lang/commands/multiple_assignment_spec.rb +37 -0
  77. data/spec/lang/commands/poner_cmd_spec.rb +13 -14
  78. data/spec/lang/commands/procedure_call_spec.rb +19 -24
  79. data/spec/lang/commands/procedure_spec.rb +32 -36
  80. data/spec/lang/commands/repeat_with_cmd_spec.rb +39 -20
  81. data/spec/lang/commands/sacar_cmd_spec.rb +17 -16
  82. data/spec/lang/commands/single_assignment_spec.rb +13 -0
  83. data/spec/lang/commands/skip_cmd_spec.rb +2 -2
  84. data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +7 -6
  85. data/spec/lang/commands/while_cmd_spec.rb +21 -15
  86. data/spec/lang/definitions/no_return_statement_spec.rb +10 -0
  87. data/spec/lang/definitions/var_tuple_spec.rb +16 -0
  88. data/spec/lang/expressions/arithmetic_expressions_spec.rb +15 -15
  89. data/spec/lang/expressions/boolean_expressions_spec.rb +35 -25
  90. data/spec/lang/expressions/comparison_expressions_spec.rb +25 -28
  91. data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +11 -0
  92. data/spec/lang/expressions/function_call_spec.rb +29 -0
  93. data/spec/lang/expressions/primitive_functions_spec.rb +60 -62
  94. data/spec/lang/expressions/type_bound_functions_spec.rb +13 -13
  95. data/spec/lang/expressions/var_name_spec.rb +20 -8
  96. data/spec/lang/literals/booleans_spec.rb +5 -7
  97. data/spec/lang/literals/colors_spec.rb +4 -4
  98. data/spec/lang/literals/directions_spec.rb +12 -12
  99. data/spec/lang/literals/numbers_spec.rb +2 -2
  100. data/spec/matchers/parse_matcher.rb +9 -10
  101. data/spec/parser/arithmetic_expressions_spec.rb +19 -19
  102. data/spec/parser/assignments_spec.rb +24 -10
  103. data/spec/parser/boolean_expressions_spec.rb +18 -18
  104. data/spec/parser/command_block_spec.rb +17 -19
  105. data/spec/parser/data_types_spec.rb +23 -23
  106. data/spec/parser/function_calls_spec.rb +13 -12
  107. data/spec/parser/function_definitions_spec.rb +13 -18
  108. data/spec/parser/gobstones_program_spec.rb +15 -15
  109. data/spec/parser/if_command_spec.rb +13 -12
  110. data/spec/parser/main_definition_spec.rb +12 -12
  111. data/spec/parser/nested_expressions_spec.rb +16 -20
  112. data/spec/parser/primitive_expressions_spec.rb +27 -33
  113. data/spec/parser/procedure_calls_spec.rb +12 -12
  114. data/spec/parser/procedure_definitions_spec.rb +10 -16
  115. data/spec/parser/repeat_with_command_spec.rb +7 -10
  116. data/spec/parser/simple_commands_spec.rb +10 -10
  117. data/spec/parser/treetop_parser_spec.rb +11 -10
  118. data/spec/parser/var_tuple_spec.rb +7 -11
  119. data/spec/parser/while_command_spec.rb +9 -9
  120. data/spec/runner/board_spec.rb +23 -27
  121. data/spec/runner/cell_spec.rb +34 -38
  122. data/spec/runner/execution_context_spec.rb +38 -24
  123. data/spec/runner/head_spec.rb +54 -63
  124. data/spec/spec_helper.rb +4 -1
  125. data/spec/type_checker_spec.rb +13 -13
  126. metadata +33 -18
  127. data/lib/gobstones/lang/expressions/parentheses_expression.rb +0 -13
  128. data/spec/lang/commands/assignments_spec.rb +0 -13
@@ -1,13 +1,14 @@
1
1
  describe VaciarTablero do
2
2
 
3
- let(:context) { ProgramExecutionContext.for double('GobstonesProgram') }
4
- let(:red) { Rojo.new }
3
+ let(:context) { clean_context }
5
4
 
6
- it "should empty the board in the context" do
7
- context.head.put red
5
+ it "empties the board in the context" do
6
+ context.head.put rojo
8
7
  vaciar_tablero = VaciarTablero.new
8
+
9
9
  vaciar_tablero.evaluate context
10
- expect(context.board.empty?).to be_true
10
+
11
+ expect(context.board.empty?).to be true
11
12
  end
12
13
 
13
- end
14
+ end
@@ -1,37 +1,43 @@
1
1
  describe WhileCmd do
2
2
 
3
- let(:context) { ProgramExecutionContext.for double('GobstonesProgram') }
4
- let(:while_block) { CmdBlock.new [Poner.new(Verde.new)] }
3
+ let(:context) { clean_context }
4
+ let(:while_block) { CommandBlock.new [Poner.new(verde)] }
5
5
 
6
6
  def condition(times)
7
- cond = double('while condition')
8
- expected_values = [True.new] * times + [False.new]
9
- allow(cond).to receive(:evaluate).and_return(*expected_values)
10
- cond
7
+ double('while condition').tap do |condition|
8
+ expected_values = [true_value] * times + [false_value]
9
+ allow(condition).to receive(:evaluate).and_return(*expected_values)
10
+ end
11
11
  end
12
12
 
13
- it "should evaluate the command block until the condition is not satisfied" do
13
+ it "evaluates the command block until the condition is not satisfied" do
14
14
  while_cmd = WhileCmd.new condition(3), while_block
15
+
15
16
  while_cmd.evaluate context
16
- expect(context.head.number_of_balls(Verde.new)).to eq(3)
17
+
18
+ expect(context.head.number_of_balls(verde)).to eq(3)
17
19
  end
18
20
 
19
- it "should not evaluate the command block if the condition is not satisfied" do
21
+ it "does not evaluate the command block if the condition is false" do
20
22
  while_cmd = WhileCmd.new condition(0), while_block
23
+
21
24
  while_cmd.evaluate context
22
- expect(context.head.are_there_balls?(Verde.new)).to be_false
25
+
26
+ expect(context.head.are_there_balls?(verde)).to be false
23
27
  end
24
28
 
25
- it "should raise a type error if the condition is not boolean" do
26
- while_cmd = WhileCmd.new Sur.new, while_block
29
+ it "fails by type error if the condition is not boolean" do
30
+ while_cmd = WhileCmd.new sur, while_block
31
+
27
32
  expect { while_cmd.evaluate context }
28
33
  .to raise_error(GobstonesTypeError, /is not a boolean/)
29
34
  end
30
35
 
31
- it "should fail by stack overflow if the condition is always true" do
32
- while_cmd = WhileCmd.new True.new, while_block
36
+ it "fails by stack overflow if the condition is always true" do
37
+ while_cmd = WhileCmd.new true_value, while_block
38
+
33
39
  expect { while_cmd.evaluate context }
34
40
  .to raise_error(GobstonesRuntimeError, /stack overflow/)
35
41
  end
36
42
 
37
- end
43
+ end
@@ -0,0 +1,10 @@
1
+ describe NoReturnStatement do
2
+
3
+ let(:context) { clean_context }
4
+ let(:no_return_statement) { NoReturnStatement.new }
5
+
6
+ it "does nothing when evaluating on a context" do
7
+ expect { no_return_statement.evaluate context }.not_to change { context.head }
8
+ end
9
+
10
+ end
@@ -0,0 +1,16 @@
1
+ describe VarTuple do
2
+
3
+ let (:var_tuple) { VarTuple.new ['a'.to_var_name, 'b'.to_var_name, 'c'.to_var_name] }
4
+
5
+ it "returns its length" do
6
+ expect(var_tuple.length).to eq(3)
7
+ end
8
+
9
+ it "returns a variable at a given index" do
10
+ expect(var_tuple.variable_at(0)).to eq('a'.to_var_name)
11
+ expect(var_tuple.variable_at(1)).to eq('b'.to_var_name)
12
+ expect(var_tuple.variable_at(2)).to eq('c'.to_var_name)
13
+
14
+ end
15
+
16
+ end
@@ -2,12 +2,12 @@ describe "arithmetic expressions" do
2
2
 
3
3
  describe Add do
4
4
 
5
- it "should evaluate with two numbers" do
5
+ it "evaluates with two numbers" do
6
6
  add = Add.new(42.to_gbs_num, 23.to_gbs_num)
7
7
  expect(add.evaluate).to eq(65.to_gbs_num)
8
8
  end
9
9
 
10
- it "should evaluate nested add expressions" do
10
+ it "evaluates nested add expressions" do
11
11
  add_4_8 = Add.new 4.to_gbs_num, 8.to_gbs_num
12
12
  add_12_15 = Add.new add_4_8, 15.to_gbs_num
13
13
  add_27_16 = Add.new add_12_15, 16.to_gbs_num
@@ -21,17 +21,17 @@ describe "arithmetic expressions" do
21
21
 
22
22
  describe Sub do
23
23
 
24
- it "should evaluate with two numbers" do
24
+ it "evaluates with two numbers" do
25
25
  sub = Sub.new(42.to_gbs_num, 15.to_gbs_num)
26
26
  expect(sub.evaluate).to eq(27.to_gbs_num)
27
27
  end
28
28
 
29
- it "should evaluate and return a negative result" do
29
+ it "evaluates returning a negative result" do
30
30
  sub = Sub.new(15.to_gbs_num, 42.to_gbs_num)
31
31
  expect(sub.evaluate).to eq(-27.to_gbs_num)
32
32
  end
33
33
 
34
- it "should evaluate nested sub expressions" do
34
+ it "evaluates nested sub expressions" do
35
35
  sub_n1_n2 = Sub.new 42.to_gbs_num, 15.to_gbs_num
36
36
  sub = Sub.new sub_n1_n2, 8.to_gbs_num
37
37
 
@@ -42,12 +42,12 @@ describe "arithmetic expressions" do
42
42
 
43
43
  describe Mul do
44
44
 
45
- it "should evaluate a simple mul" do
45
+ it "evaluates a simple mul" do
46
46
  mul = Mul.new(4.to_gbs_num, 8.to_gbs_num)
47
47
  expect(mul.evaluate).to eq(32.to_gbs_num)
48
48
  end
49
49
 
50
- it "should evaluate a nested mul expression" do
50
+ it "evaluates a nested mul expression" do
51
51
  mul = Mul.new(-2.to_gbs_num, 4.to_gbs_num)
52
52
  expect(Mul.new(mul, 5.to_gbs_num).evaluate).to eq(-40.to_gbs_num)
53
53
  end
@@ -56,17 +56,17 @@ describe "arithmetic expressions" do
56
56
 
57
57
  describe Div do
58
58
 
59
- it "should evaluate a simple div" do
59
+ it "evaluates a simple div" do
60
60
  div = Div.new(12.to_gbs_num, 3.to_gbs_num)
61
61
  expect(div.evaluate).to eq(4.to_gbs_num)
62
62
  end
63
63
 
64
- it "should evaluate to an integer division" do
64
+ it "evaluates to an integer division" do
65
65
  div = Div.new(10.to_gbs_num, 3.to_gbs_num)
66
66
  expect(div.evaluate).to eq(3.to_gbs_num)
67
67
  end
68
68
 
69
- it "should raise an error when dividing by zero" do
69
+ it "raises an error when dividing by zero" do
70
70
  expect {
71
71
  Div.new(42.to_gbs_num, 0.to_gbs_num).evaluate
72
72
  }.to raise_error(GobstonesRuntimeError, 'zero division')
@@ -76,12 +76,12 @@ describe "arithmetic expressions" do
76
76
 
77
77
  describe Mod do
78
78
 
79
- it "should evaluate a mod with result 0" do
79
+ it "evaluates a mod with result 0" do
80
80
  mod = Mod.new(4.to_gbs_num, 4.to_gbs_num)
81
81
  expect(mod.evaluate).to eq(0.to_gbs_num)
82
82
  end
83
83
 
84
- it "should evaluate a mod with result > 0" do
84
+ it "evaluates a mod with result > 0" do
85
85
  mod = Mod.new(10.to_gbs_num, 3.to_gbs_num)
86
86
  expect(mod.evaluate).to eq(1.to_gbs_num)
87
87
  end
@@ -90,7 +90,7 @@ describe "arithmetic expressions" do
90
90
 
91
91
  describe Pow do
92
92
 
93
- it "should give 1 as a result if the power is 0" do
93
+ it "returns 1 as a result if the power is 0" do
94
94
  pow_1 = Pow.new(1.to_gbs_num, 0.to_gbs_num)
95
95
  pow_42 = Pow.new(42.to_gbs_num, 0.to_gbs_num)
96
96
 
@@ -98,11 +98,11 @@ describe "arithmetic expressions" do
98
98
  expect(pow_42.evaluate).to eq(1.to_gbs_num)
99
99
  end
100
100
 
101
- it "should calculate 2 raised to 4" do
101
+ it "evaluates 2 raised to 4" do
102
102
  pow = Pow.new(2.to_gbs_num, 4.to_gbs_num)
103
103
  expect(pow.evaluate).to eq(16.to_gbs_num)
104
104
  end
105
105
 
106
106
  end
107
107
 
108
- end
108
+ end
@@ -1,56 +1,66 @@
1
+ # TODO test/implement short-circuit?
1
2
  describe "boolean expressions" do
2
3
 
3
- let(:false_value) { False.new }
4
- let(:true_value) { True.new }
5
-
6
- # TODO test/implement short-circuit?
4
+ let(:context) { clean_context }
7
5
 
8
6
  describe And do
9
7
 
10
- it "should evaluate a simple and expression" do
11
- expect(And.new(false_value, false_value).evaluate).to eq(false_value)
12
- expect(And.new(false_value, true_value).evaluate).to eq(false_value)
13
- expect(And.new(true_value, false_value).evaluate).to eq(false_value)
14
- expect(And.new(true_value, true_value).evaluate).to eq(true_value)
8
+ it "evaluates a simple and expression" do
9
+ expect(And.new(false_value, false_value).evaluate(context)).to eq(false_value)
10
+ expect(And.new(false_value, true_value).evaluate(context)).to eq(false_value)
11
+ expect(And.new(true_value, false_value).evaluate(context)).to eq(false_value)
12
+ expect(And.new(true_value, true_value).evaluate(context)).to eq(true_value)
15
13
  end
16
14
 
17
15
  end
18
16
 
19
17
  describe Or do
20
18
 
21
- it "should evaluate a simple or expression" do
22
- expect(Or.new(false_value, false_value).evaluate).to eq(false_value)
23
- expect(Or.new(false_value, true_value).evaluate).to eq(true_value)
24
- expect(Or.new(true_value, false_value).evaluate).to eq(true_value)
25
- expect(Or.new(true_value, true_value).evaluate).to eq(true_value)
19
+ it "evaluates a simple or expression" do
20
+ expect(Or.new(false_value, false_value).evaluate(context)).to eq(false_value)
21
+ expect(Or.new(false_value, true_value).evaluate(context)).to eq(true_value)
22
+ expect(Or.new(true_value, false_value).evaluate(context)).to eq(true_value)
23
+ expect(Or.new(true_value, true_value).evaluate(context)).to eq(true_value)
26
24
  end
27
25
 
28
26
  end
29
27
 
30
28
  describe Not do
31
29
 
32
- it "should evaluate a simple not expression" do
33
- expect(Not.new(false_value).evaluate).to eq(true_value)
34
- expect(Not.new(true_value).evaluate).to eq(false_value)
30
+ it "evaluates a simple not expression" do
31
+ expect(Not.new(false_value).evaluate(context)).to eq(true_value)
32
+ expect(Not.new(true_value).evaluate(context)).to eq(false_value)
33
+ end
34
+
35
+ it "evaluates a double negated expression" do
36
+ expect(Not.new(Not.new(false_value)).evaluate(context)).to eq(false_value)
37
+ expect(Not.new(Not.new(true_value)).evaluate(context)).to eq(true_value)
35
38
  end
36
39
 
37
- it "should evaluate a not not expression" do
38
- expect(Not.new(Not.new(false_value)).evaluate).to eq(false_value)
39
- expect(Not.new(Not.new(true_value)).evaluate).to eq(true_value)
40
+ it "fails if the argument is not a boolean" do
41
+ expect { Not.new(42.to_gbs_num).evaluate(context) }.
42
+ to raise_error(GobstonesTypeError, /is not a boolean/)
43
+ expect { Not.new(azul).evaluate(context) }.
44
+ to raise_error(GobstonesTypeError, /is not a boolean/)
45
+ expect { Not.new(oeste).evaluate(context) }.
46
+ to raise_error(GobstonesTypeError, /is not a boolean/)
40
47
  end
41
48
 
42
49
  end
43
50
 
44
51
  describe "nested" do
45
52
 
46
- it "should evaluate and's and or's" do
47
- expect(And.new(Or.new(false_value, true_value), true_value).evaluate).to eq(true_value)
53
+ it "evaluates and's and or's" do
54
+ expression = And.new Or.new(false_value, true_value), true_value
55
+
56
+ expect(expression.evaluate(context)).to eq(true_value)
48
57
  end
49
58
 
50
- it "should evaluate and's, or's, and not's" do
51
- expect(Not.new(Or.new(false_value, And.new(true_value, true_value))).evaluate).to eq(false_value)
59
+ it "evaluates and's, or's, and not's" do
60
+ expression = Not.new Or.new(false_value, And.new(true_value, true_value))
61
+ expect(expression.evaluate(context)).to eq(false_value)
52
62
  end
53
63
 
54
64
  end
55
65
 
56
- end
66
+ end
@@ -1,18 +1,15 @@
1
1
  describe "comparison expressions" do
2
2
 
3
- let(:false_value) { False.new }
4
- let(:true_value) { True.new }
5
-
6
3
  describe Equal do
7
4
 
8
- it "should evaluate same booleans as equal" do
5
+ it "evaluates same booleans as equal" do
9
6
  expect(Equal.new(false_value, false_value).evaluate).to eq(true_value)
10
7
  expect(Equal.new(true_value, true_value).evaluate).to eq(true_value)
11
8
  expect(Equal.new(false_value, true_value).evaluate).to eq(false_value)
12
9
  expect(Equal.new(true_value, false_value).evaluate).to eq(false_value)
13
10
  end
14
11
 
15
- it "should evaluate same colors as equal" do
12
+ it "evaluates same colors as equal" do
16
13
  color_classes = [Azul, Negro, Rojo, Verde]
17
14
  color_classes.each do |color_class|
18
15
  expect(Equal.new(color_class.new, color_class.new).
@@ -24,7 +21,7 @@ describe "comparison expressions" do
24
21
  end
25
22
  end
26
23
 
27
- it "should evaluate same directions as equal" do
24
+ it "evaluates same directions as equal" do
28
25
  dir_classes = [Norte, Sur, Este, Oeste]
29
26
  dir_classes.each do |dir_class|
30
27
  expect(Equal.new(dir_class.new, dir_class.new).
@@ -36,7 +33,7 @@ describe "comparison expressions" do
36
33
  end
37
34
  end
38
35
 
39
- it "should evaluate same numbers as equal" do
36
+ it "evaluates same numbers as equal" do
40
37
  expect(Equal.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
41
38
  expect(Equal.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
42
39
  end
@@ -45,14 +42,14 @@ describe "comparison expressions" do
45
42
 
46
43
  describe NotEqual do
47
44
 
48
- it "should evaluate booleans as not equal" do
45
+ it "evaluates booleans as not equal" do
49
46
  expect(NotEqual.new(false_value, false_value).evaluate).to eq(false_value)
50
47
  expect(NotEqual.new(true_value, true_value).evaluate).to eq(false_value)
51
48
  expect(NotEqual.new(false_value, true_value).evaluate).to eq(true_value)
52
49
  expect(NotEqual.new(true_value, false_value).evaluate).to eq(true_value)
53
50
  end
54
51
 
55
- it "should evaluate same colors as equal" do
52
+ it "evaluates same colors as equal" do
56
53
  color_classes = [Azul, Negro, Rojo, Verde]
57
54
  color_classes.each do |color_class|
58
55
  expect(NotEqual.new(color_class.new, color_class.new).
@@ -64,7 +61,7 @@ describe "comparison expressions" do
64
61
  end
65
62
  end
66
63
 
67
- it "should evaluate same directions as equal" do
64
+ it "evaluates same directions as equal" do
68
65
  dir_classes = [Norte, Sur, Este, Oeste]
69
66
  dir_classes.each do |dir_class|
70
67
  expect(NotEqual.new(dir_class.new, dir_class.new).
@@ -76,7 +73,7 @@ describe "comparison expressions" do
76
73
  end
77
74
  end
78
75
 
79
- it "should evaluate same numbers as equal" do
76
+ it "evaluates same numbers as equal" do
80
77
  expect(NotEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
81
78
  expect(NotEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
82
79
  end
@@ -85,20 +82,20 @@ describe "comparison expressions" do
85
82
 
86
83
  describe LessThan do
87
84
 
88
- it "should evaluate for booleans" do
85
+ it "evaluates for booleans" do
89
86
  expect(LessThan.new(false_value, false_value).evaluate).to eq(false_value)
90
87
  expect(LessThan.new(false_value, true_value).evaluate).to eq(true_value)
91
88
  expect(LessThan.new(true_value, false_value).evaluate).to eq(false_value)
92
89
  expect(LessThan.new(true_value, true_value).evaluate).to eq(false_value)
93
90
  end
94
91
 
95
- it "should evaluate for numbers" do
92
+ it "evaluates for numbers" do
96
93
  expect(LessThan.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
97
94
  expect(LessThan.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
98
95
  expect(LessThan.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
99
96
  end
100
97
 
101
- it "should evaluate for colors" do
98
+ it "evaluates for colors" do
102
99
  color_classes = Color.order
103
100
  color_classes.each_with_index do |color_class, index|
104
101
  # should not be less than itself
@@ -117,7 +114,7 @@ describe "comparison expressions" do
117
114
  end
118
115
  end
119
116
 
120
- it "should evaluate for directions" do
117
+ it "evaluates for directions" do
121
118
  dir_classes = Direction.order
122
119
  dir_classes.each_with_index do |dir_class, index|
123
120
  expect(LessThan.new(dir_class.new, dir_class.new).
@@ -137,20 +134,20 @@ describe "comparison expressions" do
137
134
 
138
135
  describe LessEqual do
139
136
 
140
- it "should evaluate for booleans" do
137
+ it "evaluates for booleans" do
141
138
  expect(LessEqual.new(false_value, false_value).evaluate).to eq(true_value)
142
139
  expect(LessEqual.new(false_value, true_value).evaluate).to eq(true_value)
143
140
  expect(LessEqual.new(true_value, false_value).evaluate).to eq(false_value)
144
141
  expect(LessEqual.new(true_value, true_value).evaluate).to eq(true_value)
145
142
  end
146
143
 
147
- it "should evaluate for numbers" do
144
+ it "evaluates for numbers" do
148
145
  expect(LessEqual.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
149
146
  expect(LessEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
150
147
  expect(LessEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
151
148
  end
152
149
 
153
- it "should evaluate for colors" do
150
+ it "evaluates for colors" do
154
151
  color_classes = Color.order
155
152
  color_classes.each_with_index do |color_class, index|
156
153
  expect(LessEqual.new(color_class.new, color_class.new).
@@ -166,7 +163,7 @@ describe "comparison expressions" do
166
163
  end
167
164
  end
168
165
 
169
- it "should evaluate for directions" do
166
+ it "evaluates for directions" do
170
167
  dir_classes = Direction.order
171
168
  dir_classes.each_with_index do |dir_class, index|
172
169
  expect(LessEqual.new(dir_class.new, dir_class.new).
@@ -186,20 +183,20 @@ describe "comparison expressions" do
186
183
 
187
184
  describe GreaterThan do
188
185
 
189
- it "should evaluate for booleans" do
186
+ it "evaluates for booleans" do
190
187
  expect(GreaterThan.new(false_value, false_value).evaluate).to eq(false_value)
191
188
  expect(GreaterThan.new(false_value, true_value).evaluate).to eq(false_value)
192
189
  expect(GreaterThan.new(true_value, false_value).evaluate).to eq(true_value)
193
190
  expect(GreaterThan.new(true_value, true_value).evaluate).to eq(false_value)
194
191
  end
195
192
 
196
- it "should evaluate for numbers" do
193
+ it "evaluates for numbers" do
197
194
  expect(GreaterThan.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
198
195
  expect(GreaterThan.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
199
196
  expect(GreaterThan.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
200
197
  end
201
198
 
202
- it "should evaluate for colors" do
199
+ it "evaluates for colors" do
203
200
  color_classes = Color.order
204
201
  color_classes.each_with_index do |color_class, index|
205
202
  expect(GreaterThan.new(color_class.new, color_class.new).
@@ -215,7 +212,7 @@ describe "comparison expressions" do
215
212
  end
216
213
  end
217
214
 
218
- it "should evaluate for directions" do
215
+ it "evaluates for directions" do
219
216
  dir_classes = Direction.order
220
217
  dir_classes.each_with_index do |dir_class, index|
221
218
  expect(GreaterThan.new(dir_class.new, dir_class.new).
@@ -235,20 +232,20 @@ describe "comparison expressions" do
235
232
 
236
233
  describe GreaterEqual do
237
234
 
238
- it "should evaluate for booleans" do
235
+ it "evaluates for booleans" do
239
236
  expect(GreaterEqual.new(false_value, false_value).evaluate).to eq(true_value)
240
237
  expect(GreaterEqual.new(false_value, true_value).evaluate).to eq(false_value)
241
238
  expect(GreaterEqual.new(true_value, false_value).evaluate).to eq(true_value)
242
239
  expect(GreaterEqual.new(true_value, true_value).evaluate).to eq(true_value)
243
240
  end
244
241
 
245
- it "should evaluate for numbers" do
242
+ it "evaluates for numbers" do
246
243
  expect(GreaterEqual.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
247
244
  expect(GreaterEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
248
245
  expect(GreaterEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
249
246
  end
250
247
 
251
- it "should evaluate for colors" do
248
+ it "evaluates for colors" do
252
249
  color_classes = Color.order
253
250
  color_classes.each_with_index do |color_class, index|
254
251
  expect(GreaterEqual.new(color_class.new, color_class.new).
@@ -264,7 +261,7 @@ describe "comparison expressions" do
264
261
  end
265
262
  end
266
263
 
267
- it "should evaluate for directions" do
264
+ it "evaluates for directions" do
268
265
  dir_classes = Direction.order
269
266
  dir_classes.each_with_index do |dir_class, index|
270
267
  expect(GreaterEqual.new(dir_class.new, dir_class.new).
@@ -282,4 +279,4 @@ describe "comparison expressions" do
282
279
 
283
280
  end
284
281
 
285
- end
282
+ end