Skip to content

Commit

Permalink
Temp - stopped at binary division
Browse files Browse the repository at this point in the history
  • Loading branch information
lilleyse committed Jan 16, 2017
1 parent c81c4cf commit 07138a0
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Source/Scene/Expression.js
Original file line number Diff line number Diff line change
Expand Up @@ -1002,7 +1002,7 @@ define([
var left = this._left.evaluate(frameState, feature);
//>>includeStart('debug', pragmas.debug);
if (typeof(left) !== 'boolean') {
throw new DeveloperError('Operator "!" requires a Boolean argument. Argument is type "' + typeof(left) + '".');
throw new DeveloperError('Operator "!" requires a boolean argument. Argument is type "' + typeof(left) + '".');
}
//>>includeEnd('debug');
return !left;
Expand Down
159 changes: 151 additions & 8 deletions Specs/Scene/ExpressionSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,13 @@ defineSuite([
}).toThrowDeveloperError();
});

it('throws if vec2 has invalid argument', function() {
var expression = new Expression('vec2("1")');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates vec3', function() {
var expression = new Expression('vec3(2.0)');
expect(expression.evaluate(frameState, undefined)).toEqual(new Cartesian3(2.0, 2.0, 2.0));
Expand Down Expand Up @@ -642,6 +649,13 @@ defineSuite([
}).toThrowDeveloperError();
});

it('throws if vec3 has invalid argument', function() {
var expression = new Expression('vec3(1.0, "1.0", 2.0)');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates vec4', function() {
var expression = new Expression('vec4(2.0)');
expect(expression.evaluate(frameState, undefined)).toEqual(new Cartesian4(2.0, 2.0, 2.0, 2.0));
Expand Down Expand Up @@ -695,6 +709,13 @@ defineSuite([
}).toThrowDeveloperError();
});

it('throws if vec4 has invalid argument', function() {
var expression = new Expression('vec3(1.0, vec3(vec2("1.0", 0.0), 1.0))');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates vector with expressions as arguments', function() {
var feature = new MockFeature();
feature.addProperty('height', 2);
Expand Down Expand Up @@ -725,6 +746,20 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(4.0);
});

it('evaluates vector properties (r, g, b, a)', function() {
var expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0).r');
expect(expression.evaluate(frameState, undefined)).toEqual(1.0);

expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0).g');
expect(expression.evaluate(frameState, undefined)).toEqual(2.0);

expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0).b');
expect(expression.evaluate(frameState, undefined)).toEqual(3.0);

expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0).a');
expect(expression.evaluate(frameState, undefined)).toEqual(4.0);
});

it('evaluates vector properties ([0], [1], [2], [3])', function() {
var expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0)[0]');
expect(expression.evaluate(frameState, undefined)).toEqual(1.0);
Expand Down Expand Up @@ -753,6 +788,20 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(4.0);
});

it('evaluates vector properties (["r"], ["g"], ["b"]. ["a"])', function() {
var expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0)["r"]');
expect(expression.evaluate(frameState, undefined)).toEqual(1.0);

expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0)["g"]');
expect(expression.evaluate(frameState, undefined)).toEqual(2.0);

expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0)["b"]');
expect(expression.evaluate(frameState, undefined)).toEqual(3.0);

expression = new Expression('vec4(1.0, 2.0, 3.0, 4.0)["a"]');
expect(expression.evaluate(frameState, undefined)).toEqual(4.0);
});

it('evaluates unary not', function() {
var expression = new Expression('!true');
expect(expression.evaluate(frameState, undefined)).toEqual(false);
Expand All @@ -761,6 +810,13 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(true);
});

it('throws if unary not takes invalid argument', function() {
var expression = new Expression('!"true"');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates unary negative', function() {
var expression = new Expression('-5');
expect(expression.evaluate(frameState, undefined)).toEqual(-5);
Expand All @@ -769,18 +825,23 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(5);
});

it('throws if unary negative takes invalid argument', function() {
var expression = new Expression('-"56"');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates unary positive', function() {
var expression = new Expression('+5');
expect(expression.evaluate(frameState, undefined)).toEqual(5);
});

expression = new Expression('+"5"');
expect(expression.evaluate(frameState, undefined)).toEqual(5);

expression = new Expression('+true');
expect(expression.evaluate(frameState, undefined)).toEqual(1);

expression = new Expression('+null');
expect(expression.evaluate(frameState, undefined)).toEqual(0);
it('throws if unary positive takes invalid argument', function() {
var expression = new Expression('+"56"');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates binary addition', function() {
Expand All @@ -791,6 +852,51 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(10);
});

it('evaluates binary addition with strings', function() {
var expression = new Expression('1 + "10"');
expect(expression.evaluate(frameState, undefined)).toEqual('110');

expression = new Expression('"10" + 1');
expect(expression.evaluate(frameState, undefined)).toEqual('101');

expression = new Expression('"name_" + "building"');
expect(expression.evaluate(frameState, undefined)).toEqual('name_building');

expression = new Expression('"name_" + true');
expect(expression.evaluate(frameState, undefined)).toEqual('name_true');

expression = new Expression('"name_" + null');
expect(expression.evaluate(frameState, undefined)).toEqual('name_null');

expression = new Expression('"name_" + undefined');
expect(expression.evaluate(frameState, undefined)).toEqual('name_undefined');

expression = new Expression('"name_" + vec2(1.0)');
expect(expression.evaluate(frameState, undefined)).toEqual('name_(1.0, 1.0)');

expression = new Expression('"name_" + vec3(1.0)');
expect(expression.evaluate(frameState, undefined)).toEqual('name_(1.0, 1.0, 1.0)');

expression = new Expression('"name_" + vec4(1.0)');
expect(expression.evaluate(frameState, undefined)).toEqual('name_(1.0, 1.0, 1.0, 1.0)');

// TODO : check this one
expression = new Expression('"name_" + regExp("a")');
expect(expression.evaluate(frameState, undefined)).toEqual('name_(1.0, 1.0, 1.0, 1.0)');
});

it('throws if binary addition takes invalid arguments', function() {
var expression = new Expression('vec2(1.0) + vec3(1.0)');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();

expression = new Expression('1.0 + vec3(1.0)');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates binary subtraction', function() {
var expression = new Expression('2 - 1');
expect(expression.evaluate(frameState, undefined)).toEqual(1);
Expand All @@ -799,6 +905,23 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(-2);
});

it('throws if binary subtraction takes invalid arguments', function() {
var expression = new Expression('vec2(1.0) - vec3(1.0)');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();

expression = new Expression('1.0 - vec3(1.0)');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();

expression = new Expression('"name1" - "name2"');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates binary multiplication', function() {
var expression = new Expression('1 * 2');
expect(expression.evaluate(frameState, undefined)).toEqual(2);
Expand All @@ -807,6 +930,18 @@ defineSuite([
expect(expression.evaluate(frameState, undefined)).toEqual(24);
});

it('throws if binary multiplication takes invalid arguments', function() {
var expression = new Expression('vec2(1.0) * vec3(1.0)');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();

expression = new Expression('vec2(1.0) * "name"');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates binary division', function() {
var expression = new Expression('2 / 1');
expect(expression.evaluate(frameState, undefined)).toEqual(2);
Expand Down Expand Up @@ -1307,6 +1442,14 @@ defineSuite([
}).toThrowDeveloperError();
});

it('throws if built-in unary function is given an invalid argument', function() {
// Argument must be a number or vector
var expression = new Expression('abs("-1")');
expect(function() {
expression.evaluate(frameState, undefined);
}).toThrowDeveloperError();
});

it('evaluates abs function', function() {
var expression = new Expression('abs(-1)');
expect(expression.evaluate(frameState, undefined)).toEqual(1);
Expand Down

0 comments on commit 07138a0

Please sign in to comment.