Merge pull request #4567 from bartvde/issue-4566
Always pass on a compare function to sort
This commit is contained in:
committed by
Bart van den Eijnden
parent
5d64762bcb
commit
4b7e8f5f83
@@ -37,6 +37,18 @@ ol.array.binaryFindNearest = function(arr, target) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default compare for array sort, will make sure number sort works okay.
|
||||||
|
* @param {*} a The first object to be compared.
|
||||||
|
* @param {*} b The second object to be compared.
|
||||||
|
* @return {number} A negative number, zero, or a positive number as the first
|
||||||
|
* argument is less than, equal to, or greater than the second.
|
||||||
|
*/
|
||||||
|
ol.array.defaultCompare = function(a, b) {
|
||||||
|
return a > b ? 1 : a < b ? -1 : 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the array contains the given object.
|
* Whether the array contains the given object.
|
||||||
* @param {Array.<*>} arr The array to test for the presence of the element.
|
* @param {Array.<*>} arr The array to test for the presence of the element.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
goog.provide('ol.geom.flat.interiorpoint');
|
goog.provide('ol.geom.flat.interiorpoint');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.geom.flat.contains');
|
goog.require('ol.geom.flat.contains');
|
||||||
|
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
|
|||||||
// inside the linear ring.
|
// inside the linear ring.
|
||||||
var pointX = NaN;
|
var pointX = NaN;
|
||||||
var maxSegmentLength = -Infinity;
|
var maxSegmentLength = -Infinity;
|
||||||
intersections.sort();
|
intersections.sort(ol.array.defaultCompare);
|
||||||
x1 = intersections[0];
|
x1 = intersections[0];
|
||||||
for (i = 1, ii = intersections.length; i < ii; ++i) {
|
for (i = 1, ii = intersections.length; i < ii; ++i) {
|
||||||
x2 = intersections[i];
|
x2 = intersections[i];
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ goog.provide('ol.render.canvas.Immediate');
|
|||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('goog.vec.Mat4');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.color');
|
goog.require('ol.color');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.geom.flat.transform');
|
goog.require('ol.geom.flat.transform');
|
||||||
@@ -721,7 +722,7 @@ ol.render.canvas.Immediate.prototype.drawText = goog.abstractMethod;
|
|||||||
ol.render.canvas.Immediate.prototype.flush = function() {
|
ol.render.canvas.Immediate.prototype.flush = function() {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(this.callbacksByZIndex_).map(Number);
|
var zs = Object.keys(this.callbacksByZIndex_).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
var i, ii, callbacks, j, jj;
|
var i, ii, callbacks, j, jj;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
callbacks = this.callbacksByZIndex_[zs[i].toString()];
|
callbacks = this.callbacksByZIndex_[zs[i].toString()];
|
||||||
|
|||||||
@@ -2001,7 +2001,7 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
|
|||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(this.replaysByZIndex_).map(Number);
|
var zs = Object.keys(this.replaysByZIndex_).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
|
|
||||||
// setup clipping so that the parts of over-simplified geometries are not
|
// setup clipping so that the parts of over-simplified geometries are not
|
||||||
// visible outside the current extent when panning
|
// visible outside the current extent when panning
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
goog.provide('ol.render.webgl.Immediate');
|
goog.provide('ol.render.webgl.Immediate');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.render.VectorContext');
|
goog.require('ol.render.VectorContext');
|
||||||
goog.require('ol.render.webgl.ImageReplay');
|
goog.require('ol.render.webgl.ImageReplay');
|
||||||
@@ -79,7 +80,7 @@ goog.inherits(ol.render.webgl.Immediate, ol.render.VectorContext);
|
|||||||
ol.render.webgl.Immediate.prototype.flush = function() {
|
ol.render.webgl.Immediate.prototype.flush = function() {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(this.callbacksByZIndex_).map(Number);
|
var zs = Object.keys(this.callbacksByZIndex_).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
var i, ii, callbacks, j, jj;
|
var i, ii, callbacks, j, jj;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
callbacks = this.callbacksByZIndex_[zs[i].toString()];
|
callbacks = this.callbacksByZIndex_[zs[i].toString()];
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ goog.require('goog.vec.Mat4');
|
|||||||
goog.require('ol.Size');
|
goog.require('ol.Size');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
@@ -364,7 +365,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame =
|
|||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
var opaque = tileSource.getOpaque();
|
var opaque = tileSource.getOpaque();
|
||||||
var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(
|
var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(
|
||||||
[z, canvasTileRange.minX, canvasTileRange.maxY],
|
[z, canvasTileRange.minX, canvasTileRange.maxY],
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ goog.require('ol.TileRange');
|
|||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.VectorTile');
|
goog.require('ol.VectorTile');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.VectorTile');
|
goog.require('ol.layer.VectorTile');
|
||||||
@@ -405,7 +406,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.prepareFrame =
|
|||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
var replayables = [];
|
var replayables = [];
|
||||||
var i, ii, currentZ, tileCoordKey, tilesToDraw;
|
var i, ii, currentZ, tileCoordKey, tilesToDraw;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ goog.require('ol.TileCoord');
|
|||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
@@ -177,7 +178,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
|
|||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
|
|
||||||
/** @type {Object.<number, boolean>} */
|
/** @type {Object.<number, boolean>} */
|
||||||
var newTileLayerZKeys = {};
|
var newTileLayerZKeys = {};
|
||||||
@@ -203,7 +204,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame =
|
|||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var tileLayerZKeys = Object.keys(this.tileLayerZs_).map(Number);
|
var tileLayerZKeys = Object.keys(this.tileLayerZs_).map(Number);
|
||||||
tileLayerZKeys.sort();
|
tileLayerZKeys.sort(ol.array.defaultCompare);
|
||||||
|
|
||||||
var i, ii, j, origin, resolution;
|
var i, ii, j, origin, resolution;
|
||||||
var transform = goog.vec.Mat4.createNumber();
|
var transform = goog.vec.Mat4.createNumber();
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ goog.require('goog.vec.Vec4');
|
|||||||
goog.require('goog.webgl');
|
goog.require('goog.webgl');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.math');
|
goog.require('ol.math');
|
||||||
@@ -296,7 +297,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame =
|
|||||||
|
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
||||||
zs.sort();
|
zs.sort(ol.array.defaultCompare);
|
||||||
var u_tileOffset = goog.vec.Vec4.createFloat32();
|
var u_tileOffset = goog.vec.Vec4.createFloat32();
|
||||||
var i, ii, sx, sy, tileKey, tilesToDraw, tx, ty;
|
var i, ii, sx, sy, tileKey, tilesToDraw, tx, ty;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
|
|||||||
@@ -2,6 +2,16 @@ goog.provide('ol.test.array');
|
|||||||
|
|
||||||
describe('ol.array', function() {
|
describe('ol.array', function() {
|
||||||
|
|
||||||
|
describe('defaultCompare', function() {
|
||||||
|
it('sorts as expected', function() {
|
||||||
|
var arr = [40, 200, 3000];
|
||||||
|
var expected = [40, 200, 3000];
|
||||||
|
// default sort would yield [200, 3000, 40]
|
||||||
|
arr.sort(ol.array.defaultCompare);
|
||||||
|
expect(arr).to.eql(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('binaryFindNearest', function() {
|
describe('binaryFindNearest', function() {
|
||||||
it('returns expected value', function() {
|
it('returns expected value', function() {
|
||||||
var arr = [1000, 500, 100];
|
var arr = [1000, 500, 100];
|
||||||
|
|||||||
@@ -1,6 +1,22 @@
|
|||||||
goog.provide('ol.test.render.canvas.Immediate');
|
goog.provide('ol.test.render.canvas.Immediate');
|
||||||
|
|
||||||
describe('ol.render.canvas.Immediate', function() {
|
describe('ol.render.canvas.Immediate', function() {
|
||||||
|
|
||||||
|
describe('#flush', function() {
|
||||||
|
it('calls callback in correct z-order', function() {
|
||||||
|
var canvas = new ol.render.canvas.Immediate();
|
||||||
|
var log = [];
|
||||||
|
canvas.drawAsync(11, function() {
|
||||||
|
log.push(11);
|
||||||
|
});
|
||||||
|
canvas.drawAsync(5, function() {
|
||||||
|
log.push(5);
|
||||||
|
});
|
||||||
|
canvas.flush();
|
||||||
|
expect(log).to.eql([5, 11]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('#drawMultiPolygonGeometry', function() {
|
describe('#drawMultiPolygonGeometry', function() {
|
||||||
it('creates the correct canvas instructions for 3D geometries', function() {
|
it('creates the correct canvas instructions for 3D geometries', function() {
|
||||||
var log = {
|
var log = {
|
||||||
|
|||||||
Reference in New Issue
Block a user