Testing operator precedence

This commit is contained in:
Tim Schaub
2013-06-24 16:22:19 -06:00
parent c81057780a
commit 70fef73869

View File

@@ -237,6 +237,21 @@ describe('ol.expr.parse()', function() {
expect(expr.evaluate({bar: 4}, lib)).to.be(8);
});
it('evaluates left to right for equal precedence', function() {
var expr = ol.expr.parse('2 / 4 * 20 % 15');
expect(expr.evaluate()).to.be(10);
});
it('respects group precedence', function() {
expect(ol.expr.parse('2 / 4 * (20 % 15)').evaluate()).to.be(2.5);
expect(ol.expr.parse('2 / (4 * (20 % 15))').evaluate()).to.be(0.1);
expect(ol.expr.parse('2 / ((4 * 20) % 15)').evaluate()).to.be(0.4);
expect(ol.expr.parse('2 / (4 * 20) % 15').evaluate()).to.be(0.025);
expect(ol.expr.parse('(2 / (4 * 20)) % 15').evaluate()).to.be(0.025);
expect(ol.expr.parse('(2 / 4) * 20 % 15').evaluate()).to.be(10);
expect(ol.expr.parse('((2 / 4) * 20) % 15').evaluate()).to.be(10);
});
it('parses * in left side of comparison expression', function() {
var expr = ol.expr.parse('foo * 2 >bar');
expect(expr).to.be.a(ol.expr.Comparison);
@@ -280,6 +295,17 @@ describe('ol.expr.parse()', function() {
expect(expr.evaluate({foo: 15})).to.be(5);
});
it('respects precedence', function() {
expect(ol.expr.parse('2 + 4 * 20 - 15').evaluate()).to.be(67);
expect(ol.expr.parse('(2 + 4) * 20 - 15').evaluate()).to.be(105);
expect(ol.expr.parse('((2 + 4) * 20) - 15').evaluate()).to.be(105);
expect(ol.expr.parse('(2 + (4 * 20)) - 15').evaluate()).to.be(67);
expect(ol.expr.parse('2 + (4 * 20) - 15').evaluate()).to.be(67);
expect(ol.expr.parse('2 + ((4 * 20) - 15)').evaluate()).to.be(67);
expect(ol.expr.parse('2 + (4 * (20 - 15))').evaluate()).to.be(22);
expect(ol.expr.parse('2 + 4 * (20 - 15)').evaluate()).to.be(22);
});
it('parses + in call argument', function() {
var lib = {
foo: function(arg) {