168 lines
6.9 KiB
JavaScript
168 lines
6.9 KiB
JavaScript
|
|
defineSuite([
|
||
|
|
'Core/arrayRemoveDuplicates',
|
||
|
|
'Core/Cartesian3',
|
||
|
|
'Core/Math',
|
||
|
|
'Core/Spherical'
|
||
|
|
], function(
|
||
|
|
arrayRemoveDuplicates,
|
||
|
|
Cartesian3,
|
||
|
|
CesiumMath,
|
||
|
|
Spherical) {
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
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);
|
||
|
|
});
|
||
|
|
|
||
|
|
});
|