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.
- checksums.yaml +4 -4
- data/.gitignore +1 -3
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG +22 -2
- data/Gemfile +3 -3
- data/Gemfile.lock +32 -27
- data/bin/gobstones +1 -1
- data/examples/.gitkeep +0 -0
- data/gobstones.gemspec +2 -2
- data/lib/gobstones/cli/board_template +1 -1
- data/lib/gobstones/cli/printer.rb +1 -1
- data/lib/gobstones/cli/runner.rb +8 -2
- data/lib/gobstones/extensions/all.rb +2 -1
- data/lib/gobstones/extensions/boolean.rb +1 -1
- data/lib/gobstones/extensions/fixnum.rb +1 -1
- data/lib/gobstones/extensions/string.rb +9 -0
- data/lib/gobstones/lang/all.rb +1 -1
- data/lib/gobstones/lang/commands/all.rb +3 -2
- data/lib/gobstones/lang/commands/boom_cmd.rb +6 -3
- data/lib/gobstones/lang/commands/command_block.rb +1 -1
- data/lib/gobstones/lang/commands/conditional_cmd.rb +5 -1
- data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +1 -1
- data/lib/gobstones/lang/commands/mover_cmd.rb +4 -2
- data/lib/gobstones/lang/commands/multiple_assignment.rb +35 -0
- data/lib/gobstones/lang/commands/poner_cmd.rb +8 -4
- data/lib/gobstones/lang/commands/procedure_call.rb +1 -9
- data/lib/gobstones/lang/commands/repeat_with_cmd.rb +10 -6
- data/lib/gobstones/lang/commands/sacar_cmd.rb +9 -7
- data/lib/gobstones/lang/commands/{assignments.rb → single_assignment.rb} +5 -3
- data/lib/gobstones/lang/commands/skip_cmd.rb +2 -2
- data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +1 -1
- data/lib/gobstones/lang/commands/while_cmd.rb +1 -1
- data/lib/gobstones/lang/definitions/all.rb +1 -1
- data/lib/gobstones/lang/definitions/definition.rb +47 -5
- data/lib/gobstones/lang/definitions/definition_call.rb +17 -5
- data/lib/gobstones/lang/definitions/function.rb +9 -0
- data/lib/gobstones/lang/definitions/main.rb +1 -1
- data/lib/gobstones/lang/definitions/no_return_statement.rb +7 -3
- data/lib/gobstones/lang/definitions/procedure.rb +5 -20
- data/lib/gobstones/lang/definitions/return_from_function.rb +12 -2
- data/lib/gobstones/lang/definitions/return_from_main.rb +5 -1
- data/lib/gobstones/lang/definitions/var_tuple.rb +13 -1
- data/lib/gobstones/lang/expressions/all.rb +1 -1
- data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +1 -1
- data/lib/gobstones/lang/expressions/boolean_expressions.rb +3 -2
- data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +17 -0
- data/lib/gobstones/lang/expressions/function_call.rb +1 -1
- data/lib/gobstones/lang/expressions/one_arg_expression.rb +16 -4
- data/lib/gobstones/lang/expressions/primitive_functions.rb +18 -12
- data/lib/gobstones/lang/expressions/two_arg_expression.rb +7 -3
- data/lib/gobstones/lang/expressions/type_bound_functions.rb +1 -1
- data/lib/gobstones/lang/expressions/var_name.rb +9 -3
- data/lib/gobstones/lang/literals/all.rb +1 -1
- data/lib/gobstones/lang/literals/colors.rb +1 -1
- data/lib/gobstones/lang/literals/literal.rb +31 -21
- data/lib/gobstones/lang/literals/number.rb +1 -1
- data/lib/gobstones/lang/program.rb +13 -4
- data/lib/gobstones/modules/equal_by_class.rb +1 -1
- data/lib/gobstones/parser/ast/ast.rb +12 -8
- data/lib/gobstones/parser/grammar/gobstones.treetop +4 -4
- data/lib/gobstones/parser/parse_error.rb +1 -1
- data/lib/gobstones/runner/all.rb +1 -2
- data/lib/gobstones/runner/board.rb +13 -4
- data/lib/gobstones/runner/cell.rb +10 -0
- data/lib/gobstones/runner/errors/all.rb +1 -1
- data/lib/gobstones/runner/errors/definition_not_found_error.rb +1 -1
- data/lib/gobstones/runner/execution_context.rb +66 -16
- data/lib/gobstones/runner/head.rb +17 -3
- data/spec/gobstones_lang_test_objects.rb +75 -0
- data/spec/lang/commands/boom_cmd_spec.rb +3 -3
- data/spec/lang/commands/cmd_block_spec.rb +14 -14
- data/spec/lang/commands/if_cmd_spec.rb +21 -20
- data/spec/lang/commands/ir_al_origen_cmd_spec.rb +3 -3
- data/spec/lang/commands/mover_cmd_spec.rb +12 -14
- data/spec/lang/commands/multiple_assignment_spec.rb +37 -0
- data/spec/lang/commands/poner_cmd_spec.rb +13 -14
- data/spec/lang/commands/procedure_call_spec.rb +19 -24
- data/spec/lang/commands/procedure_spec.rb +32 -36
- data/spec/lang/commands/repeat_with_cmd_spec.rb +39 -20
- data/spec/lang/commands/sacar_cmd_spec.rb +17 -16
- data/spec/lang/commands/single_assignment_spec.rb +13 -0
- data/spec/lang/commands/skip_cmd_spec.rb +2 -2
- data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +7 -6
- data/spec/lang/commands/while_cmd_spec.rb +21 -15
- data/spec/lang/definitions/no_return_statement_spec.rb +10 -0
- data/spec/lang/definitions/var_tuple_spec.rb +16 -0
- data/spec/lang/expressions/arithmetic_expressions_spec.rb +15 -15
- data/spec/lang/expressions/boolean_expressions_spec.rb +35 -25
- data/spec/lang/expressions/comparison_expressions_spec.rb +25 -28
- data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +11 -0
- data/spec/lang/expressions/function_call_spec.rb +29 -0
- data/spec/lang/expressions/primitive_functions_spec.rb +60 -62
- data/spec/lang/expressions/type_bound_functions_spec.rb +13 -13
- data/spec/lang/expressions/var_name_spec.rb +20 -8
- data/spec/lang/literals/booleans_spec.rb +5 -7
- data/spec/lang/literals/colors_spec.rb +4 -4
- data/spec/lang/literals/directions_spec.rb +12 -12
- data/spec/lang/literals/numbers_spec.rb +2 -2
- data/spec/matchers/parse_matcher.rb +9 -10
- data/spec/parser/arithmetic_expressions_spec.rb +19 -19
- data/spec/parser/assignments_spec.rb +24 -10
- data/spec/parser/boolean_expressions_spec.rb +18 -18
- data/spec/parser/command_block_spec.rb +17 -19
- data/spec/parser/data_types_spec.rb +23 -23
- data/spec/parser/function_calls_spec.rb +13 -12
- data/spec/parser/function_definitions_spec.rb +13 -18
- data/spec/parser/gobstones_program_spec.rb +15 -15
- data/spec/parser/if_command_spec.rb +13 -12
- data/spec/parser/main_definition_spec.rb +12 -12
- data/spec/parser/nested_expressions_spec.rb +16 -20
- data/spec/parser/primitive_expressions_spec.rb +27 -33
- data/spec/parser/procedure_calls_spec.rb +12 -12
- data/spec/parser/procedure_definitions_spec.rb +10 -16
- data/spec/parser/repeat_with_command_spec.rb +7 -10
- data/spec/parser/simple_commands_spec.rb +10 -10
- data/spec/parser/treetop_parser_spec.rb +11 -10
- data/spec/parser/var_tuple_spec.rb +7 -11
- data/spec/parser/while_command_spec.rb +9 -9
- data/spec/runner/board_spec.rb +23 -27
- data/spec/runner/cell_spec.rb +34 -38
- data/spec/runner/execution_context_spec.rb +38 -24
- data/spec/runner/head_spec.rb +54 -63
- data/spec/spec_helper.rb +4 -1
- data/spec/type_checker_spec.rb +13 -13
- metadata +33 -18
- data/lib/gobstones/lang/expressions/parentheses_expression.rb +0 -13
- data/spec/lang/commands/assignments_spec.rb +0 -13
@@ -1,13 +1,14 @@
|
|
1
1
|
describe VaciarTablero do
|
2
2
|
|
3
|
-
let(:context) {
|
4
|
-
let(:red) { Rojo.new }
|
3
|
+
let(:context) { clean_context }
|
5
4
|
|
6
|
-
it "
|
7
|
-
context.head.put
|
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
|
-
|
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) {
|
4
|
-
let(:while_block) {
|
3
|
+
let(:context) { clean_context }
|
4
|
+
let(:while_block) { CommandBlock.new [Poner.new(verde)] }
|
5
5
|
|
6
6
|
def condition(times)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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 "
|
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
|
-
|
17
|
+
|
18
|
+
expect(context.head.number_of_balls(verde)).to eq(3)
|
17
19
|
end
|
18
20
|
|
19
|
-
it "
|
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
|
-
|
25
|
+
|
26
|
+
expect(context.head.are_there_balls?(verde)).to be false
|
23
27
|
end
|
24
28
|
|
25
|
-
it "
|
26
|
-
while_cmd = WhileCmd.new
|
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 "
|
32
|
-
while_cmd = WhileCmd.new
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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(:
|
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 "
|
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 "
|
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 "
|
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 "
|
38
|
-
expect
|
39
|
-
|
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 "
|
47
|
-
|
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 "
|
51
|
-
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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 "
|
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
|