import {
|
defaultValue,
|
ImplicitSubdivisionScheme,
|
ImplicitTileCoordinates,
|
} from "../../Source/Cesium.js";
|
|
describe("Scene/ImplicitTileCoordinates", function () {
|
/**
|
* Helper function for creating quadtree implicit tile coordinates
|
* @param {Number} level
|
* @param {Number} x
|
* @param {Number} y
|
* @param {Number} [subtreeLevels=2]
|
* @returns {ImplicitTileCoordinates}
|
*/
|
function quadtreeCoordinates(level, x, y, subtreeLevels) {
|
return new ImplicitTileCoordinates({
|
subdivisionScheme: ImplicitSubdivisionScheme.QUADTREE,
|
subtreeLevels: defaultValue(subtreeLevels, 2),
|
level: level,
|
x: x,
|
y: y,
|
});
|
}
|
|
/**
|
* Helper function for creating octree implicit tile coordinates
|
* @param {Number} level
|
* @param {Number} x
|
* @param {Number} y
|
* @param {Number} z
|
* @param {Number} [subtreeLevels=2]
|
* @returns {ImplicitTileCoordinates}
|
*/
|
function octreeCoordinates(level, x, y, z, subtreeLevels) {
|
return new ImplicitTileCoordinates({
|
subdivisionScheme: ImplicitSubdivisionScheme.OCTREE,
|
subtreeLevels: defaultValue(subtreeLevels, 2),
|
level: level,
|
x: x,
|
y: y,
|
z: z,
|
});
|
}
|
|
it("constructs quadtree", function () {
|
var coordinates = new ImplicitTileCoordinates({
|
subdivisionScheme: ImplicitSubdivisionScheme.QUADTREE,
|
subtreeLevels: 6,
|
level: 4,
|
x: 3,
|
y: 2,
|
});
|
|
expect(coordinates.subdivisionScheme).toEqual(
|
ImplicitSubdivisionScheme.QUADTREE
|
);
|
expect(coordinates.level).toEqual(4);
|
expect(coordinates.x).toEqual(3);
|
expect(coordinates.y).toEqual(2);
|
expect(coordinates.z).not.toBeDefined();
|
});
|
|
it("constructs octree", function () {
|
var coordinates = new ImplicitTileCoordinates({
|
subdivisionScheme: ImplicitSubdivisionScheme.OCTREE,
|
subtreeLevels: 6,
|
level: 4,
|
x: 3,
|
y: 2,
|
z: 1,
|
});
|
|
expect(coordinates.subdivisionScheme).toEqual(
|
ImplicitSubdivisionScheme.OCTREE
|
);
|
expect(coordinates.level).toEqual(4);
|
expect(coordinates.x).toEqual(3);
|
expect(coordinates.y).toEqual(2);
|
expect(coordinates.z).toEqual(1);
|
});
|
|
it("constructor throws with invalid inputs for quadree", function () {
|
// negative level
|
expect(function () {
|
quadtreeCoordinates(-1, 0, 0);
|
}).toThrowDeveloperError();
|
|
// negative x
|
expect(function () {
|
quadtreeCoordinates(0, -1, 0);
|
}).toThrowDeveloperError();
|
|
// negative y
|
expect(function () {
|
quadtreeCoordinates(0, 0, -1);
|
}).toThrowDeveloperError();
|
|
// out of range x
|
expect(function () {
|
quadtreeCoordinates(0, 4, 0);
|
}).toThrowDeveloperError();
|
|
// out of range y
|
expect(function () {
|
quadtreeCoordinates(0, 0, 4);
|
}).toThrowDeveloperError();
|
});
|
|
it("constructor throws with invalid inputs for octree", function () {
|
// negative z
|
expect(function () {
|
octreeCoordinates(0, 0, 0, -1);
|
}).toThrowDeveloperError();
|
|
// out of range z
|
expect(function () {
|
octreeCoordinates(0, 0, 0, 4);
|
}).toThrowDeveloperError();
|
});
|
|
it("getDescendantCoordinates throws with invalid inputs", function () {
|
// undefined input
|
expect(function () {
|
quadtreeCoordinates(0, 0, 0).getDescendantCoordinates(undefined);
|
}).toThrowDeveloperError();
|
|
// mismatched subdivisionScheme
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getDescendantCoordinates(
|
octreeCoordinates(0, 0, 0, 0)
|
);
|
}).toThrowDeveloperError();
|
|
// mismatched subtreeLevels
|
expect(function () {
|
var subtreeLevelsA = 2;
|
var subtreeLevelsB = 3;
|
return quadtreeCoordinates(
|
0,
|
0,
|
0,
|
subtreeLevelsA
|
).getDescendantCoordinates(quadtreeCoordinates(0, 0, 0, subtreeLevelsB));
|
}).toThrowDeveloperError();
|
});
|
|
it("getDescendantCoordinates works as expected for quadtree", function () {
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getDescendantCoordinates(quadtreeCoordinates(0, 0, 0))
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getDescendantCoordinates(quadtreeCoordinates(1, 1, 1))
|
.isEqual(quadtreeCoordinates(1, 1, 1))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(1, 1, 1)
|
.getDescendantCoordinates(quadtreeCoordinates(2, 3, 3))
|
.isEqual(quadtreeCoordinates(3, 7, 7))
|
).toEqual(true);
|
});
|
|
it("getDescendantCoordinates works as expected for octree", function () {
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getDescendantCoordinates(octreeCoordinates(0, 0, 0, 0))
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getDescendantCoordinates(octreeCoordinates(1, 1, 1, 1))
|
.isEqual(octreeCoordinates(1, 1, 1, 1))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(1, 1, 1, 1)
|
.getDescendantCoordinates(octreeCoordinates(2, 3, 3, 3))
|
.isEqual(octreeCoordinates(3, 7, 7, 7))
|
).toEqual(true);
|
});
|
|
it("getAncestorCoordinates throws with invalid inputs", function () {
|
// undefined input
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getAncestorCoordinates(undefined);
|
}).toThrowDeveloperError();
|
|
// negative input
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getAncestorCoordinates(-1);
|
}).toThrowDeveloperError();
|
|
// ancestor cannot be above tileset root
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getAncestorCoordinates(1);
|
}).toThrowDeveloperError();
|
});
|
|
it("getAncestorCoordinates works as expected for quadtree", function () {
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getAncestorCoordinates(0)
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(1, 0, 0)
|
.getAncestorCoordinates(1)
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(1, 1, 1)
|
.getAncestorCoordinates(1)
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(2, 3, 3)
|
.getAncestorCoordinates(1)
|
.isEqual(quadtreeCoordinates(1, 1, 1))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(2, 3, 3)
|
.getAncestorCoordinates(2)
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
});
|
|
it("getAncestorCoordinates works as expected for octree", function () {
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getAncestorCoordinates(0)
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(1, 0, 0, 0)
|
.getAncestorCoordinates(1)
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(1, 1, 1, 1)
|
.getAncestorCoordinates(1)
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(2, 3, 3, 3)
|
.getAncestorCoordinates(1)
|
.isEqual(octreeCoordinates(1, 1, 1, 1))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(2, 3, 3, 3)
|
.getAncestorCoordinates(2)
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
});
|
|
it("getOffsetCoordinates throws with invalid inputs", function () {
|
// undefined input
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getOffsetCoordinates(undefined);
|
}).toThrowDeveloperError();
|
|
// descendant is above ancestor
|
expect(function () {
|
return quadtreeCoordinates(1, 0, 0).getOffsetCoordinates(
|
quadtreeCoordinates(0, 0, 0)
|
);
|
}).toThrowDeveloperError();
|
|
// descendant is not actually a descendant
|
expect(function () {
|
return quadtreeCoordinates(1, 0, 0).getOffsetCoordinates(
|
quadtreeCoordinates(2, 3, 3)
|
);
|
}).toThrowDeveloperError();
|
|
// mismatched subdivisionScheme
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getOffsetCoordinates(
|
octreeCoordinates(0, 0, 0, 0)
|
);
|
}).toThrowDeveloperError();
|
|
// mismatched subtreeLevels
|
expect(function () {
|
var subtreeLevelsA = 2;
|
var subtreeLevelsB = 3;
|
return quadtreeCoordinates(0, 0, 0, subtreeLevelsA).getOffsetCoordinates(
|
quadtreeCoordinates(0, 0, 0, subtreeLevelsB)
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("getOffsetCoordinates works as expected for quadtree", function () {
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getOffsetCoordinates(quadtreeCoordinates(0, 0, 0))
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getOffsetCoordinates(quadtreeCoordinates(1, 1, 1))
|
.isEqual(quadtreeCoordinates(1, 1, 1))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getOffsetCoordinates(quadtreeCoordinates(2, 3, 3))
|
.isEqual(quadtreeCoordinates(2, 3, 3))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(1, 1, 1)
|
.getOffsetCoordinates(quadtreeCoordinates(2, 2, 2))
|
.isEqual(quadtreeCoordinates(1, 0, 0))
|
).toEqual(true);
|
});
|
|
it("getOffsetCoordinates works as expected for octree", function () {
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getOffsetCoordinates(octreeCoordinates(0, 0, 0, 0))
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getOffsetCoordinates(octreeCoordinates(1, 1, 1, 1))
|
.isEqual(octreeCoordinates(1, 1, 1, 1))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getOffsetCoordinates(octreeCoordinates(2, 3, 3, 3))
|
.isEqual(octreeCoordinates(2, 3, 3, 3))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(1, 1, 1, 1)
|
.getOffsetCoordinates(octreeCoordinates(2, 2, 2, 2))
|
.isEqual(octreeCoordinates(1, 0, 0, 0))
|
).toEqual(true);
|
});
|
|
it("getChildCoordinates throws for invalid inputs", function () {
|
var coordinates = quadtreeCoordinates(1, 0, 0);
|
expect(function () {
|
return coordinates.getChildCoordinates(undefined);
|
}).toThrowDeveloperError();
|
expect(function () {
|
return coordinates.getChildCoordinates(-1);
|
}).toThrowDeveloperError();
|
expect(function () {
|
return coordinates.getChildCoordinates(10);
|
}).toThrowDeveloperError();
|
});
|
|
it("getChildCoordinates works as expected for quadree", function () {
|
var coordinates = quadtreeCoordinates(1, 0, 0);
|
|
expect(
|
coordinates.getChildCoordinates(0).isEqual(quadtreeCoordinates(2, 0, 0))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(1).isEqual(quadtreeCoordinates(2, 1, 0))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(2).isEqual(quadtreeCoordinates(2, 0, 1))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(3).isEqual(quadtreeCoordinates(2, 1, 1))
|
).toEqual(true);
|
});
|
|
it("getChildCoordinates works as expected for octree", function () {
|
var coordinates = octreeCoordinates(1, 0, 1, 1);
|
|
expect(
|
coordinates.getChildCoordinates(0).isEqual(octreeCoordinates(2, 0, 2, 2))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(1).isEqual(octreeCoordinates(2, 1, 2, 2))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(2).isEqual(octreeCoordinates(2, 0, 3, 2))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(3).isEqual(octreeCoordinates(2, 1, 3, 2))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(4).isEqual(octreeCoordinates(2, 0, 2, 3))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(5).isEqual(octreeCoordinates(2, 1, 2, 3))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(6).isEqual(octreeCoordinates(2, 0, 3, 3))
|
).toEqual(true);
|
|
expect(
|
coordinates.getChildCoordinates(7).isEqual(octreeCoordinates(2, 1, 3, 3))
|
).toEqual(true);
|
});
|
|
it("getSubtreeCoordinates works as expected for quadtree", function () {
|
expect(
|
quadtreeCoordinates(0, 0, 0)
|
.getSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(1, 1, 1)
|
.getSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(2, 3, 3)
|
.getSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(2, 3, 3))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(3, 7, 7)
|
.getSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(2, 3, 3))
|
).toEqual(true);
|
});
|
|
it("getSubtreeCoordinates works as expected for octree", function () {
|
expect(
|
octreeCoordinates(0, 0, 0, 0)
|
.getSubtreeCoordinates()
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(1, 1, 1, 1)
|
.getSubtreeCoordinates()
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(2, 3, 3, 3)
|
.getSubtreeCoordinates()
|
.isEqual(octreeCoordinates(2, 3, 3, 3))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(3, 7, 7, 7)
|
.getSubtreeCoordinates()
|
.isEqual(octreeCoordinates(2, 3, 3, 3))
|
).toEqual(true);
|
});
|
|
it("getParentSubtreeCoordinates throws for invalid inputs", function () {
|
// tileset root
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).getParentSubtreeCoordinates();
|
}).toThrowDeveloperError();
|
|
// in root subtree
|
expect(function () {
|
return quadtreeCoordinates(1, 1, 1).getParentSubtreeCoordinates();
|
}).toThrowDeveloperError();
|
});
|
|
it("getParentSubtreeCoordinates works as expected for quadtree", function () {
|
expect(
|
quadtreeCoordinates(2, 0, 0)
|
.getParentSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(2, 3, 3)
|
.getParentSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(3, 7, 7)
|
.getParentSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(4, 0, 0)
|
.getParentSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(2, 0, 0))
|
).toEqual(true);
|
|
expect(
|
quadtreeCoordinates(4, 15, 15)
|
.getParentSubtreeCoordinates()
|
.isEqual(quadtreeCoordinates(2, 3, 3))
|
).toEqual(true);
|
});
|
|
it("getParentSubtreeCoordinates works as expected for octree", function () {
|
expect(
|
octreeCoordinates(2, 0, 0, 0)
|
.getParentSubtreeCoordinates()
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(2, 3, 3, 3)
|
.getParentSubtreeCoordinates()
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(3, 7, 7, 7)
|
.getParentSubtreeCoordinates()
|
.isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(4, 0, 0, 0)
|
.getParentSubtreeCoordinates()
|
.isEqual(octreeCoordinates(2, 0, 0, 0))
|
).toEqual(true);
|
|
expect(
|
octreeCoordinates(4, 15, 15, 15)
|
.getParentSubtreeCoordinates()
|
.isEqual(octreeCoordinates(2, 3, 3, 3))
|
).toEqual(true);
|
});
|
|
it("isAncestor throws with invalid inputs", function () {
|
// undefined input
|
expect(function () {
|
quadtreeCoordinates(0, 0, 0).isAncestor(undefined);
|
}).toThrowDeveloperError();
|
|
// mismatched subdivisionScheme
|
expect(function () {
|
return quadtreeCoordinates(0, 0, 0).isAncestor(
|
octreeCoordinates(0, 0, 0, 0)
|
);
|
}).toThrowDeveloperError();
|
|
// mismatched subtreeLevels
|
expect(function () {
|
var subtreeLevelsA = 2;
|
var subtreeLevelsB = 3;
|
return quadtreeCoordinates(0, 0, 0, subtreeLevelsA).isAncestor(
|
quadtreeCoordinates(0, 0, 0, subtreeLevelsB)
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("isAncestor works as expected for quadtree", function () {
|
// cannot be ancestor of itself
|
expect(
|
quadtreeCoordinates(0, 0, 0).isAncestor(quadtreeCoordinates(0, 0, 0))
|
).toEqual(false);
|
|
// ancestor one level above
|
expect(
|
quadtreeCoordinates(0, 0, 0).isAncestor(quadtreeCoordinates(1, 1, 1))
|
).toEqual(true);
|
|
// cannot be descendant
|
expect(
|
quadtreeCoordinates(1, 1, 1).isAncestor(quadtreeCoordinates(0, 0, 0))
|
).toEqual(false);
|
|
// works with bigger divide
|
expect(
|
quadtreeCoordinates(0, 0, 0).isAncestor(quadtreeCoordinates(3, 7, 7))
|
).toEqual(true);
|
|
// higher up in the tree but not an ancestor
|
expect(
|
quadtreeCoordinates(1, 0, 0).isAncestor(quadtreeCoordinates(2, 3, 3))
|
).toEqual(false);
|
});
|
|
it("isAncestor works as expected for octree", function () {
|
// cannot be ancestor of itself
|
expect(
|
octreeCoordinates(0, 0, 0, 0).isAncestor(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(false);
|
|
// ancestor one level above
|
expect(
|
octreeCoordinates(0, 0, 0, 0).isAncestor(octreeCoordinates(1, 1, 1, 1))
|
).toEqual(true);
|
|
// cannot be descendant
|
expect(
|
octreeCoordinates(1, 1, 1, 1).isAncestor(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(false);
|
|
// works with bigger divide
|
expect(
|
octreeCoordinates(0, 0, 0, 0).isAncestor(octreeCoordinates(3, 7, 7, 7))
|
).toEqual(true);
|
|
// higher up in the tree but not an ancestor
|
expect(
|
octreeCoordinates(1, 0, 0, 0).isAncestor(octreeCoordinates(2, 3, 3, 3))
|
).toEqual(false);
|
});
|
|
it("isEqual throws with invalid inputs", function () {
|
// undefined input
|
expect(function () {
|
quadtreeCoordinates(0, 0, 0).isEqual(undefined);
|
}).toThrowDeveloperError();
|
});
|
|
it("isEqual works as expected for quadtree", function () {
|
// same
|
expect(
|
octreeCoordinates(0, 0, 0, 0).isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(true);
|
|
// different level
|
expect(
|
octreeCoordinates(0, 0, 0, 0).isEqual(octreeCoordinates(1, 0, 0, 0))
|
).toEqual(false);
|
|
// different X
|
expect(
|
octreeCoordinates(1, 0, 0, 0).isEqual(octreeCoordinates(1, 1, 0, 0))
|
).toEqual(false);
|
|
// different Y
|
expect(
|
octreeCoordinates(1, 0, 0, 0).isEqual(octreeCoordinates(1, 0, 1, 0))
|
).toEqual(false);
|
|
// different Z
|
expect(
|
octreeCoordinates(1, 0, 0, 0).isEqual(octreeCoordinates(1, 0, 0, 1))
|
).toEqual(false);
|
|
// mismatched subdivisionScheme
|
expect(
|
quadtreeCoordinates(0, 0, 0).isEqual(octreeCoordinates(0, 0, 0, 0))
|
).toEqual(false);
|
|
// mismatched subtreeLevels
|
var subtreeLevelsA = 2;
|
var subtreeLevelsB = 3;
|
expect(
|
quadtreeCoordinates(0, 0, 0, subtreeLevelsA).isEqual(
|
quadtreeCoordinates(0, 0, 0, subtreeLevelsB)
|
)
|
).toEqual(false);
|
});
|
|
it("isImplicitTilesetRoot works as expected", function () {
|
expect(quadtreeCoordinates(0, 0, 0).isImplicitTilesetRoot()).toEqual(true);
|
expect(quadtreeCoordinates(1, 0, 0).isImplicitTilesetRoot()).toEqual(false);
|
expect(quadtreeCoordinates(2, 0, 0).isImplicitTilesetRoot()).toEqual(false);
|
});
|
|
it("isSubtreeRoot works as expected", function () {
|
expect(quadtreeCoordinates(0, 0, 0).isSubtreeRoot()).toEqual(true);
|
expect(quadtreeCoordinates(1, 0, 0).isSubtreeRoot()).toEqual(false);
|
expect(quadtreeCoordinates(2, 0, 0).isSubtreeRoot()).toEqual(true);
|
expect(quadtreeCoordinates(3, 0, 0).isSubtreeRoot()).toEqual(false);
|
});
|
|
it("isBottomOfSubtree works as expected", function () {
|
expect(quadtreeCoordinates(0, 0, 0).isBottomOfSubtree()).toEqual(false);
|
expect(quadtreeCoordinates(1, 0, 0).isBottomOfSubtree()).toEqual(true);
|
expect(quadtreeCoordinates(2, 0, 0).isBottomOfSubtree()).toEqual(false);
|
expect(quadtreeCoordinates(3, 0, 0).isBottomOfSubtree()).toEqual(true);
|
});
|
|
it("childIndex works as expected for quadtree", function () {
|
// x = 3 = 0b11
|
// y = 2 = 0b10
|
// interleaving the last bit of y, x gives 0b01 = 1
|
expect(quadtreeCoordinates(4, 3, 2).childIndex).toEqual(1);
|
});
|
|
it("childIndex works as expected for octree", function () {
|
// x = 3 = 0b11
|
// y = 2 = 0b10
|
// z = 1 = 0b01
|
// interleaving the last bit of z, y, x gives 0b101 = 5
|
expect(octreeCoordinates(4, 3, 2, 1).childIndex).toEqual(5);
|
});
|
|
it("mortonIndex works as expected for quadtree", function () {
|
// x = 5 = 0b0101
|
// y = 11 = 0b1011
|
// interleave(y, x) = 0b10011011 = 155
|
expect(quadtreeCoordinates(4, 5, 11).mortonIndex).toEqual(155);
|
});
|
|
it("mortonIndex works as expected for octree", function () {
|
// x = 7 = 0b000111
|
// y = 15 = 0b001111
|
// z = 32 = 0b100000
|
// interleave(z, y, x) = 0b100000010011011011 = 132315
|
expect(octreeCoordinates(6, 7, 15, 32).mortonIndex).toEqual(132315);
|
});
|
|
it("fromMortonIndex works as expected for quadtree", function () {
|
var subtreeLevels = 6;
|
|
// 42 = 0b101010
|
// deinterleave2D(42) = [0b111, 0b000] = [7, 0] = [y, x]
|
var coordinates = ImplicitTileCoordinates.fromMortonIndex(
|
ImplicitSubdivisionScheme.QUADTREE,
|
subtreeLevels,
|
3,
|
42
|
);
|
|
expect(
|
coordinates.isEqual(quadtreeCoordinates(3, 0, 7, subtreeLevels))
|
).toEqual(true);
|
});
|
|
it("fromMortonIndex works as expected for octree", function () {
|
var subtreeLevels = 6;
|
|
// 43 = 0b101011
|
// deinterleave3D(43) = [0b10, 0b01, 0b11] = [2, 1, 3] = [z, y, x]
|
var coordinates = ImplicitTileCoordinates.fromMortonIndex(
|
ImplicitSubdivisionScheme.OCTREE,
|
subtreeLevels,
|
2,
|
43
|
);
|
|
expect(
|
coordinates.isEqual(octreeCoordinates(2, 3, 1, 2, subtreeLevels))
|
).toEqual(true);
|
});
|
|
it("tileIndex works as expected for quadtree", function () {
|
// level = 4
|
// x = 5 = 0b0101
|
// y = 11 = 0b1011
|
// interleave(y, x) = 0b10011011 = 155
|
// levelOffset = (4^level-1)/(4-1) = 85
|
// tileIndex = 85 + 155 = 240
|
expect(quadtreeCoordinates(4, 5, 11).tileIndex).toEqual(240);
|
});
|
|
it("tileIndex works as expected for octree", function () {
|
// level = 6
|
// x = 7 = 0b000111
|
// y = 15 = 0b001111
|
// z = 32 = 0b100000
|
// interleave(z, y, x) = 0b100000010011011011 = 132315
|
// levelOffset = (8^level-1)/(8-1) = 37449
|
// tileIndex = 37449 + 132315 = 169764
|
expect(octreeCoordinates(6, 7, 15, 32).tileIndex).toEqual(169764);
|
});
|
|
it("fromTileIndex works as expected for quadtree", function () {
|
var subtreeLevels = 6;
|
|
// level = 3
|
// morton = 0b101010 = 42
|
// deinterleave2D(42) = [0b111, 0b000] = [7, 0] = [y, x]
|
// levelOffset = (4^level-1)/(4-1) = 21
|
// tileIndex = levelOffset + morton = 63
|
var coordinates = ImplicitTileCoordinates.fromTileIndex(
|
ImplicitSubdivisionScheme.QUADTREE,
|
subtreeLevels,
|
63
|
);
|
|
expect(
|
coordinates.isEqual(quadtreeCoordinates(3, 0, 7, subtreeLevels))
|
).toEqual(true);
|
});
|
|
it("fromTileIndex works as expected for octree", function () {
|
var subtreeLevels = 6;
|
|
// level = 2
|
// morton = 0b101011 = 43
|
// deinterleave3D(43) = [0b10, 0b01, 0b11] = [2, 1, 3] = [z, y, x]
|
// levelOffset = (8^level-1)/(8-1) = 9
|
// tileIndex = levelOffset + morton = 52
|
var coordinates = ImplicitTileCoordinates.fromTileIndex(
|
ImplicitSubdivisionScheme.OCTREE,
|
subtreeLevels,
|
52
|
);
|
|
expect(
|
coordinates.isEqual(octreeCoordinates(2, 3, 1, 2, subtreeLevels))
|
).toEqual(true);
|
});
|
|
it("getTemplateValues works as expected for quadtree", function () {
|
var subtreeLevels = 6;
|
expect(
|
quadtreeCoordinates(4, 3, 2, subtreeLevels).getTemplateValues()
|
).toEqual({
|
level: 4,
|
x: 3,
|
y: 2,
|
});
|
});
|
|
it("getTemplateValues works as expected for octree", function () {
|
var subtreeLevels = 6;
|
|
expect(
|
octreeCoordinates(4, 3, 2, 1, subtreeLevels).getTemplateValues()
|
).toEqual({
|
level: 4,
|
x: 3,
|
y: 2,
|
z: 1,
|
});
|
});
|
});
|