Sha256: 19ebc3542f50a8bac235c67ceaaea715a97677f7bcc9c2b76da825846f0590c0

Contents?: true

Size: 1.56 KB

Versions: 4

Compression:

Stored size: 1.56 KB

Contents

require 'spec_helper'
require 'dentaku/ast/arithmetic'

require 'dentaku/token'

describe Dentaku::AST::Arithmetic do
  let(:one) { Dentaku::AST::Numeric.new Dentaku::Token.new(:numeric, 1) }
  let(:two) { Dentaku::AST::Numeric.new Dentaku::Token.new(:numeric, 2) }
  let(:x)   { Dentaku::AST::Identifier.new Dentaku::Token.new(:identifier, 'x') }
  let(:y)   { Dentaku::AST::Identifier.new Dentaku::Token.new(:identifier, 'y') }
  let(:ctx) { {'x' => 1, 'y' => 2} }

  it 'performs an arithmetic operation with numeric operands' do
    expect(add(one, two)).to eq 3
    expect(sub(one, two)).to eq -1
    expect(mul(one, two)).to eq  2
    expect(div(one, two)).to eq  0.5
  end

  it 'performs an arithmetic operation with one numeric operand and one string operand' do
    expect(add(one, x)).to eq 2
    expect(sub(one, x)).to eq 0
    expect(mul(one, x)).to eq 1
    expect(div(one, x)).to eq 1

    expect(add(y, two)).to eq 4
    expect(sub(y, two)).to eq 0
    expect(mul(y, two)).to eq 4
    expect(div(y, two)).to eq 1
  end

  it 'performs an arithmetic operation with string operands' do
    expect(add(x, y)).to eq  3
    expect(sub(x, y)).to eq -1
    expect(mul(x, y)).to eq  2
    expect(div(x, y)).to eq  0.5
  end

  private

  def add(left, right)
    Dentaku::AST::Addition.new(left, right).value(ctx)
  end

  def sub(left, right)
    Dentaku::AST::Subtraction.new(left, right).value(ctx)
  end

  def mul(left, right)
    Dentaku::AST::Multiplication.new(left, right).value(ctx)
  end

  def div(left, right)
    Dentaku::AST::Division.new(left, right).value(ctx)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dentaku-3.3.0 spec/ast/arithmetic_spec.rb
dentaku-3.2.1 spec/ast/arithmetic_spec.rb
dentaku-3.2.0 spec/ast/arithmetic_spec.rb
dentaku-3.1.0 spec/ast/arithmetic_spec.rb