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

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);
});
});