Files
openlayers/test/spec/ol/math.test.js
Andreas Hocevar 6f5ed17fc5 Remove goog.asserts.*
This pull requests replaces type check hint assertions with type casts,
library sanity check assertions with conditional console.assert statements
in debug mode, and runtime sanity checks with assertions that throw an
ol.AssertionError with an error code for lookup outside the library.
2016-08-04 11:29:54 +02:00

203 lines
5.8 KiB
JavaScript

goog.provide('ol.test.math');
describe('ol.math.clamp', function() {
it('returns the correct value at -Infinity', function() {
expect(ol.math.clamp(-Infinity, 10, 20)).to.eql(10);
});
it('returns the correct value at min', function() {
expect(ol.math.clamp(10, 10, 20)).to.eql(10);
});
it('returns the correct value at mid point', function() {
expect(ol.math.clamp(15, 10, 20)).to.eql(15);
});
it('returns the correct value at max', function() {
expect(ol.math.clamp(20, 10, 20)).to.eql(20);
});
it('returns the correct value at Infinity', function() {
expect(ol.math.clamp(Infinity, 10, 20)).to.eql(20);
});
});
describe('ol.math.cosh', function() {
it('returns the correct value at -Infinity', function() {
expect(ol.math.cosh(-Infinity)).to.eql(Infinity);
});
it('returns the correct value at -1', function() {
expect(ol.math.cosh(-1)).to.roughlyEqual(1.5430806348152437, 1e-9);
});
it('returns the correct value at 0', function() {
expect(ol.math.cosh(0)).to.eql(1);
});
it('returns the correct value at 1', function() {
expect(ol.math.cosh(1)).to.roughlyEqual(1.5430806348152437, 1e-9);
});
it('returns the correct value at Infinity', function() {
expect(ol.math.cosh(Infinity)).to.eql(Infinity);
});
});
describe('ol.math.roundUpToPowerOfTwo', function() {
it('raises an exception when x is negative', function() {
expect(function() {
ol.math.roundUpToPowerOfTwo(-1);
}).to.throwException();
});
it('raises an exception when x is zero', function() {
expect(function() {
ol.math.roundUpToPowerOfTwo(0);
}).to.throwException();
});
it('returns the expected value for simple powers of two', function() {
expect(ol.math.roundUpToPowerOfTwo(1)).to.be(1);
expect(ol.math.roundUpToPowerOfTwo(2)).to.be(2);
expect(ol.math.roundUpToPowerOfTwo(4)).to.be(4);
expect(ol.math.roundUpToPowerOfTwo(8)).to.be(8);
expect(ol.math.roundUpToPowerOfTwo(16)).to.be(16);
expect(ol.math.roundUpToPowerOfTwo(32)).to.be(32);
expect(ol.math.roundUpToPowerOfTwo(64)).to.be(64);
expect(ol.math.roundUpToPowerOfTwo(128)).to.be(128);
expect(ol.math.roundUpToPowerOfTwo(256)).to.be(256);
});
it('returns the expected value for simple powers of ten', function() {
expect(ol.math.roundUpToPowerOfTwo(1)).to.be(1);
expect(ol.math.roundUpToPowerOfTwo(10)).to.be(16);
expect(ol.math.roundUpToPowerOfTwo(100)).to.be(128);
expect(ol.math.roundUpToPowerOfTwo(1000)).to.be(1024);
expect(ol.math.roundUpToPowerOfTwo(10000)).to.be(16384);
expect(ol.math.roundUpToPowerOfTwo(100000)).to.be(131072);
expect(ol.math.roundUpToPowerOfTwo(1000000)).to.be(1048576);
expect(ol.math.roundUpToPowerOfTwo(10000000)).to.be(16777216);
});
});
describe('ol.math.solveLinearSystem', function() {
it('calculates correctly', function() {
var result = ol.math.solveLinearSystem([
[2, 1, 3, 1],
[2, 6, 8, 3],
[6, 8, 18, 5]
]);
expect(result[0]).to.roughlyEqual(0.3, 1e-9);
expect(result[1]).to.roughlyEqual(0.4, 1e-9);
expect(result[2]).to.roughlyEqual(0, 1e-9);
});
it('can handle singular matrix', function() {
var result = ol.math.solveLinearSystem([
[2, 1, 3, 1],
[2, 6, 8, 3],
[2, 1, 3, 1]
]);
expect(result).to.be(null);
});
it('raises an exception when the matrix is malformed', function() {
var origAssert = console.assert;
console.assert = function(assertion, message) {
if (!assertion) {
throw new Error(message);
}
};
expect(function() {
ol.math.solveLinearSystem([
[2, 1, 3, 1],
[2, 6, 8, 3],
[6, 8, 18]
]);
}).to.throwException();
expect(function() {
ol.math.solveLinearSystem([
[2, 1, 3, 1],
[2, 6, 8, 3],
[6, 8, 18, 5, 0]
]);
}).to.throwException();
console.assert = origAssert;
});
});
describe('ol.math.toDegrees', function() {
it('returns the correct value at -π', function() {
expect(ol.math.toDegrees(-Math.PI)).to.be(-180);
});
it('returns the correct value at 0', function() {
expect(ol.math.toDegrees(0)).to.be(0);
});
it('returns the correct value at π', function() {
expect(ol.math.toDegrees(Math.PI)).to.be(180);
});
});
describe('ol.math.toRadians', function() {
it('returns the correct value at -180', function() {
expect(ol.math.toRadians(-180)).to.be(-Math.PI);
});
it('returns the correct value at 0', function() {
expect(ol.math.toRadians(0)).to.be(0);
});
it('returns the correct value at 180', function() {
expect(ol.math.toRadians(180)).to.be(Math.PI);
});
});
describe('ol.math.modulo', function() {
it('256 / 8 returns 0', function() {
expect(ol.math.modulo(256, 8)).to.be(0);
});
it('positive and positive returns a positive ', function() {
expect(ol.math.modulo(7, 8)).to.be(7);
});
it('same Dividend and Divisor returns 0', function() {
expect(ol.math.modulo(4, 4)).to.be(0);
});
it('negative and positive returns positive', function() {
expect(ol.math.modulo(-3, 4)).to.be(1);
});
it('negative and negative returns negative', function() {
expect(ol.math.modulo(-4, -5)).to.be(-4);
expect(ol.math.modulo(-3, -4)).to.be(-3);
});
it('positive and negative returns negative', function() {
expect(ol.math.modulo(3, -4)).to.be(-1);
expect(ol.math.modulo(1, -5)).to.be(-4);
expect(ol.math.modulo(6, -5)).to.be(-4);
});
describe('ol.math.lerp', function() {
it('correctly interpolated numbers', function() {
expect(ol.math.lerp(0, 0, 0)).to.be(0);
expect(ol.math.lerp(0, 1, 0)).to.be(0);
expect(ol.math.lerp(1, 11, 5)).to.be(51);
});
it('correctly interpolates floats', function() {
expect(ol.math.lerp(0, 1, 0.5)).to.be(0.5);
expect(ol.math.lerp(0.25, 0.75, 0.5)).to.be(0.5);
});
});
});
goog.require('ol.math');