302 lines
7.4 KiB
JavaScript
302 lines
7.4 KiB
JavaScript
goog.provide('ol.test.structs.Buffer');
|
|
|
|
|
|
describe('ol.structs.Buffer', function() {
|
|
|
|
describe('constructor', function() {
|
|
|
|
describe('without an argument', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
b = new ol.structs.Buffer();
|
|
});
|
|
|
|
it('constructs an empty instance', function() {
|
|
expect(b.getArray()).to.be.empty();
|
|
expect(b.getCount()).to.be(0);
|
|
});
|
|
|
|
});
|
|
|
|
describe('with a single array argument', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
b = new ol.structs.Buffer([0, 1, 2, 3]);
|
|
});
|
|
|
|
it('constructs a populated instance', function() {
|
|
expect(b.getArray()).to.eql([0, 1, 2, 3]);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('with an empty instance', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
b = new ol.structs.Buffer();
|
|
});
|
|
|
|
describe('forEachRange', function() {
|
|
|
|
it('does not call the callback', function() {
|
|
var callback = sinon.spy();
|
|
b.forEachRange(callback);
|
|
expect(callback).not.to.be.called();
|
|
});
|
|
|
|
});
|
|
|
|
describe('getArray', function() {
|
|
|
|
it('returns an empty array', function() {
|
|
expect(b.getArray()).to.be.empty();
|
|
});
|
|
|
|
});
|
|
|
|
describe('getCount', function() {
|
|
|
|
it('returns 0', function() {
|
|
expect(b.getCount()).to.be(0);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('with an empty instance with spare capacity', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
b = new ol.structs.Buffer(new Array(4), 0);
|
|
});
|
|
|
|
describe('add', function() {
|
|
|
|
it('allows elements to be added', function() {
|
|
expect(b.add([0, 1, 2, 3])).to.be(0);
|
|
expect(b.getArray()).to.eql([0, 1, 2, 3]);
|
|
});
|
|
|
|
});
|
|
|
|
describe('forEachRange', function() {
|
|
|
|
it('does not call the callback', function() {
|
|
var callback = sinon.spy();
|
|
b.forEachRange(callback);
|
|
expect(callback).not.to.be.called();
|
|
});
|
|
|
|
});
|
|
|
|
describe('getCount', function() {
|
|
|
|
it('returns 0', function() {
|
|
expect(b.getCount()).to.be(0);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('with an instance with no spare capacity', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
b = new ol.structs.Buffer([0, 1, 2, 3]);
|
|
});
|
|
|
|
describe('add', function() {
|
|
|
|
it('throws an exception', function() {
|
|
expect(function() {
|
|
b.add([4, 5]);
|
|
}).to.throwException();
|
|
});
|
|
|
|
});
|
|
|
|
describe('forEachRange', function() {
|
|
|
|
it('calls the callback', function() {
|
|
var callback = sinon.spy();
|
|
b.forEachRange(callback);
|
|
expect(callback.calledOnce).to.be(true);
|
|
expect(callback.args[0]).to.eql([0, 4]);
|
|
});
|
|
|
|
});
|
|
|
|
describe('getCount', function() {
|
|
|
|
it('returns the expected value', function() {
|
|
expect(b.getCount()).to.be(4);
|
|
});
|
|
|
|
});
|
|
|
|
describe('remove', function() {
|
|
|
|
it('allows items to be removes', function() {
|
|
expect(function() {
|
|
b.remove(4, 2);
|
|
}).to.not.throwException();
|
|
});
|
|
|
|
});
|
|
|
|
describe('set', function() {
|
|
|
|
it('updates the items', function() {
|
|
b.set([5, 6], 2);
|
|
expect(b.getArray()).to.eql([0, 1, 5, 6]);
|
|
});
|
|
|
|
it('marks the set items as dirty', function() {
|
|
var dirtySet = new ol.structs.IntegerSet();
|
|
b.addDirtySet(dirtySet);
|
|
expect(dirtySet.isEmpty()).to.be(true);
|
|
b.set([5, 6], 2);
|
|
expect(dirtySet.isEmpty()).to.be(false);
|
|
expect(dirtySet.getArray()).to.eql([2, 4]);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('with an instance with spare capacity', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
var arr = [0, 1, 2, 3];
|
|
arr.length = 8;
|
|
b = new ol.structs.Buffer(arr, 4);
|
|
});
|
|
|
|
describe('add', function() {
|
|
|
|
it('allows more items to be added', function() {
|
|
expect(b.add([4, 5, 6, 7])).to.be(4);
|
|
expect(b.getArray()).to.eql([0, 1, 2, 3, 4, 5, 6, 7]);
|
|
});
|
|
|
|
});
|
|
|
|
describe('forEachRange', function() {
|
|
|
|
it('calls the callback with the expected values', function() {
|
|
var callback = sinon.spy();
|
|
b.forEachRange(callback);
|
|
expect(callback.calledOnce).to.be(true);
|
|
expect(callback.args[0]).to.eql([0, 4]);
|
|
});
|
|
|
|
});
|
|
|
|
describe('getCount', function() {
|
|
|
|
it('returns the expected value', function() {
|
|
expect(b.getCount()).to.be(4);
|
|
});
|
|
|
|
});
|
|
|
|
describe('getFreeSet', function() {
|
|
|
|
it('returns the expected set', function() {
|
|
var freeSet = b.getFreeSet();
|
|
expect(freeSet.isEmpty()).to.be(false);
|
|
expect(freeSet.getArray()).to.eql([4, 8]);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe('with a populated instance', function() {
|
|
|
|
var b;
|
|
beforeEach(function() {
|
|
b = new ol.structs.Buffer([1234567.1234567, -7654321.7654321]);
|
|
});
|
|
|
|
describe('getSplit32', function() {
|
|
|
|
it('returns the expected value', function() {
|
|
var split32 = b.getSplit32();
|
|
expect(split32.high).to.be.a(Float32Array);
|
|
expect(split32.low).to.be.a(Float32Array);
|
|
expect(split32.high).to.have.length(2);
|
|
expect(split32.low).to.have.length(2);
|
|
expect(split32.high[0]).to.roughlyEqual(1179648.0, 1e1);
|
|
expect(split32.low[0]).to.roughlyEqual(54919.12345670001, 1e-2);
|
|
expect(split32.high[1]).to.roughlyEqual(-7602176.0, 1e1);
|
|
expect(split32.low[1]).to.roughlyEqual(-52145.76543209981, 1e-2);
|
|
});
|
|
|
|
it('tracks updates', function() {
|
|
b.getSplit32();
|
|
b.getArray()[0] = 0;
|
|
b.markDirty(1, 0);
|
|
var split32 = b.getSplit32();
|
|
expect(split32.high).to.be.a(Float32Array);
|
|
expect(split32.low).to.be.a(Float32Array);
|
|
expect(split32.high).to.have.length(2);
|
|
expect(split32.low).to.have.length(2);
|
|
expect(split32.high[0]).to.be(0);
|
|
expect(split32.low[0]).to.be(0);
|
|
expect(split32.high[1]).to.roughlyEqual(-7602176.0, 1e1);
|
|
expect(split32.low[1]).to.roughlyEqual(-52145.76543209981, 1e-2);
|
|
});
|
|
|
|
});
|
|
});
|
|
|
|
describe('usage tests', function() {
|
|
|
|
it('allows multiple adds and removes', function() {
|
|
var b = new ol.structs.Buffer(new Array(8), 0);
|
|
expect(b.add([0, 1])).to.be(0);
|
|
expect(b.getArray()).to.eql([0, 1, NaN, NaN, NaN, NaN, NaN, NaN]);
|
|
expect(b.getCount()).to.be(2);
|
|
expect(b.add([2, 3, 4, 5])).to.be(2);
|
|
expect(b.getArray()).to.eql([0, 1, 2, 3, 4, 5, NaN, NaN]);
|
|
expect(b.getCount()).to.be(6);
|
|
expect(b.add([6, 7])).to.be(6);
|
|
expect(b.getArray()).to.eql([0, 1, 2, 3, 4, 5, 6, 7]);
|
|
expect(b.getCount()).to.be(8);
|
|
b.remove(2, 2);
|
|
expect(b.getArray()).to.eql([0, 1, NaN, NaN, 4, 5, 6, 7]);
|
|
expect(b.getCount()).to.be(6);
|
|
expect(b.add([8, 9])).to.be(2);
|
|
expect(b.getArray()).to.eql([0, 1, 8, 9, 4, 5, 6, 7]);
|
|
expect(b.getCount()).to.be(8);
|
|
b.remove(1, 1);
|
|
expect(b.getArray()).to.eql([0, NaN, 8, 9, 4, 5, 6, 7]);
|
|
expect(b.getCount()).to.be(7);
|
|
b.remove(4, 4);
|
|
expect(b.getArray()).to.eql([0, NaN, 8, 9, NaN, NaN, NaN, NaN]);
|
|
expect(b.getCount()).to.be(3);
|
|
expect(b.add([10, 11, 12])).to.be(4);
|
|
expect(b.getArray()).to.eql([0, NaN, 8, 9, 10, 11, 12, NaN]);
|
|
expect(b.getCount()).to.be(6);
|
|
expect(b.add([13])).to.be(1);
|
|
expect(b.getArray()).to.eql([0, 13, 8, 9, 10, 11, 12, NaN]);
|
|
expect(b.getCount()).to.be(7);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
goog.require('ol.structs.Buffer');
|
|
goog.require('ol.structs.IntegerSet');
|