/* eslint-disable new-cap */
|
/* eslint-disable no-undef */
|
import { Cartesian3 } from "../../Source/Cesium.js";
|
import { FeatureDetection } from "../../Source/Cesium.js";
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
import { S2Cell } from "../../Source/Cesium.js";
|
|
describe("Core/S2Cell", function () {
|
if (!FeatureDetection.supportsBigInt()) {
|
return;
|
}
|
|
it("constructor", function () {
|
var cell = new S2Cell(BigInt("3458764513820540928"));
|
expect(cell._cellId).toEqual(BigInt("3458764513820540928"));
|
});
|
|
it("throws for invalid cell ID in constructor", function () {
|
// eslint-disable-next-line new-cap
|
expect(function () {
|
S2Cell(BigInt(-1));
|
}).toThrowDeveloperError();
|
});
|
|
it("throws for missing cell ID in constructor", function () {
|
// eslint-disable-next-line new-cap
|
expect(function () {
|
S2Cell();
|
}).toThrowDeveloperError();
|
});
|
|
it("creates cell from valid token", function () {
|
var cell = S2Cell.fromToken("3");
|
expect(cell._cellId).toEqual(BigInt("3458764513820540928"));
|
});
|
|
it("throws for creating cell from invalid token", function () {
|
expect(function () {
|
S2Cell.fromToken("XX");
|
}).toThrowDeveloperError();
|
});
|
|
it("creates cell from valid face, position, level", function () {
|
var cell = S2Cell.fromFacePositionLevel(0, BigInt(0), 1);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("04");
|
cell = S2Cell.fromFacePositionLevel(BigInt(0), BigInt(1), 1);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("0c");
|
cell = S2Cell.fromFacePositionLevel(BigInt(0), BigInt(2), 1);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("14");
|
cell = S2Cell.fromFacePositionLevel(BigInt(0), BigInt(3), 1);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("1c");
|
cell = S2Cell.fromFacePositionLevel(2, BigInt("0"), 1);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("44");
|
cell = S2Cell.fromFacePositionLevel(4, BigInt("0"), 1);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("84");
|
cell = S2Cell.fromFacePositionLevel(1, BigInt("538969508876688737"), 30);
|
expect(S2Cell.getTokenFromId(cell._cellId)).toEqual("2ef59bd352b93ac3");
|
});
|
|
it("throws for creating cell from invalid face, position, level", function () {
|
expect(function () {
|
S2Cell.fromFacePositionLevel(-1, BigInt(0), 1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
S2Cell.fromFacePositionLevel(6, BigInt(0), 1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
S2Cell.fromFacePositionLevel(0, BigInt(-1), 1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
S2Cell.fromFacePositionLevel(0, BigInt(4), 1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
S2Cell.fromFacePositionLevel(0, BigInt(0), -1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
S2Cell.fromFacePositionLevel(0, BigInt(0), 31);
|
}).toThrowDeveloperError();
|
});
|
|
it("accepts valid token", function () {
|
var tokenValidity = S2Cell.isValidToken("1");
|
expect(tokenValidity).toBe(true);
|
|
tokenValidity = S2Cell.isValidToken("2ef59bd34");
|
expect(tokenValidity).toBe(true);
|
|
tokenValidity = S2Cell.isValidToken("2ef59bd352b93ac3");
|
expect(tokenValidity).toBe(true);
|
});
|
|
it("rejects token of invalid value", function () {
|
var tokenValidity = S2Cell.isValidToken("LOL");
|
expect(tokenValidity).toBe(false);
|
|
tokenValidity = S2Cell.isValidToken("----");
|
expect(tokenValidity).toBe(false);
|
|
tokenValidity = S2Cell.isValidToken("9".repeat(17));
|
expect(tokenValidity).toBe(false);
|
|
tokenValidity = S2Cell.isValidToken("0");
|
expect(tokenValidity).toBe(false);
|
|
tokenValidity = S2Cell.isValidToken("🤡");
|
expect(tokenValidity).toBe(false);
|
});
|
|
it("throws for token of invalid type", function () {
|
expect(function () {
|
S2Cell.isValidToken(420);
|
}).toThrowDeveloperError();
|
expect(function () {
|
S2Cell.isValidToken({});
|
}).toThrowDeveloperError();
|
});
|
|
it("accepts valid cell ID", function () {
|
var cellIdValidity = S2Cell.isValidId(BigInt("3383782026967071428"));
|
expect(cellIdValidity).toBe(true);
|
|
cellIdValidity = S2Cell.isValidId(BigInt("3458764513820540928"));
|
expect(cellIdValidity).toBe(true);
|
});
|
|
it("rejects cell ID of invalid value", function () {
|
var cellIdValidity = S2Cell.isValidId(BigInt("0"));
|
expect(cellIdValidity).toBe(false);
|
|
cellIdValidity = S2Cell.isValidId(BigInt("-1"));
|
expect(cellIdValidity).toBe(false);
|
|
cellIdValidity = S2Cell.isValidId(BigInt("18446744073709551619995"));
|
expect(cellIdValidity).toBe(false);
|
|
cellIdValidity = S2Cell.isValidId(BigInt("222446744073709551619995"));
|
expect(cellIdValidity).toBe(false);
|
|
cellIdValidity = S2Cell.isValidId(
|
BigInt(
|
"0b0010101000000000000000000000000000000000000000000000000000000000"
|
)
|
);
|
expect(cellIdValidity).toBe(false);
|
});
|
|
it("throws for cell ID of invalid type", function () {
|
expect(function () {
|
S2Cell.isValidId(420);
|
}).toThrowDeveloperError();
|
expect(function () {
|
S2Cell.isValidId("2ef");
|
}).toThrowDeveloperError();
|
});
|
|
it("correctly converts cell ID to token", function () {
|
expect(S2Cell.getIdFromToken("04")).toEqual(BigInt("288230376151711744"));
|
expect(S2Cell.getIdFromToken("3")).toEqual(BigInt("3458764513820540928"));
|
expect(S2Cell.getIdFromToken("2ef59bd352b93ac3")).toEqual(
|
BigInt("3383782026967071427")
|
);
|
});
|
|
it("correctly converts token to cell ID", function () {
|
expect(S2Cell.getTokenFromId(BigInt("288230376151711744"))).toEqual("04");
|
expect(S2Cell.getTokenFromId(BigInt("3458764513820540928"))).toEqual("3");
|
expect(S2Cell.getTokenFromId(BigInt("3383782026967071427"))).toEqual(
|
"2ef59bd352b93ac3"
|
);
|
});
|
|
it("gets correct level of cell", function () {
|
expect(S2Cell.getLevel(BigInt("3170534137668829184"))).toEqual(1);
|
expect(S2Cell.getLevel(BigInt("3383782026921377792"))).toEqual(16);
|
expect(S2Cell.getLevel(BigInt("3383782026967071427"))).toEqual(30);
|
});
|
|
it("throws on missing/invalid cell ID in getting level of cell", function () {
|
expect(function () {
|
S2Cell.getLevel(BigInt("-1"));
|
}).toThrowDeveloperError();
|
expect(function () {
|
S2Cell.getLevel();
|
}).toThrowDeveloperError();
|
expect(function () {
|
S2Cell.getLevel(BigInt("3170534137668829184444"));
|
}).toThrowDeveloperError();
|
expect(function () {
|
S2Cell.getLevel(BigInt(0));
|
}).toThrowDeveloperError();
|
});
|
|
it("gets correct parent of cell", function () {
|
var cell = new S2Cell(BigInt("3383782026967515136"));
|
var parent = cell.getParent();
|
expect(parent._cellId).toEqual(BigInt("3383782026971709440"));
|
});
|
|
it("gets correct parent of cell at given level", function () {
|
var cell = new S2Cell(BigInt("3383782026967056384"));
|
var parent = cell.getParentAtLevel(21);
|
expect(parent._cellId).toEqual(BigInt("3383782026967252992"));
|
parent = cell.getParentAtLevel(7);
|
expect(parent._cellId).toEqual(BigInt("3383821801271328768"));
|
parent = cell.getParentAtLevel(0);
|
expect(parent._cellId).toEqual(BigInt("3458764513820540928"));
|
});
|
|
it("throws on getting parent of cell at invalid level", function () {
|
var cell = new S2Cell(BigInt("3458764513820540928"));
|
expect(function () {
|
cell.getParentAtLevel(0);
|
}).toThrowDeveloperError();
|
|
cell = new S2Cell(BigInt("3383782026967072768"));
|
expect(function () {
|
cell.getParentAtLevel(-1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
cell.getParentAtLevel(30);
|
}).toThrowDeveloperError();
|
});
|
|
it("throws on getting parent of level 0 cells", function () {
|
var cell = S2Cell.fromToken("3");
|
expect(function () {
|
cell.getParent();
|
}).toThrowDeveloperError();
|
});
|
|
it("gets correct children of cell", function () {
|
var cell = new S2Cell(BigInt("3383782026971709440"));
|
var expectedChildCellIds = [
|
BigInt(3383782026959126528),
|
BigInt(3383782026967515136),
|
BigInt(3383782026975903744),
|
BigInt(3383782026984292352),
|
];
|
var i;
|
for (i = 0; i < 4; i++) {
|
expect(cell.getChild(i)._cellId).toEqual(expectedChildCellIds[i]);
|
}
|
});
|
|
it("throws on invalid child index in getting children of cell", function () {
|
var cell = new S2Cell(BigInt("3383782026971709440"));
|
expect(function () {
|
cell.getChild(4);
|
}).toThrowDeveloperError();
|
expect(function () {
|
cell.getChild(-1);
|
}).toThrowDeveloperError();
|
});
|
|
it("throws on getting children of level 30 cell", function () {
|
var cell = new S2Cell(BigInt("3383782026967071427"));
|
expect(cell._level).toEqual(30);
|
expect(function () {
|
cell.getChild(0);
|
}).toThrowDeveloperError();
|
});
|
|
it("gets correct center of cell", function () {
|
expect(S2Cell.fromToken("1").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(0.0, 0.0),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("3").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(90.0, 0.0),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("5").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(-180.0, 90.0),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("7").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(-180.0, 0.0),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("9").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(-90.0, 0.0),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("b").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(0.0, -90.0),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("2ef59bd352b93ac3").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(105.64131803774308, -10.490091033598308),
|
CesiumMath.EPSILON15
|
);
|
expect(S2Cell.fromToken("1234567").getCenter()).toEqualEpsilon(
|
Cartesian3.fromDegrees(9.868307318504081, 27.468392925827605),
|
CesiumMath.EPSILON15
|
);
|
});
|
|
it("throws on invalid vertex index", function () {
|
var cell = new S2Cell(BigInt("3383782026971709440"));
|
expect(function () {
|
cell.getVertex(-1);
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
cell.getVertex(4);
|
}).toThrowDeveloperError();
|
});
|
|
it("gets correct vertices of cell", function () {
|
var cell = S2Cell.fromToken("2ef59bd352b93ac3");
|
expect(cell.getVertex(0)).toEqualEpsilon(
|
Cartesian3.fromDegrees(105.64131799299665, -10.490091077431977),
|
CesiumMath.EPSILON15
|
);
|
expect(cell.getVertex(1)).toEqualEpsilon(
|
Cartesian3.fromDegrees(105.64131808248949, -10.490091072946313),
|
CesiumMath.EPSILON15
|
);
|
expect(cell.getVertex(2)).toEqualEpsilon(
|
Cartesian3.fromDegrees(105.64131808248948, -10.490090989764633),
|
CesiumMath.EPSILON15
|
);
|
expect(cell.getVertex(3)).toEqualEpsilon(
|
Cartesian3.fromDegrees(105.64131799299665, -10.4900909942503),
|
CesiumMath.EPSILON15
|
);
|
});
|
});
|