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.
229 lines
6.6 KiB
JavaScript
229 lines
6.6 KiB
JavaScript
import { arrayRemoveDuplicates } from "../../Source/Cesium.js";
|
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import { Spherical } from "../../Source/Cesium.js";
|
|
|
|
describe("Core/arrayRemoveDuplicates", function () {
|
|
it("removeDuplicates returns positions if none removed", function () {
|
|
var positions = [Cartesian3.ZERO];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toBe(positions);
|
|
});
|
|
|
|
it("removeDuplicates returns positions if none removed", function () {
|
|
var positions = [
|
|
Cartesian3.ZERO,
|
|
Cartesian3.UNIT_X,
|
|
Cartesian3.UNIT_Y,
|
|
Cartesian3.UNIT_Z,
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toBe(positions);
|
|
});
|
|
|
|
it("removeDuplicates wrapping returns positions if none removed", function () {
|
|
var positions = [
|
|
Cartesian3.ZERO,
|
|
Cartesian3.UNIT_X,
|
|
Cartesian3.UNIT_Y,
|
|
Cartesian3.UNIT_Z,
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon,
|
|
true
|
|
);
|
|
expect(noDuplicates).toBe(positions);
|
|
});
|
|
|
|
it("removeDuplicates to remove duplicates", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
];
|
|
var expectedPositions = [
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates to remove duplicates with anonymous types", function () {
|
|
var positions = [
|
|
{ x: 1.0, y: 1.0, z: 1.0 },
|
|
{ x: 1.0, y: 1.0, z: 1.0 },
|
|
{ x: 1.0, y: 1.0, z: 1.0 },
|
|
{ x: 1.0, y: 1.0, z: 1.0 },
|
|
{ x: 2.0, y: 2.0, z: 2.0 },
|
|
{ x: 3.0, y: 3.0, z: 3.0 },
|
|
{ x: 3.0, y: 3.0, z: 3.0 },
|
|
];
|
|
var expectedPositions = [
|
|
{ x: 1.0, y: 1.0, z: 1.0 },
|
|
{ x: 2.0, y: 2.0, z: 2.0 },
|
|
{ x: 3.0, y: 3.0, z: 3.0 },
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates to remove duplicates with Spherical type", function () {
|
|
var positions = [
|
|
new Spherical(1.0, 1.0, 1.0),
|
|
new Spherical(1.0, 1.0, 1.0),
|
|
new Spherical(1.0, 1.0, 1.0),
|
|
new Spherical(1.0, 1.0, 1.0),
|
|
new Spherical(2.0, 2.0, 1.0),
|
|
new Spherical(3.0, 3.0, 1.0),
|
|
new Spherical(3.0, 3.0, 2.0),
|
|
];
|
|
var expectedPositions = [
|
|
new Spherical(1.0, 1.0, 1.0),
|
|
new Spherical(2.0, 2.0, 1.0),
|
|
new Spherical(3.0, 3.0, 1.0),
|
|
new Spherical(3.0, 3.0, 2.0),
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Spherical.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates works with empty array", function () {
|
|
var positions = [];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(positions);
|
|
});
|
|
|
|
it("removeDuplicates to remove positions within absolute epsilon 10", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(1.0, 2.0, 3.0),
|
|
new Cartesian3(1.0, 2.0, 3.0 + CesiumMath.EPSILON10),
|
|
];
|
|
var expectedPositions = [
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(1.0, 2.0, 3.0),
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates to remove positions within relative epsilon 10", function () {
|
|
var positions = [
|
|
new Cartesian3(0.0, 0.0, 1000000.0),
|
|
new Cartesian3(0.0, 0.0, 3000000.0),
|
|
new Cartesian3(0.0, 0.0, 3000000.0002),
|
|
];
|
|
var expectedPositions = [
|
|
new Cartesian3(0.0, 0.0, 1000000.0),
|
|
new Cartesian3(0.0, 0.0, 3000000.0),
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates keeps positions that add up past relative epsilon 10", function () {
|
|
var eightyPercentOfEpsilon = 0.8 * CesiumMath.EPSILON10;
|
|
var positions = [
|
|
new Cartesian3(0.0, 0.0, 1.0),
|
|
new Cartesian3(0.0, 0.0, 1.0 + eightyPercentOfEpsilon),
|
|
new Cartesian3(0.0, 0.0, 1.0 + 2 * eightyPercentOfEpsilon),
|
|
new Cartesian3(0.0, 0.0, 1.0 + 3 * eightyPercentOfEpsilon),
|
|
];
|
|
var expectedPositions = [
|
|
new Cartesian3(0.0, 0.0, 1.0),
|
|
new Cartesian3(0.0, 0.0, 1.0 + 2 * eightyPercentOfEpsilon),
|
|
];
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates returns undefined", function () {
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
undefined,
|
|
Cartesian3.equalsEpsilon
|
|
);
|
|
expect(noDuplicates).toBe(undefined);
|
|
});
|
|
|
|
it("removeDuplicates wrapping removes duplicate first and last points", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
];
|
|
|
|
var expectedPositions = [
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
];
|
|
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon,
|
|
true
|
|
);
|
|
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
|
|
it("removeDuplicates wrapping removes duplicate including first and last points", function () {
|
|
var positions = [
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
];
|
|
|
|
var expectedPositions = [
|
|
new Cartesian3(2.0, 2.0, 2.0),
|
|
new Cartesian3(3.0, 3.0, 3.0),
|
|
new Cartesian3(1.0, 1.0, 1.0),
|
|
];
|
|
|
|
var noDuplicates = arrayRemoveDuplicates(
|
|
positions,
|
|
Cartesian3.equalsEpsilon,
|
|
true
|
|
);
|
|
|
|
expect(noDuplicates).toEqual(expectedPositions);
|
|
});
|
|
});
|