gobstones 0.0.1.1
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 +7 -0
- data/.gitignore +6 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.simplecov +3 -0
- data/.travis.yml +4 -0
- data/CHANGELOG +4 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +47 -0
- data/LICENSE +675 -0
- data/README.md +17 -0
- data/Rakefile +4 -0
- data/bin/gobstones +12 -0
- data/gobstones.gemspec +24 -0
- data/lib/gobstones/cli/board_template +39 -0
- data/lib/gobstones/cli/printer.rb +106 -0
- data/lib/gobstones/cli/runner.rb +52 -0
- data/lib/gobstones/extensions/all.rb +2 -0
- data/lib/gobstones/extensions/boolean.rb +17 -0
- data/lib/gobstones/extensions/fixnum.rb +9 -0
- data/lib/gobstones/lang/all.rb +5 -0
- data/lib/gobstones/lang/commands/all.rb +13 -0
- data/lib/gobstones/lang/commands/assignments.rb +29 -0
- data/lib/gobstones/lang/commands/boom_cmd.rb +28 -0
- data/lib/gobstones/lang/commands/command_block.rb +37 -0
- data/lib/gobstones/lang/commands/conditional_cmd.rb +27 -0
- data/lib/gobstones/lang/commands/if_cmd.rb +38 -0
- data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +19 -0
- data/lib/gobstones/lang/commands/mover_cmd.rb +25 -0
- data/lib/gobstones/lang/commands/poner_cmd.rb +31 -0
- data/lib/gobstones/lang/commands/procedure_call.rb +23 -0
- data/lib/gobstones/lang/commands/repeat_with_cmd.rb +73 -0
- data/lib/gobstones/lang/commands/sacar_cmd.rb +31 -0
- data/lib/gobstones/lang/commands/skip_cmd.rb +19 -0
- data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +19 -0
- data/lib/gobstones/lang/commands/while_cmd.rb +25 -0
- data/lib/gobstones/lang/definitions/all.rb +4 -0
- data/lib/gobstones/lang/definitions/definition.rb +32 -0
- data/lib/gobstones/lang/definitions/definition_call.rb +24 -0
- data/lib/gobstones/lang/definitions/function.rb +14 -0
- data/lib/gobstones/lang/definitions/main.rb +26 -0
- data/lib/gobstones/lang/definitions/no_return_statement.rb +15 -0
- data/lib/gobstones/lang/definitions/procedure.rb +44 -0
- data/lib/gobstones/lang/definitions/return_from_function.rb +22 -0
- data/lib/gobstones/lang/definitions/return_from_main.rb +22 -0
- data/lib/gobstones/lang/definitions/var_tuple.rb +26 -0
- data/lib/gobstones/lang/expressions/all.rb +8 -0
- data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +52 -0
- data/lib/gobstones/lang/expressions/boolean_expressions.rb +29 -0
- data/lib/gobstones/lang/expressions/comparison_expressions.rb +45 -0
- data/lib/gobstones/lang/expressions/function_call.rb +15 -0
- data/lib/gobstones/lang/expressions/one_arg_expression.rb +21 -0
- data/lib/gobstones/lang/expressions/parentheses_expression.rb +13 -0
- data/lib/gobstones/lang/expressions/primitive_functions.rb +68 -0
- data/lib/gobstones/lang/expressions/two_arg_expression.rb +34 -0
- data/lib/gobstones/lang/expressions/type_bound_functions.rb +66 -0
- data/lib/gobstones/lang/expressions/var_name.rb +31 -0
- data/lib/gobstones/lang/literals/all.rb +4 -0
- data/lib/gobstones/lang/literals/booleans.rb +109 -0
- data/lib/gobstones/lang/literals/colors.rb +94 -0
- data/lib/gobstones/lang/literals/directions.rb +137 -0
- data/lib/gobstones/lang/literals/literal.rb +63 -0
- data/lib/gobstones/lang/literals/number.rb +49 -0
- data/lib/gobstones/lang/program.rb +32 -0
- data/lib/gobstones/modules/equal_by_class.rb +13 -0
- data/lib/gobstones/parser/ast/ast.rb +210 -0
- data/lib/gobstones/parser/grammar/gobstones.treetop +316 -0
- data/lib/gobstones/parser/parse_error.rb +17 -0
- data/lib/gobstones/parser/treetop_parser.rb +73 -0
- data/lib/gobstones/runner/all.rb +6 -0
- data/lib/gobstones/runner/board.rb +57 -0
- data/lib/gobstones/runner/cell.rb +60 -0
- data/lib/gobstones/runner/errors/all.rb +8 -0
- data/lib/gobstones/runner/errors/boom_error.rb +11 -0
- data/lib/gobstones/runner/errors/definition_not_found_error.rb +19 -0
- data/lib/gobstones/runner/errors/empty_cell_error.rb +11 -0
- data/lib/gobstones/runner/errors/gobstones_runtime_error.rb +11 -0
- data/lib/gobstones/runner/errors/gobstones_type_error.rb +11 -0
- data/lib/gobstones/runner/errors/out_of_board_error.rb +11 -0
- data/lib/gobstones/runner/errors/undefined_variable_error.rb +11 -0
- data/lib/gobstones/runner/errors/wrong_arguments_error.rb +11 -0
- data/lib/gobstones/runner/execution_context.rb +89 -0
- data/lib/gobstones/runner/head.rb +101 -0
- data/lib/gobstones/type_check_result.rb +16 -0
- data/spec/lang/commands/assignments_spec.rb +13 -0
- data/spec/lang/commands/boom_cmd_spec.rb +8 -0
- data/spec/lang/commands/cmd_block_spec.rb +21 -0
- data/spec/lang/commands/if_cmd_spec.rb +49 -0
- data/spec/lang/commands/ir_al_origen_cmd_spec.rb +16 -0
- data/spec/lang/commands/mover_cmd_spec.rb +38 -0
- data/spec/lang/commands/poner_cmd_spec.rb +29 -0
- data/spec/lang/commands/procedure_call_spec.rb +44 -0
- data/spec/lang/commands/procedure_spec.rb +67 -0
- data/spec/lang/commands/repeat_with_cmd_spec.rb +41 -0
- data/spec/lang/commands/sacar_cmd_spec.rb +34 -0
- data/spec/lang/commands/skip_cmd_spec.rb +12 -0
- data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +13 -0
- data/spec/lang/commands/while_cmd_spec.rb +37 -0
- data/spec/lang/expressions/arithmetic_expressions_spec.rb +108 -0
- data/spec/lang/expressions/boolean_expressions_spec.rb +56 -0
- data/spec/lang/expressions/comparison_expressions_spec.rb +285 -0
- data/spec/lang/expressions/primitive_functions_spec.rb +126 -0
- data/spec/lang/expressions/type_bound_functions_spec.rb +39 -0
- data/spec/lang/expressions/var_name_spec.rb +16 -0
- data/spec/lang/literals/booleans_spec.rb +13 -0
- data/spec/lang/literals/colors_spec.rb +13 -0
- data/spec/lang/literals/directions_spec.rb +45 -0
- data/spec/lang/literals/numbers_spec.rb +8 -0
- data/spec/matchers/parse_matcher.rb +84 -0
- data/spec/parser/arithmetic_expressions_spec.rb +129 -0
- data/spec/parser/assignments_spec.rb +39 -0
- data/spec/parser/boolean_expressions_spec.rb +111 -0
- data/spec/parser/command_block_spec.rb +50 -0
- data/spec/parser/data_types_spec.rb +67 -0
- data/spec/parser/function_calls_spec.rb +37 -0
- data/spec/parser/function_definitions_spec.rb +50 -0
- data/spec/parser/gobstones_program_spec.rb +55 -0
- data/spec/parser/if_command_spec.rb +46 -0
- data/spec/parser/main_definition_spec.rb +42 -0
- data/spec/parser/nested_expressions_spec.rb +39 -0
- data/spec/parser/primitive_expressions_spec.rb +105 -0
- data/spec/parser/procedure_calls_spec.rb +36 -0
- data/spec/parser/procedure_definitions_spec.rb +39 -0
- data/spec/parser/repeat_with_command_spec.rb +23 -0
- data/spec/parser/simple_commands_spec.rb +62 -0
- data/spec/parser/treetop_parser_spec.rb +109 -0
- data/spec/parser/var_tuple_spec.rb +30 -0
- data/spec/parser/while_command_spec.rb +30 -0
- data/spec/runner/board_spec.rb +85 -0
- data/spec/runner/cell_spec.rb +72 -0
- data/spec/runner/execution_context_spec.rb +64 -0
- data/spec/runner/head_spec.rb +139 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/type_checker_spec.rb +37 -0
- metadata +242 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
describe "arithmetic expressions" do
|
2
|
+
|
3
|
+
describe Add do
|
4
|
+
|
5
|
+
it "should evaluate with two numbers" do
|
6
|
+
add = Add.new(42.to_gbs_num, 23.to_gbs_num)
|
7
|
+
expect(add.evaluate).to eq(65.to_gbs_num)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should evaluate nested add expressions" do
|
11
|
+
add_4_8 = Add.new 4.to_gbs_num, 8.to_gbs_num
|
12
|
+
add_12_15 = Add.new add_4_8, 15.to_gbs_num
|
13
|
+
add_27_16 = Add.new add_12_15, 16.to_gbs_num
|
14
|
+
add_43_23 = Add.new add_27_16, 23.to_gbs_num
|
15
|
+
add_66_42 = Add.new add_43_23, 42.to_gbs_num
|
16
|
+
|
17
|
+
expect(add_66_42.evaluate).to eq(108.to_gbs_num)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe Sub do
|
23
|
+
|
24
|
+
it "should evaluate with two numbers" do
|
25
|
+
sub = Sub.new(42.to_gbs_num, 15.to_gbs_num)
|
26
|
+
expect(sub.evaluate).to eq(27.to_gbs_num)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should evaluate and return a negative result" do
|
30
|
+
sub = Sub.new(15.to_gbs_num, 42.to_gbs_num)
|
31
|
+
expect(sub.evaluate).to eq(-27.to_gbs_num)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should evaluate nested sub expressions" do
|
35
|
+
sub_n1_n2 = Sub.new 42.to_gbs_num, 15.to_gbs_num
|
36
|
+
sub = Sub.new sub_n1_n2, 8.to_gbs_num
|
37
|
+
|
38
|
+
expect(sub.evaluate).to eq(19.to_gbs_num)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe Mul do
|
44
|
+
|
45
|
+
it "should evaluate a simple mul" do
|
46
|
+
mul = Mul.new(4.to_gbs_num, 8.to_gbs_num)
|
47
|
+
expect(mul.evaluate).to eq(32.to_gbs_num)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should evaluate a nested mul expression" do
|
51
|
+
mul = Mul.new(-2.to_gbs_num, 4.to_gbs_num)
|
52
|
+
expect(Mul.new(mul, 5.to_gbs_num).evaluate).to eq(-40.to_gbs_num)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe Div do
|
58
|
+
|
59
|
+
it "should evaluate a simple div" do
|
60
|
+
div = Div.new(12.to_gbs_num, 3.to_gbs_num)
|
61
|
+
expect(div.evaluate).to eq(4.to_gbs_num)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should evaluate to an integer division" do
|
65
|
+
div = Div.new(10.to_gbs_num, 3.to_gbs_num)
|
66
|
+
expect(div.evaluate).to eq(3.to_gbs_num)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should raise an error when dividing by zero" do
|
70
|
+
expect {
|
71
|
+
Div.new(42.to_gbs_num, 0.to_gbs_num).evaluate
|
72
|
+
}.to raise_error(GobstonesRuntimeError, 'zero division')
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
describe Mod do
|
78
|
+
|
79
|
+
it "should evaluate a mod with result 0" do
|
80
|
+
mod = Mod.new(4.to_gbs_num, 4.to_gbs_num)
|
81
|
+
expect(mod.evaluate).to eq(0.to_gbs_num)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should evaluate a mod with result > 0" do
|
85
|
+
mod = Mod.new(10.to_gbs_num, 3.to_gbs_num)
|
86
|
+
expect(mod.evaluate).to eq(1.to_gbs_num)
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
describe Pow do
|
92
|
+
|
93
|
+
it "should give 1 as a result if the power is 0" do
|
94
|
+
pow_1 = Pow.new(1.to_gbs_num, 0.to_gbs_num)
|
95
|
+
pow_42 = Pow.new(42.to_gbs_num, 0.to_gbs_num)
|
96
|
+
|
97
|
+
expect(pow_1.evaluate).to eq(1.to_gbs_num)
|
98
|
+
expect(pow_42.evaluate).to eq(1.to_gbs_num)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should calculate 2 raised to 4" do
|
102
|
+
pow = Pow.new(2.to_gbs_num, 4.to_gbs_num)
|
103
|
+
expect(pow.evaluate).to eq(16.to_gbs_num)
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
describe "boolean expressions" do
|
2
|
+
|
3
|
+
let(:false_value) { False.new }
|
4
|
+
let(:true_value) { True.new }
|
5
|
+
|
6
|
+
# TODO test/implement short-circuit?
|
7
|
+
|
8
|
+
describe And do
|
9
|
+
|
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)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Or do
|
20
|
+
|
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)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe Not do
|
31
|
+
|
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)
|
35
|
+
end
|
36
|
+
|
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
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "nested" do
|
45
|
+
|
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)
|
48
|
+
end
|
49
|
+
|
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)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,285 @@
|
|
1
|
+
describe "comparison expressions" do
|
2
|
+
|
3
|
+
let(:false_value) { False.new }
|
4
|
+
let(:true_value) { True.new }
|
5
|
+
|
6
|
+
describe Equal do
|
7
|
+
|
8
|
+
it "should evaluate same booleans as equal" do
|
9
|
+
expect(Equal.new(false_value, false_value).evaluate).to eq(true_value)
|
10
|
+
expect(Equal.new(true_value, true_value).evaluate).to eq(true_value)
|
11
|
+
expect(Equal.new(false_value, true_value).evaluate).to eq(false_value)
|
12
|
+
expect(Equal.new(true_value, false_value).evaluate).to eq(false_value)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should evaluate same colors as equal" do
|
16
|
+
color_classes = [Azul, Negro, Rojo, Verde]
|
17
|
+
color_classes.each do |color_class|
|
18
|
+
expect(Equal.new(color_class.new, color_class.new).
|
19
|
+
evaluate).to eq(true_value)
|
20
|
+
(color_classes - [color_class]).each do |different_color_class|
|
21
|
+
expect(Equal.new(color_class.new, different_color_class.new).
|
22
|
+
evaluate).to eq(false_value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should evaluate same directions as equal" do
|
28
|
+
dir_classes = [Norte, Sur, Este, Oeste]
|
29
|
+
dir_classes.each do |dir_class|
|
30
|
+
expect(Equal.new(dir_class.new, dir_class.new).
|
31
|
+
evaluate).to eq(true_value)
|
32
|
+
(dir_classes - [dir_class]).each do |different_dir_class|
|
33
|
+
expect(Equal.new(dir_class.new, different_dir_class.new).
|
34
|
+
evaluate).to eq(false_value)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should evaluate same numbers as equal" do
|
40
|
+
expect(Equal.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
|
41
|
+
expect(Equal.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe NotEqual do
|
47
|
+
|
48
|
+
it "should evaluate booleans as not equal" do
|
49
|
+
expect(NotEqual.new(false_value, false_value).evaluate).to eq(false_value)
|
50
|
+
expect(NotEqual.new(true_value, true_value).evaluate).to eq(false_value)
|
51
|
+
expect(NotEqual.new(false_value, true_value).evaluate).to eq(true_value)
|
52
|
+
expect(NotEqual.new(true_value, false_value).evaluate).to eq(true_value)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should evaluate same colors as equal" do
|
56
|
+
color_classes = [Azul, Negro, Rojo, Verde]
|
57
|
+
color_classes.each do |color_class|
|
58
|
+
expect(NotEqual.new(color_class.new, color_class.new).
|
59
|
+
evaluate).to eq(false_value)
|
60
|
+
(color_classes - [color_class]).each do |different_color_class|
|
61
|
+
expect(NotEqual.new(color_class.new, different_color_class.new).
|
62
|
+
evaluate).to eq(true_value)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should evaluate same directions as equal" do
|
68
|
+
dir_classes = [Norte, Sur, Este, Oeste]
|
69
|
+
dir_classes.each do |dir_class|
|
70
|
+
expect(NotEqual.new(dir_class.new, dir_class.new).
|
71
|
+
evaluate).to eq(false_value)
|
72
|
+
(dir_classes - [dir_class]).each do |different_dir_class|
|
73
|
+
expect(NotEqual.new(dir_class.new, different_dir_class.new).
|
74
|
+
evaluate).to eq(true_value)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should evaluate same numbers as equal" do
|
80
|
+
expect(NotEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
|
81
|
+
expect(NotEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
describe LessThan do
|
87
|
+
|
88
|
+
it "should evaluate for booleans" do
|
89
|
+
expect(LessThan.new(false_value, false_value).evaluate).to eq(false_value)
|
90
|
+
expect(LessThan.new(false_value, true_value).evaluate).to eq(true_value)
|
91
|
+
expect(LessThan.new(true_value, false_value).evaluate).to eq(false_value)
|
92
|
+
expect(LessThan.new(true_value, true_value).evaluate).to eq(false_value)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should evaluate for numbers" do
|
96
|
+
expect(LessThan.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
|
97
|
+
expect(LessThan.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
|
98
|
+
expect(LessThan.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should evaluate for colors" do
|
102
|
+
color_classes = Color.order
|
103
|
+
color_classes.each_with_index do |color_class, index|
|
104
|
+
# should not be less than itself
|
105
|
+
expect(LessThan.new(color_class.new, color_class.new).
|
106
|
+
evaluate).to eq(false_value)
|
107
|
+
color_classes.take(index).each do |previous_color_class|
|
108
|
+
# should not be less than any previous value
|
109
|
+
expect(LessThan.new(color_class.new, previous_color_class.new).
|
110
|
+
evaluate).to eq(false_value)
|
111
|
+
end
|
112
|
+
color_classes.drop(index+1).each do |next_color_class|
|
113
|
+
# should be less than any next value
|
114
|
+
expect(LessThan.new(color_class.new, next_color_class.new).
|
115
|
+
evaluate).to eq(true_value)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should evaluate for directions" do
|
121
|
+
dir_classes = Direction.order
|
122
|
+
dir_classes.each_with_index do |dir_class, index|
|
123
|
+
expect(LessThan.new(dir_class.new, dir_class.new).
|
124
|
+
evaluate).to eq(false_value)
|
125
|
+
dir_classes.take(index).each do |previous_dir_class|
|
126
|
+
expect(LessThan.new(dir_class.new, previous_dir_class.new).
|
127
|
+
evaluate).to eq(false_value)
|
128
|
+
end
|
129
|
+
dir_classes.drop(index+1).each do |next_dir_class|
|
130
|
+
expect(LessThan.new(dir_class.new, next_dir_class.new).
|
131
|
+
evaluate).to eq(true_value)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
describe LessEqual do
|
139
|
+
|
140
|
+
it "should evaluate for booleans" do
|
141
|
+
expect(LessEqual.new(false_value, false_value).evaluate).to eq(true_value)
|
142
|
+
expect(LessEqual.new(false_value, true_value).evaluate).to eq(true_value)
|
143
|
+
expect(LessEqual.new(true_value, false_value).evaluate).to eq(false_value)
|
144
|
+
expect(LessEqual.new(true_value, true_value).evaluate).to eq(true_value)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should evaluate for numbers" do
|
148
|
+
expect(LessEqual.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
|
149
|
+
expect(LessEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(false_value)
|
150
|
+
expect(LessEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should evaluate for colors" do
|
154
|
+
color_classes = Color.order
|
155
|
+
color_classes.each_with_index do |color_class, index|
|
156
|
+
expect(LessEqual.new(color_class.new, color_class.new).
|
157
|
+
evaluate).to eq(true_value)
|
158
|
+
color_classes.take(index).each do |previous_color_class|
|
159
|
+
expect(LessEqual.new(color_class.new, previous_color_class.new).
|
160
|
+
evaluate).to eq(false_value)
|
161
|
+
end
|
162
|
+
color_classes.drop(index+1).each do |next_color_class|
|
163
|
+
expect(LessEqual.new(color_class.new, next_color_class.new).
|
164
|
+
evaluate).to eq(true_value)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should evaluate for directions" do
|
170
|
+
dir_classes = Direction.order
|
171
|
+
dir_classes.each_with_index do |dir_class, index|
|
172
|
+
expect(LessEqual.new(dir_class.new, dir_class.new).
|
173
|
+
evaluate).to eq(true_value)
|
174
|
+
dir_classes.take(index).each do |previous_dir_class|
|
175
|
+
expect(LessEqual.new(dir_class.new, previous_dir_class.new).
|
176
|
+
evaluate).to eq(false_value)
|
177
|
+
end
|
178
|
+
dir_classes.drop(index+1).each do |next_dir_class|
|
179
|
+
expect(LessEqual.new(dir_class.new, next_dir_class.new).
|
180
|
+
evaluate).to eq(true_value)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
describe GreaterThan do
|
188
|
+
|
189
|
+
it "should evaluate for booleans" do
|
190
|
+
expect(GreaterThan.new(false_value, false_value).evaluate).to eq(false_value)
|
191
|
+
expect(GreaterThan.new(false_value, true_value).evaluate).to eq(false_value)
|
192
|
+
expect(GreaterThan.new(true_value, false_value).evaluate).to eq(true_value)
|
193
|
+
expect(GreaterThan.new(true_value, true_value).evaluate).to eq(false_value)
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should evaluate for numbers" do
|
197
|
+
expect(GreaterThan.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
|
198
|
+
expect(GreaterThan.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
|
199
|
+
expect(GreaterThan.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should evaluate for colors" do
|
203
|
+
color_classes = Color.order
|
204
|
+
color_classes.each_with_index do |color_class, index|
|
205
|
+
expect(GreaterThan.new(color_class.new, color_class.new).
|
206
|
+
evaluate).to eq(false_value)
|
207
|
+
color_classes.take(index).each do |previous_color_class|
|
208
|
+
expect(GreaterThan.new(color_class.new, previous_color_class.new).
|
209
|
+
evaluate).to eq(true_value)
|
210
|
+
end
|
211
|
+
color_classes.drop(index+1).each do |next_color_class|
|
212
|
+
expect(GreaterThan.new(color_class.new, next_color_class.new).
|
213
|
+
evaluate).to eq(false_value)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should evaluate for directions" do
|
219
|
+
dir_classes = Direction.order
|
220
|
+
dir_classes.each_with_index do |dir_class, index|
|
221
|
+
expect(GreaterThan.new(dir_class.new, dir_class.new).
|
222
|
+
evaluate).to eq(false_value)
|
223
|
+
dir_classes.take(index).each do |previous_dir_class|
|
224
|
+
expect(GreaterThan.new(dir_class.new, previous_dir_class.new).
|
225
|
+
evaluate).to eq(true_value)
|
226
|
+
end
|
227
|
+
dir_classes.drop(index+1).each do |next_dir_class|
|
228
|
+
expect(GreaterThan.new(dir_class.new, next_dir_class.new).
|
229
|
+
evaluate).to eq(false_value)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
end
|
235
|
+
|
236
|
+
describe GreaterEqual do
|
237
|
+
|
238
|
+
it "should evaluate for booleans" do
|
239
|
+
expect(GreaterEqual.new(false_value, false_value).evaluate).to eq(true_value)
|
240
|
+
expect(GreaterEqual.new(false_value, true_value).evaluate).to eq(false_value)
|
241
|
+
expect(GreaterEqual.new(true_value, false_value).evaluate).to eq(true_value)
|
242
|
+
expect(GreaterEqual.new(true_value, true_value).evaluate).to eq(true_value)
|
243
|
+
end
|
244
|
+
|
245
|
+
it "should evaluate for numbers" do
|
246
|
+
expect(GreaterEqual.new(15.to_gbs_num, 42.to_gbs_num).evaluate).to eq(false_value)
|
247
|
+
expect(GreaterEqual.new(42.to_gbs_num, 15.to_gbs_num).evaluate).to eq(true_value)
|
248
|
+
expect(GreaterEqual.new(42.to_gbs_num, 42.to_gbs_num).evaluate).to eq(true_value)
|
249
|
+
end
|
250
|
+
|
251
|
+
it "should evaluate for colors" do
|
252
|
+
color_classes = Color.order
|
253
|
+
color_classes.each_with_index do |color_class, index|
|
254
|
+
expect(GreaterEqual.new(color_class.new, color_class.new).
|
255
|
+
evaluate).to eq(true_value)
|
256
|
+
color_classes.take(index).each do |previous_color_class|
|
257
|
+
expect(GreaterEqual.new(color_class.new, previous_color_class.new).
|
258
|
+
evaluate).to eq(true_value)
|
259
|
+
end
|
260
|
+
color_classes.drop(index+1).each do |next_color_class|
|
261
|
+
expect(GreaterEqual.new(color_class.new, next_color_class.new).
|
262
|
+
evaluate).to eq(false_value)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
it "should evaluate for directions" do
|
268
|
+
dir_classes = Direction.order
|
269
|
+
dir_classes.each_with_index do |dir_class, index|
|
270
|
+
expect(GreaterEqual.new(dir_class.new, dir_class.new).
|
271
|
+
evaluate).to eq(true_value)
|
272
|
+
dir_classes.take(index).each do |previous_dir_class|
|
273
|
+
expect(GreaterEqual.new(dir_class.new, previous_dir_class.new).
|
274
|
+
evaluate).to eq(true_value)
|
275
|
+
end
|
276
|
+
dir_classes.drop(index+1).each do |next_dir_class|
|
277
|
+
expect(GreaterEqual.new(dir_class.new, next_dir_class.new).
|
278
|
+
evaluate).to eq(false_value)
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|