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,37 +1,38 @@
1
1
  describe Gobstones::Parser, "function calls" do
2
2
 
3
- it "should parse a function call without args" do
3
+ it "parses a function call without args" do
4
4
  expected = FunctionCall.new 'f1'
5
5
  expect('f1()').to be_parsed_as(:expression).and_return(expected)
6
6
  end
7
7
 
8
- it "should not parse a function call without a valid identifier" do
8
+ it "does not parse a function call without a valid identifier" do
9
9
  expect('F1()').to be_parsed_as(:expression).and_fail
10
10
  end
11
11
 
12
- it "should parse a function call with one arg" do
13
- expected = FunctionCall.new 'func1', [Verde.new]
12
+ it "parses a function call with one arg" do
13
+ expected = FunctionCall.new 'func1', [verde]
14
14
  expect('func1(Verde)').to be_parsed_as(:expression).and_return(expected)
15
15
  end
16
16
 
17
- it "should parse a function with many args" do
17
+ it "parses a function with many args" do
18
18
  first_arg = 42.to_gbs_num
19
- second_arg = NroBolitas.new Verde.new
20
- third_arg = Norte.new
19
+ second_arg = NroBolitas.new verde
20
+ third_arg = norte
21
21
  expected = FunctionCall.new 'func1', [first_arg, second_arg, third_arg]
22
22
 
23
23
  expect('func1(42, nroBolitas(Verde), Norte)').
24
24
  to be_parsed_as(:expression).and_return(expected)
25
25
  end
26
26
 
27
- it "should parse a complex function call" do
28
- or_expr = Or.new VarName.new('a'), VarName.new('b')
29
- paren_expr = ParenthesesExpr.new Div.new(10.to_gbs_num, VarName.new('c'))
27
+ it "parses a complex function call" do
28
+ or_expr = Or.new 'a'.to_var_name, 'b'.to_var_name
29
+ div = Div.new 10.to_gbs_num, 'c'.to_var_name
30
+ paren_expr = EnclosedByParensExpression.new div
30
31
  num_expr = Mul.new 5.to_gbs_num, paren_expr
31
- func2_call = FunctionCall.new 'func2', [Verde.new, Opuesto.new(Norte.new)]
32
+ func2_call = FunctionCall.new 'func2', [verde, Opuesto.new(norte)]
32
33
  func1_call = FunctionCall.new 'func1', [or_expr, num_expr, func2_call]
33
34
  expect('func1(a || b, 5*(10 div c), func2(Verde, opuesto(Norte)))').
34
35
  to be_parsed_as(:expression).and_return(func1_call)
35
36
  end
36
37
 
37
- end
38
+ end
@@ -1,33 +1,28 @@
1
1
  describe Gobstones::Parser, "function definitions" do
2
2
 
3
- it "should parse a function without args and a single return" do
4
- args = VarTuple.new []
3
+ it "parses a function without args and a single return" do
5
4
  func_return = ReturnFromFunction.new [42.to_gbs_num]
6
5
 
7
- func_def = Function.new 'just42', args, CmdBlock.new([]), func_return
6
+ func_def = Function.new 'just42', no_arguments, empty_body, func_return
8
7
 
9
8
  expect('function just42() { return (42) }').
10
9
  to be_parsed_as(:definition).and_return(func_def)
11
10
  end
12
11
 
13
- it "should parse a function with some args" do
14
- first_arg = VarName.new 'firstArg'
15
- second_arg = VarName.new 'secondArg'
16
- third_arg = VarName.new 'thirdArg'
17
- args = VarTuple.new [first_arg, second_arg, third_arg]
18
- body =
19
- return_st = ReturnFromFunction.new [Verde.new, PuedeMover.new(Norte.new)]
20
- func_def = Function.new 'myCoolFunction', args, CmdBlock.new([]), return_st
12
+ it "parses a function with some args" do
13
+ args = VarTuple.new ['firstArg'.to_var_name, 'secondArg'.to_var_name, 'thirdArg'.to_var_name]
14
+ return_st = ReturnFromFunction.new [verde, PuedeMover.new(norte)]
15
+ func_def = Function.new 'myCoolFunction', args, empty_body, return_st
21
16
 
22
17
  expect('function myCoolFunction (firstArg, secondArg, thirdArg) {
23
18
  return (Verde, puedeMover(Norte))
24
19
  }').to be_parsed_as(:definition).and_return(func_def)
25
20
  end
26
21
 
27
- it "should parse a function with some statements" do
28
- args = VarTuple.new [VarName.new('arg')]
29
- body = CmdBlock.new [Poner.new(Verde.new)]
30
- return_st = ReturnFromFunction.new [True.new]
22
+ it "parses a function with some statements" do
23
+ args = VarTuple.new ['arg'.to_var_name]
24
+ body = CommandBlock.new [Poner.new(verde)]
25
+ return_st = ReturnFromFunction.new [true_value]
31
26
  func_def = Function.new 'myFunc', args, body, return_st
32
27
 
33
28
  expect('function myFunc(arg)
@@ -37,14 +32,14 @@ describe Gobstones::Parser, "function definitions" do
37
32
  }').to be_parsed_as(:definition).and_return(func_def)
38
33
  end
39
34
 
40
- it "should not parse a function without a valid identifier" do
35
+ it "does not parse a function without a valid identifier" do
41
36
  expect('function MyWrongFunc() { return(True) }').
42
37
  to be_parsed_as(:definition).and_fail
43
38
  end
44
39
 
45
- it "should not parse a function without a return statement" do
40
+ it "does not parse a function without a return statement" do
46
41
  expect('function myFuncWithoutReturn() { }').
47
42
  to be_parsed_as(:definition).and_fail
48
43
  end
49
44
 
50
- end
45
+ end
@@ -1,16 +1,16 @@
1
1
  describe Gobstones::Parser, "program definitions" do
2
2
 
3
- it "should parse a simple program with a single main" do
4
- main_def = Main.new CmdBlock.new([]), NoReturnStatement.new
5
- program = Program.new [], main_def
3
+ it "parses a simple program with a single main" do
4
+ main_def = Main.new empty_body, no_return_statement
5
+ program = Program.new no_definitions, main_def
6
6
 
7
7
  expect('procedure Main(){}').to be_parsed_as(:program).and_return(program)
8
8
  end
9
9
 
10
- it "should parse a program with Main and procedures" do
11
- main_def = Main.new CmdBlock.new([]), NoReturnStatement.new
12
- proc_1 = Procedure.new 'Procedure1', VarTuple.new([]), CmdBlock.new([])
13
- proc_2 = Procedure.new 'Procedure2', VarTuple.new([]), CmdBlock.new([])
10
+ it "parses a program with Main and procedures" do
11
+ main_def = Main.new empty_body, no_return_statement
12
+ proc_1 = Procedure.new 'Procedure1', no_arguments, empty_body
13
+ proc_2 = Procedure.new 'Procedure2', no_arguments, empty_body
14
14
  program = Program.new [proc_1, proc_2], main_def
15
15
 
16
16
  gbs_code = <<GBS
@@ -23,11 +23,11 @@ GBS
23
23
  expect(gbs_code).to be_parsed_as(:program).and_return(program)
24
24
  end
25
25
 
26
- it "should parse a program with Main, procedures and functions" do
27
- main_def = Main.new CmdBlock.new([]), NoReturnStatement.new
28
- proc_1 = Procedure.new 'Procedure1', VarTuple.new([]), CmdBlock.new([])
29
- func_1 = Function.new 'function1', VarTuple.new([]), CmdBlock.new([]), ReturnFromFunction.new([42.to_gbs_num])
30
- proc_2 = Procedure.new 'Procedure2', VarTuple.new([]), CmdBlock.new([])
26
+ it "parses a program with Main, procedures and functions" do
27
+ main_def = Main.new empty_body, NoReturnStatement.new
28
+ proc_1 = Procedure.new 'Procedure1', no_arguments, empty_body
29
+ func_1 = Function.new 'function1', no_arguments, empty_body, ReturnFromFunction.new([42.to_gbs_num])
30
+ proc_2 = Procedure.new 'Procedure2', no_arguments, empty_body
31
31
  program = Program.new [proc_1, func_1, proc_2], main_def
32
32
  gbs_code = <<GBS
33
33
  procedure Procedure1(){ }
@@ -41,15 +41,15 @@ GBS
41
41
  expect(gbs_code).to be_parsed_as(:program).and_return(program)
42
42
  end
43
43
 
44
- it "should not parse a program without a Main definition" do
44
+ it "does not parse a program without a Main definition" do
45
45
  expect('procedure Procedure1(){}
46
46
  procedure Procedure2() {}').to be_parsed_as(:program).and_fail
47
47
  end
48
48
 
49
- it "should not parse a program if Main is not the last definition" do
49
+ it "does not parse a program if Main is not the last definition" do
50
50
  expect('procedure Procedure1() {}
51
51
  procedure Main() {}
52
52
  procedure Procedure2() {}').to be_parsed_as(:program).and_fail
53
53
  end
54
54
 
55
- end
55
+ end
@@ -2,8 +2,8 @@ describe Gobstones::Parser, "if statements" do
2
2
 
3
3
  describe "if" do
4
4
 
5
- it "should parse a statement with a simple boolean and an empty block" do
6
- if_cmd = IfCmd.new True.new, CmdBlock.empty
5
+ it "parses a statement with a simple boolean and an empty block" do
6
+ if_cmd = IfCmd.new true_value, empty_body
7
7
 
8
8
  expect('if (True) {}').to be_parsed_as(:command).and_return(if_cmd)
9
9
  expect('if (True) {
@@ -12,18 +12,19 @@ describe Gobstones::Parser, "if statements" do
12
12
  {}').to be_parsed_as(:command).and_return(if_cmd)
13
13
  end
14
14
 
15
- it "should parse a statement with a simple boolean and a block with commands" do
16
- cmd_block = CmdBlock.new [Poner.new(Verde.new), Skip.new]
17
- if_cmd = IfCmd.new False.new, cmd_block
15
+ it "parses a statement with a simple boolean and a block with commands" do
16
+ cmd_block = CommandBlock.new [Poner.new(verde), Skip.new]
17
+ if_cmd = IfCmd.new false_value, cmd_block
18
18
 
19
19
  expect('if(False){Poner(Verde); Skip}').
20
20
  to be_parsed_as(:command).and_return(if_cmd)
21
21
  end
22
22
 
23
- it "should parse a statement with a complex boolean expression" do
24
- and_expr = And.new VarName.new('a'), False.new
25
- exp = Or.new PuedeMover.new(Norte.new), ParenthesesExpr.new(and_expr)
26
- if_cmd = IfCmd.new exp, CmdBlock.empty
23
+ it "parses a statement with a complex boolean expression" do
24
+ and_expr = And.new 'a'.to_var_name, false_value
25
+ inner_and = EnclosedByParensExpression.new and_expr
26
+ exp = Or.new PuedeMover.new(norte), inner_and
27
+ if_cmd = IfCmd.new exp, empty_body
27
28
 
28
29
  expect('if (puedeMover(Norte) || (a && False)) {}').
29
30
  to be_parsed_as(:command).and_return(if_cmd)
@@ -33,9 +34,9 @@ describe Gobstones::Parser, "if statements" do
33
34
 
34
35
  describe "if-else" do
35
36
 
36
- it "should parse a statement with an else block" do
37
- else_block = CmdBlock.new [Mover.new(Norte.new)]
38
- if_else_cmd = IfElseCmd.new False.new, CmdBlock.empty, else_block
37
+ it "parses a statement with an else block" do
38
+ else_block = CommandBlock.new [Mover.new(norte)]
39
+ if_else_cmd = IfElseCmd.new false_value, empty_body, else_block
39
40
 
40
41
  expect('if (False) { } else { Mover(Norte) }').
41
42
  to be_parsed_as(:command).and_return(if_else_cmd)
@@ -1,23 +1,23 @@
1
1
  describe Gobstones::Parser, "main definition" do
2
2
 
3
- it "should parse a valid Main definition without return nor commands" do
4
- main = Main.new CmdBlock.new([]), NoReturnStatement.new
3
+ let(:return_tuple) { VarTuple.new ['x'.to_var_name, 'y'.to_var_name] }
4
+
5
+ it "parses a valid Main definition without return nor commands" do
6
+ main = Main.new empty_body, no_return_statement
5
7
 
6
8
  expect('procedure Main() {}').to be_parsed_as(:definition).and_fail
7
9
  expect('procedure Main() {}').to be_parsed_as(:main).and_return(main)
8
10
  end
9
11
 
10
- it "should parse a valid main procedure with a return of var names" do
11
- return_tuple = VarTuple.new [VarName.new('x'), VarName.new('y')]
12
- main = Main.new CmdBlock.new([]), ReturnFromMain.new(return_tuple)
12
+ it "parses a valid main procedure with a return of var names" do
13
+ main = Main.new empty_body, ReturnFromMain.new(return_tuple)
13
14
 
14
15
  expect('procedure Main() { return (x, y); }').
15
16
  to be_parsed_as(:main).and_return(main)
16
17
  end
17
18
 
18
- it "should parse a valid main procedure with commands and return" do
19
- return_tuple = VarTuple.new [VarName.new('x'), VarName.new('y')]
20
- cmd_block = CmdBlock.new [Mover.new(Oeste.new), Skip.new]
19
+ it "parses a valid main procedure with commands and return" do
20
+ cmd_block = CommandBlock.new [Mover.new(oeste), Skip.new]
21
21
  main = Main.new cmd_block, ReturnFromMain.new(return_tuple)
22
22
 
23
23
  expect('procedure Main() {
@@ -27,16 +27,16 @@ describe Gobstones::Parser, "main definition" do
27
27
  }').to be_parsed_as(:main).and_return(main)
28
28
  end
29
29
 
30
- it "should not parse a main procedure with an invalid identifier" do
30
+ it "does not parse a main procedure with an invalid identifier" do
31
31
  expect('procedure NotMain() {}').to be_parsed_as(:main).and_fail
32
32
  end
33
33
 
34
- it "should not parse a main procedure with a return of expressions" do
34
+ it "does not parse a main procedure with a return of expressions" do
35
35
  expect('procedure Main() { return (3+4) }').to be_parsed_as(:main).and_fail
36
36
  end
37
37
 
38
- it "should not parse a main procedure with args" do
38
+ it "does not parse a main procedure with args" do
39
39
  expect('procedure Main(arg1, arg2) {}').to be_parsed_as(:main).and_fail
40
40
  end
41
41
 
42
- end
42
+ end
@@ -1,39 +1,35 @@
1
1
  describe Gobstones::Parser, "nested expressions" do
2
2
 
3
- it "should parse literals between ()" do
3
+ it "parses literals between ()" do
4
4
  expect('( 42 )').to be_parsed_as(:expression).
5
- and_return(ParenthesesExpr.new(42.to_gbs_num))
5
+ and_return(EnclosedByParensExpression.new(42.to_gbs_num))
6
6
  expect('(True )').to be_parsed_as(:expression).
7
- and_return(ParenthesesExpr.new(True.new))
7
+ and_return(EnclosedByParensExpression.new(true_value))
8
8
  expect('(Rojo )').to be_parsed_as(:expression).
9
- and_return(ParenthesesExpr.new(Rojo.new))
9
+ and_return(EnclosedByParensExpression.new(rojo))
10
10
  expect('(Verde)').to be_parsed_as(:expression).
11
- and_return(ParenthesesExpr.new(Verde.new))
11
+ and_return(EnclosedByParensExpression.new(verde))
12
12
  end
13
13
 
14
- it "should parse primitive functions between ()" do
15
- puede_mover = ParenthesesExpr.new(PuedeMover.new(Norte.new))
14
+ it "parses primitive functions between ()" do
15
+ puede_mover = EnclosedByParensExpression.new(PuedeMover.new(norte))
16
16
  expect('(puedeMover(Norte))').
17
17
  to be_parsed_as(:expression).and_return(puede_mover)
18
18
  end
19
19
 
20
- it "should parse nested arithmetic expressions between ()" do
21
- paren_expr = ParenthesesExpr.new Add.new(3.to_gbs_num, 5.to_gbs_num)
20
+ it "parses nested arithmetic expressions between ()" do
21
+ paren_expr = EnclosedByParensExpression.new Add.new(3.to_gbs_num, 5.to_gbs_num)
22
22
  expected = Mul.new paren_expr, 6.to_gbs_num
23
23
  expect('(3 + 5) * 6').to be_parsed_as(:expression).and_return(expected)
24
24
  end
25
25
 
26
- it "should parse a nested expressions with many ()" do
27
- b = VarName.new 'b'
28
- c = VarName.new 'c'
29
- or_expr = Or.new b, c
30
- a = VarName.new 'a'
31
- inner_paren = ParenthesesExpr.new or_expr
32
- and_expr = And.new a, inner_paren
33
- outer_paren = ParenthesesExpr.new and_expr
34
- d = VarName.new 'd'
35
- result = And.new outer_paren, d
26
+ it "parses a nested expressions with many ()" do
27
+ or_expr = Or.new 'b'.to_var_name, 'c'.to_var_name
28
+ inner_paren = EnclosedByParensExpression.new or_expr
29
+ and_expr = And.new 'a'.to_var_name, inner_paren
30
+ outer_paren = EnclosedByParensExpression.new and_expr
31
+ result = And.new outer_paren, 'd'.to_var_name
36
32
  expect('(a && (b || c)) && d').to be_parsed_as(:expression).and_return(result)
37
33
  end
38
34
 
39
- end
35
+ end
@@ -2,20 +2,20 @@ describe Gobstones::Parser, "primitive expressions" do
2
2
 
3
3
  describe "variable identifiers" do
4
4
 
5
- it "should parse valid var names" do
6
- expect('v').to be_parsed_as(:expression).and_return(VarName.new('v'))
7
- expect('var1').to be_parsed_as(:expression).and_return(VarName.new('var1'))
8
- expect('a_var').to be_parsed_as(:expression).and_return(VarName.new('a_var'))
9
- expect('vAR').to be_parsed_as(:expression).and_return(VarName.new('vAR'))
5
+ it "parses valid var names" do
6
+ expect('v').to be_parsed_as(:expression).and_return('v'.to_var_name)
7
+ expect('var1').to be_parsed_as(:expression).and_return('var1'.to_var_name)
8
+ expect('a_var').to be_parsed_as(:expression).and_return('a_var'.to_var_name)
9
+ expect('vAR').to be_parsed_as(:expression).and_return('vAR'.to_var_name)
10
10
  end
11
11
 
12
- it "should not parse invalid var names" do
13
- expect('1').not_to be_parsed_as(:expression).and_return(VarName.new('1'))
12
+ it "does not parse invalid var names" do
13
+ expect('1').not_to be_parsed_as(:expression).and_return('1'.to_var_name)
14
14
  expect('_var').to be_parsed_as(:expression).and_fail
15
15
  expect('Var').to be_parsed_as(:expression).and_fail
16
16
  end
17
17
 
18
- it "should not parse reserved words as var names" do
18
+ it "does not parse reserved words as var names" do
19
19
  literals = %w{True False Rojo Negro Azul Verde Norte Oeste Este Sur}
20
20
  (RESERVED_IDS - literals).each do |id|
21
21
  expect(id).to be_parsed_as(:expression).and_fail
@@ -26,27 +26,27 @@ describe Gobstones::Parser, "primitive expressions" do
26
26
 
27
27
  describe "type bounds functions" do
28
28
 
29
- it "should parse the minBool() function" do
29
+ it "parses the minBool() function" do
30
30
  expect('minBool()').to be_parsed_as(:expression).and_return(MinBool.new)
31
31
  end
32
32
 
33
- it "should parse the maxBool() function" do
33
+ it "parses the maxBool() function" do
34
34
  expect('maxBool()').to be_parsed_as(:expression).and_return(MaxBool.new)
35
35
  end
36
36
 
37
- it "should parse the minColor() function" do
37
+ it "parses the minColor() function" do
38
38
  expect('minColor()').to be_parsed_as(:expression).and_return(MinColor.new)
39
39
  end
40
40
 
41
- it "should parse the maxColor() function" do
41
+ it "parses the maxColor() function" do
42
42
  expect('maxColor()').to be_parsed_as(:expression).and_return(MaxColor.new)
43
43
  end
44
44
 
45
- it "should parse the minDir() function" do
45
+ it "parses the minDir() function" do
46
46
  expect('minDir()').to be_parsed_as(:expression).and_return(MinDir.new)
47
47
  end
48
48
 
49
- it "should parse the maxDir() function" do
49
+ it "parses the maxDir() function" do
50
50
  expect('maxDir()').to be_parsed_as(:expression).and_return(MaxDir.new)
51
51
  end
52
52
 
@@ -54,23 +54,20 @@ describe Gobstones::Parser, "primitive expressions" do
54
54
 
55
55
  describe "other type functions" do
56
56
 
57
- it "should parse the siguiente() function " do
58
- arg = VarName.new 'x'
59
- func = Siguiente.new arg
57
+ it "parses the siguiente() function " do
58
+ func = Siguiente.new 'x'.to_var_name
60
59
  expect('siguiente(x)').to be_parsed_as(:expression).and_return(func)
61
60
  expect('siguiente(x )').to be_parsed_as(:expression).and_return(func)
62
61
  end
63
62
 
64
- it "should parse the previo() function" do
65
- arg = VarName.new 'y'
66
- func = Previo.new arg
63
+ it "parses the previo() function" do
64
+ func = Previo.new 'y'.to_var_name
67
65
  expect('previo(y)').to be_parsed_as(:expression).and_return(func)
68
66
  expect('previo( y )').to be_parsed_as(:expression).and_return(func)
69
67
  end
70
68
 
71
- it "should parse the opuesto() function" do
72
- arg = VarName.new 'z'
73
- func = Opuesto.new arg
69
+ it "parses the opuesto() function" do
70
+ func = Opuesto.new 'z'.to_var_name
74
71
  expect('opuesto(z)').to be_parsed_as(:expression).and_return(func)
75
72
  expect('opuesto( z )').to be_parsed_as(:expression).and_return(func)
76
73
  end
@@ -79,27 +76,24 @@ describe Gobstones::Parser, "primitive expressions" do
79
76
 
80
77
  describe "board primitive functions" do
81
78
 
82
- it "should parse the nroBolitas(exp) function" do
83
- arg = VarName.new 'color'
84
- func = NroBolitas.new arg
79
+ it "parses the nroBolitas(exp) function" do
80
+ func = NroBolitas.new 'color'.to_var_name
85
81
  expect('nroBolitas(color)').to be_parsed_as(:expression).and_return(func)
86
82
  expect('nroBolitas( color )').to be_parsed_as(:expression).and_return(func)
87
83
  end
88
84
 
89
- it "should parse the hayBolitas(exp) function" do
90
- arg = VarName.new 'color'
91
- func = HayBolitas.new arg
85
+ it "parses the hayBolitas(exp) function" do
86
+ func = HayBolitas.new 'color'.to_var_name
92
87
  expect('hayBolitas(color)').to be_parsed_as(:expression).and_return(func)
93
88
  expect('hayBolitas( color )').to be_parsed_as(:expression).and_return(func)
94
89
  end
95
90
 
96
- it "should parse the puedeMover(exp) function" do
97
- arg = VarName.new 'dir'
98
- func = PuedeMover.new arg
91
+ it "parses the puedeMover(exp) function" do
92
+ func = PuedeMover.new 'dir'.to_var_name
99
93
  expect('puedeMover(dir)').to be_parsed_as(:expression).and_return(func)
100
94
  expect('puedeMover( dir )').to be_parsed_as(:expression).and_return(func)
101
95
  end
102
96
 
103
97
  end
104
98
 
105
- end
99
+ end