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.
192 lines
5.2 KiB
JavaScript
192 lines
5.2 KiB
JavaScript
import { ManagedArray } from "../../Source/Cesium.js";
|
|
|
|
describe("Core/ManagedArray", function () {
|
|
function expectTrailingReferenceToBeRemoved(managedArray) {
|
|
var array = managedArray._array;
|
|
var length = managedArray._length;
|
|
var reservedLength = array.length;
|
|
for (var i = length; i < reservedLength; ++i) {
|
|
expect(array[i]).toBeUndefined();
|
|
}
|
|
}
|
|
|
|
it("constructor has expected default values", function () {
|
|
var array = new ManagedArray();
|
|
expect(array.length).toEqual(0);
|
|
});
|
|
|
|
it("constructor initializes length", function () {
|
|
var array = new ManagedArray(10);
|
|
expect(array.length).toEqual(10);
|
|
expect(array.values.length).toEqual(10);
|
|
});
|
|
|
|
it("can get and set values", function () {
|
|
var length = 10;
|
|
var array = new ManagedArray(length);
|
|
var i;
|
|
for (i = 0; i < length; ++i) {
|
|
array.set(i, i * i);
|
|
}
|
|
for (i = 0; i < length; ++i) {
|
|
expect(array.get(i)).toEqual(i * i);
|
|
expect(array.values[i]).toEqual(i * i);
|
|
}
|
|
});
|
|
|
|
it("get throws if index does not exist", function () {
|
|
var array = new ManagedArray();
|
|
array.reserve(5);
|
|
expect(array.values.length).toEqual(5);
|
|
expect(function () {
|
|
array.get(5);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("set throws if index invalid", function () {
|
|
var array = new ManagedArray();
|
|
array.resize(10);
|
|
expect(function () {
|
|
array.set(undefined, 5);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("length setter throws if length is less than 0", function () {
|
|
var array = new ManagedArray();
|
|
expect(function () {
|
|
array.length = -1;
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("set resizes array", function () {
|
|
var array = new ManagedArray();
|
|
array.set(0, "a");
|
|
expect(array.length).toEqual(1);
|
|
array.set(5, "b");
|
|
expect(array.length).toEqual(6);
|
|
array.set(2, "c");
|
|
expect(array.length).toEqual(6);
|
|
});
|
|
|
|
it("peeks at the last element of the array", function () {
|
|
var array = new ManagedArray();
|
|
expect(array.peek()).toBeUndefined();
|
|
array.push(0);
|
|
expect(array.peek()).toBe(0);
|
|
array.push(1);
|
|
array.push(2);
|
|
expect(array.peek()).toBe(2);
|
|
});
|
|
|
|
it("can push values", function () {
|
|
var array = new ManagedArray();
|
|
var length = 10;
|
|
for (var i = 0; i < length; ++i) {
|
|
var val = Math.random();
|
|
array.push(val);
|
|
expect(array.length).toEqual(i + 1);
|
|
expect(array.values.length).toEqual(i + 1);
|
|
expect(array.get(i)).toEqual(val);
|
|
expect(array.values[i]).toEqual(val);
|
|
}
|
|
});
|
|
|
|
it("can pop values", function () {
|
|
var length = 10;
|
|
var array = new ManagedArray(length);
|
|
var i;
|
|
for (i = 0; i < length; ++i) {
|
|
array.set(i, Math.random());
|
|
}
|
|
for (i = length - 1; i >= 0; --i) {
|
|
var val = array.get(i);
|
|
expect(array.pop()).toEqual(val);
|
|
expect(array.length).toEqual(i);
|
|
expect(array.values.length).toEqual(length);
|
|
}
|
|
});
|
|
|
|
it("pop removes trailing references", function () {
|
|
var length = 10;
|
|
var array = new ManagedArray(length);
|
|
array.set(0, Math.random());
|
|
array.set(1, Math.random());
|
|
array.set(2, Math.random());
|
|
array.pop();
|
|
array.pop();
|
|
expectTrailingReferenceToBeRemoved(array);
|
|
});
|
|
|
|
it("pop returns undefined if array is empty", function () {
|
|
var array = new ManagedArray();
|
|
array.push(1);
|
|
expect(array.pop()).toBe(1);
|
|
expect(array.pop()).toBeUndefined();
|
|
});
|
|
|
|
it("reserve throws if length is less than 0", function () {
|
|
var array = new ManagedArray();
|
|
expect(function () {
|
|
array.reserve(-1);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("reserve", function () {
|
|
var array = new ManagedArray(2);
|
|
array.reserve(10);
|
|
expect(array.values.length).toEqual(10);
|
|
expect(array.length).toEqual(2);
|
|
array.reserve(20);
|
|
expect(array.values.length).toEqual(20);
|
|
expect(array.length).toEqual(2);
|
|
array.reserve(5);
|
|
expect(array.values.length).toEqual(20);
|
|
expect(array.length).toEqual(2);
|
|
});
|
|
|
|
it("resize throws if length is less than 0", function () {
|
|
var array = new ManagedArray();
|
|
expect(function () {
|
|
array.resize(-1);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("resize", function () {
|
|
var array = new ManagedArray(2);
|
|
array.resize(10);
|
|
expect(array.values.length).toEqual(10);
|
|
expect(array.length).toEqual(10);
|
|
array.resize(20);
|
|
expect(array.values.length).toEqual(20);
|
|
expect(array.length).toEqual(20);
|
|
array.resize(5);
|
|
expect(array.values.length).toEqual(20);
|
|
expect(array.length).toEqual(5);
|
|
});
|
|
|
|
it("resize removes trailing references", function () {
|
|
var length = 10;
|
|
var array = new ManagedArray(length);
|
|
array.set(0, Math.random());
|
|
array.set(1, Math.random());
|
|
array.set(2, Math.random());
|
|
array.resize(1);
|
|
expectTrailingReferenceToBeRemoved(array);
|
|
});
|
|
|
|
it("trim", function () {
|
|
var array = new ManagedArray(2);
|
|
array.reserve(10);
|
|
expect(array.length).toEqual(2);
|
|
expect(array.values.length).toEqual(10);
|
|
array.trim();
|
|
expect(array.values.length).toEqual(2);
|
|
array.trim(5);
|
|
expect(array.length).toEqual(2);
|
|
expect(array.values.length).toEqual(5);
|
|
array.trim(3);
|
|
expect(array.length).toEqual(2);
|
|
expect(array.values.length).toEqual(3);
|
|
});
|
|
});
|