Sha256: 69d6f4535fa4c0a654d8f67d68eb39d99b2b00b3d49bf5de92aa05f2d1b8bea7
Contents?: true
Size: 1.57 KB
Versions: 1
Compression:
Stored size: 1.57 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dentaku-3.3.1 | spec/ast/arithmetic_spec.rb |