136 lines
4.8 KiB
JavaScript
136 lines
4.8 KiB
JavaScript
defineSuite([
|
|
'Core/CubicRealPolynomial',
|
|
'Core/Math'
|
|
], function(
|
|
CubicRealPolynomial,
|
|
CesiumMath) {
|
|
'use strict';
|
|
|
|
it('discriminant throws without a', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeDiscriminant();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('discriminant throws without b', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeDiscriminant(1.0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('discriminant throws without c', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeDiscriminant(1.0, 1.0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('discriminant throws without d', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeDiscriminant(1.0, 1.0, 1.0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('discriminant', function() {
|
|
var a = 3.0;
|
|
var b = 2.0;
|
|
var c = 1.0;
|
|
var d = 1.0;
|
|
var expected = b*b*c*c - 4*a*c*c*c - 4*b*b*b*d - 27*a*a*d*d + 18*a*b*c*d;
|
|
var actual = CubicRealPolynomial.computeDiscriminant(a, b, c, d);
|
|
expect(actual).toEqualEpsilon(expected, CesiumMath.EPSILON14);
|
|
});
|
|
|
|
it('real roots throws without a', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeRealRoots();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('real roots throws without b', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeRealRoots(1.0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('real roots throws without c', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeRealRoots(1.0, 1.0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('real roots throws without d', function() {
|
|
expect(function() {
|
|
CubicRealPolynomial.computeRealRoots(1.0, 1.0, 1.0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it('three repeated roots', function() {
|
|
var roots = CubicRealPolynomial.computeRealRoots(2.0, -12.0, 24.0, -16.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqualEpsilon(2.0, CesiumMath.EPSILON15);
|
|
expect(roots[1]).toEqualEpsilon(2.0, CesiumMath.EPSILON15);
|
|
expect(roots[2]).toEqualEpsilon(2.0, CesiumMath.EPSILON15);
|
|
});
|
|
|
|
it('one unique and two repeated roots', function() {
|
|
var roots = CubicRealPolynomial.computeRealRoots(2.0, 2.0, -2.0, -2.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqualEpsilon(-1.0, CesiumMath.EPSILON15);
|
|
expect(roots[1]).toEqualEpsilon(-1.0, CesiumMath.EPSILON15);
|
|
expect(roots[2]).toEqualEpsilon(1.0, CesiumMath.EPSILON15);
|
|
});
|
|
|
|
it('three unique roots', function() {
|
|
var roots = CubicRealPolynomial.computeRealRoots(2.0, 6.0, -26.0, -30.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqualEpsilon(-5.0, CesiumMath.EPSILON15);
|
|
expect(roots[1]).toEqualEpsilon(-1.0, CesiumMath.EPSILON15);
|
|
expect(roots[2]).toEqualEpsilon(3.0, CesiumMath.EPSILON15);
|
|
});
|
|
|
|
it('complex roots', function() {
|
|
var roots = CubicRealPolynomial.computeRealRoots(2.0, -6.0, 10.0, -6.0);
|
|
expect(roots.length).toEqual(1);
|
|
expect(roots[0]).toEqualEpsilon(1.0, CesiumMath.EPSILON15);
|
|
});
|
|
|
|
it('quadratic case', function() {
|
|
var roots = CubicRealPolynomial.computeRealRoots(0.0, 2.0, -4.0, -6.0);
|
|
expect(roots.length).toEqual(2);
|
|
expect(roots[0]).toEqual(-1.0);
|
|
expect(roots[1]).toEqual(3.0);
|
|
});
|
|
|
|
it('deflated case', function() {
|
|
var roots = CubicRealPolynomial.computeRealRoots(1.0, 0.0, 1.0, 2.0);
|
|
expect(roots.length).toEqual(1);
|
|
expect(roots[0]).toEqualEpsilon(-1.0, CesiumMath.EPSILON14);
|
|
|
|
roots = CubicRealPolynomial.computeRealRoots(1.0, 0.0, 0.0, -8.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqualEpsilon(2.0, CesiumMath.EPSILON14);
|
|
|
|
roots = CubicRealPolynomial.computeRealRoots(1.0, 0.0, -1.0, 0.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqual(-1.0);
|
|
expect(roots[1]).toEqual(0.0);
|
|
expect(roots[2]).toEqual(1.0);
|
|
|
|
roots = CubicRealPolynomial.computeRealRoots(1.0, 1.0, 0.0, 0.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqual(-1.0);
|
|
expect(roots[1]).toEqual(0.0);
|
|
expect(roots[2]).toEqual(0.0);
|
|
|
|
roots = CubicRealPolynomial.computeRealRoots(1.0, -1.0, 0.0, 0.0);
|
|
expect(roots.length).toEqual(3);
|
|
expect(roots[0]).toEqual(0.0);
|
|
expect(roots[1]).toEqual(0.0);
|
|
expect(roots[2]).toEqual(1.0);
|
|
|
|
roots = CubicRealPolynomial.computeRealRoots(1.0, 1.0, 1.0, 0.0);
|
|
expect(roots.length).toEqual(1);
|
|
expect(roots[0]).toEqual(0.0);
|
|
});
|
|
});
|