spec/evaluator_spec.rb in dentaku-1.2.0 vs spec/evaluator_spec.rb in dentaku-1.2.1
- old
+ new
@@ -68,16 +68,25 @@
it 'returns floating point from division when there is a remainder' do
expect(evaluator.evaluate(token_stream(5, :divide, 4))).to eq(1.25)
end
end
+ describe 'find_rule_match' do
+ it 'matches a function call' do
+ if_pattern, _ = *Dentaku::Rules.core_rules.first
+ position, tokens = evaluator.find_rule_match(if_pattern, token_stream(:if, :fopen, true, :comma, 1, :comma, 2, :close))
+ expect(position).to eq 0
+ expect(tokens.length).to eq 8
+ end
+ end
+
describe 'functions' do
it 'is evaluated' do
- expect(evaluator.evaluate(token_stream(:round, :open, 5, :divide, 3.0, :close))).to eq 2
- expect(evaluator.evaluate(token_stream(:round, :open, 5, :divide, 3.0, :comma, 2, :close))).to eq 1.67
- expect(evaluator.evaluate(token_stream(:roundup, :open, 5, :divide, 1.2, :close))).to eq 5
- expect(evaluator.evaluate(token_stream(:rounddown, :open, 5, :divide, 1.2, :close))).to eq 4
+ expect(evaluator.evaluate(token_stream(:round, :fopen, 5, :divide, 3.0, :close))).to eq 2
+ expect(evaluator.evaluate(token_stream(:round, :fopen, 5, :divide, 3.0, :comma, 2, :close))).to eq 1.67
+ expect(evaluator.evaluate(token_stream(:roundup, :fopen, 5, :divide, 1.2, :close))).to eq 5
+ expect(evaluator.evaluate(token_stream(:rounddown, :fopen, 5, :divide, 1.2, :close))).to eq 4
end
end
describe 'logic' do
it 'evaluates conditional' do
@@ -94,16 +103,16 @@
expect { evaluator.evaluate(token_stream(3, :gt, 2, :lt, 1)) }.to raise_error
end
it 'evaluates combined conditionals' do
- expect(evaluator.evaluate(token_stream(5, :gt, 1, :or, :false))).to be_truthy
- expect(evaluator.evaluate(token_stream(5, :gt, 1, :and, :false))).to be_falsey
+ expect(evaluator.evaluate(token_stream(5, :gt, 1, :or, false))).to be_truthy
+ expect(evaluator.evaluate(token_stream(5, :gt, 1, :and, false))).to be_falsey
end
it 'negates a logical value' do
- expect(evaluator.evaluate(token_stream(:not, :open, 5, :gt, 1, :or, :false, :close))).to be_falsey
- expect(evaluator.evaluate(token_stream(:not, :open, 5, :gt, 1, :and, :false, :close))).to be_truthy
+ expect(evaluator.evaluate(token_stream(:not, :fopen, 5, :gt, 1, :or, false, :close))).to be_falsey
+ expect(evaluator.evaluate(token_stream(:not, :fopen, 5, :gt, 1, :and, false, :close))).to be_truthy
end
end
end
end