Sha256: 455bbd0a1275a21f593dffff7eb6c9a09a20c4d03c85c57a5264347b9708c3cb

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

describe Gobstones::Parser, "nested expressions" do

  it "should parse literals between ()" do
    expect('(  42 )').to be_parsed_as(:expression).
      and_return(ParenthesesExpr.new(42.to_gbs_num))
    expect('(True )').to be_parsed_as(:expression).
      and_return(ParenthesesExpr.new(True.new))
    expect('(Rojo )').to be_parsed_as(:expression).
      and_return(ParenthesesExpr.new(Rojo.new))
    expect('(Verde)').to be_parsed_as(:expression).
      and_return(ParenthesesExpr.new(Verde.new))
  end

  it "should parse primitive functions between ()" do
    puede_mover = ParenthesesExpr.new(PuedeMover.new(Norte.new))
    expect('(puedeMover(Norte))').
      to be_parsed_as(:expression).and_return(puede_mover)
  end

  it "should parse nested arithmetic expressions between ()" do
    paren_expr = ParenthesesExpr.new Add.new(3.to_gbs_num, 5.to_gbs_num)
    expected = Mul.new paren_expr, 6.to_gbs_num
    expect('(3 + 5) * 6').to be_parsed_as(:expression).and_return(expected)
  end

  it "should parse a nested expressions with many ()" do
    b = VarName.new 'b'
    c = VarName.new 'c'
    or_expr = Or.new b, c
    a = VarName.new 'a'
    inner_paren = ParenthesesExpr.new or_expr
    and_expr = And.new a, inner_paren
    outer_paren = ParenthesesExpr.new and_expr
    d = VarName.new 'd'
    result = And.new outer_paren, d
    expect('(a && (b || c)) && d').to be_parsed_as(:expression).and_return(result)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gobstones-0.0.1.1 spec/parser/nested_expressions_spec.rb