You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.5 KiB
JavaScript

import { CubicRealPolynomial } from "../../Source/Cesium.js";
import { Math as CesiumMath } from "../../Source/Cesium.js";
describe("Core/CubicRealPolynomial", function () {
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);
});
});