mapillary-js
Version:
WebGL JavaScript library for displaying street level imagery from mapillary.com
238 lines (185 loc) • 9.6 kB
text/typescript
import {PointsGeometry, GeometryTagError} from "../../../src/Component";
import {Transform} from "../../../src/Geo";
import TransformHelper from "../../helper/FrameHelper.spec";
describe("PointsGeometry.ctor", () => {
it("should be defined", () => {
let pointsGeometry: PointsGeometry = new PointsGeometry([[0.5, 0.5], [0.7, 0.7]]);
expect(pointsGeometry).toBeDefined();
});
it("points should be set", () => {
let pointsGeometry: PointsGeometry = new PointsGeometry([[0.5, 0.6], [0.7, 0.8]]);
expect(pointsGeometry.points.length).toBe(2);
expect(pointsGeometry.points[0][0]).toBe(0.5);
expect(pointsGeometry.points[0][1]).toBe(0.6);
expect(pointsGeometry.points[1][0]).toBe(0.7);
expect(pointsGeometry.points[1][1]).toBe(0.8);
});
it("should throw if number of points is less than two", () => {
expect(() => { return new PointsGeometry([[0.5, 0.6]]); }).toThrowError(GeometryTagError);
});
it("should throw if basic coord is below supported range", () => {
expect(() => { return new PointsGeometry([[-0.5, 0.6], [0.7, 0.8]]); }).toThrowError(GeometryTagError);
expect(() => { return new PointsGeometry([[0.5, -0.6], [0.7, 0.8]]); }).toThrowError(GeometryTagError);
expect(() => { return new PointsGeometry([[0.5, 0.6], [-0.7, 0.8]]); }).toThrowError(GeometryTagError);
expect(() => { return new PointsGeometry([[0.5, 0.6], [0.7, -0.8]]); }).toThrowError(GeometryTagError);
});
it("should throw if basic coord is above supported range", () => {
expect(() => { return new PointsGeometry([[1.5, 0.6], [0.7, 0.8]]); }).toThrowError(GeometryTagError);
expect(() => { return new PointsGeometry([[0.5, 1.6], [0.7, 0.8]]); }).toThrowError(GeometryTagError);
expect(() => { return new PointsGeometry([[0.5, 0.6], [1.7, 0.8]]); }).toThrowError(GeometryTagError);
expect(() => { return new PointsGeometry([[0.5, 0.6], [0.7, 1.8]]); }).toThrowError(GeometryTagError);
});
});
describe("PointsGeometry.getCentroid2d", () => {
it("should get an array that is the average of the points", () => {
const points: number[][] = [[0.5, 0.6], [0.8, 0.9]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const transform: Transform = new TransformHelper().createTransform();
const result: number[] = pointsGeometry.getCentroid2d(transform);
expect(result).not.toBe(points[0]);
expect(result).not.toBe(points[1]);
expect(result).toEqual([0.65, 0.75]);
});
it("should get an array that is the average of the points irrespective of order", () => {
const points: number[][] = [[0.8, 0.9], [0.5, 0.6]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const transform: Transform = new TransformHelper().createTransform();
const result: number[] = pointsGeometry.getCentroid2d(transform);
expect(result).not.toBe(points[0]);
expect(result).not.toBe(points[1]);
expect(result).toEqual([0.65, 0.75]);
});
it("should get centroid based on smallest rectangle containing all points", () => {
const points: number[][] = [[0.5, 0.6], [0.8, 0.9], [0.55, 0.65], [0.55, 0.65], [0.55, 0.65]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const transform: Transform = new TransformHelper().createTransform();
const result: number[] = pointsGeometry.getCentroid2d(transform);
expect(result).not.toBe(points[0]);
expect(result).not.toBe(points[1]);
expect(result).toEqual([0.65, 0.75]);
});
});
describe("PointsGeometry.getRect2d", () => {
it("should get the rectangle based on the two points", () => {
const points: number[][] = [[0.5, 0.6], [0.8, 0.9]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const transform: Transform = new TransformHelper().createTransform();
const result: number[] = pointsGeometry.getRect2d(transform);
expect(result.length).toBe(4);
expect(result).toEqual([
points[0][0],
points[0][1],
points[1][0],
points[1][1],
]);
});
it("should get the rectangle based on the two points irrespective of order", () => {
const points: number[][] = [[0.8, 0.9], [0.5, 0.6]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const transform: Transform = new TransformHelper().createTransform();
const result: number[] = pointsGeometry.getRect2d(transform);
expect(result.length).toBe(4);
expect(result).toEqual([
points[1][0],
points[1][1],
points[0][0],
points[0][1],
]);
});
it("should get the smallest rectangle containing all points", () => {
const points: number[][] = [[0.5, 0.6], [0.8, 0.9], [0.55, 0.65], [0.55, 0.65], [0.55, 0.65]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const transform: Transform = new TransformHelper().createTransform();
const result: number[] = pointsGeometry.getRect2d(transform);
expect(result.length).toBe(4);
expect(result).toEqual([
points[0][0],
points[0][1],
points[1][0],
points[1][1],
]);
});
it("should get the smallest wrapping rectangle containing all points for pano", () => {
const points: number[][] = [[0.9, 0.6], [0.2, 0.8]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const helper: TransformHelper = new TransformHelper();
const transform: Transform = helper.createTransform(helper.createFullGPano());
const result: number[] = pointsGeometry.getRect2d(transform);
expect(result.length).toBe(4);
expect(result).toEqual([
points[0][0],
points[0][1],
points[1][0],
points[1][1],
]);
});
it("should get the smallest wrapping rectangle containing all points for pano irrespective of order", () => {
const points: number[][] = [[0.2, 0.8], [0.9, 0.6]];
const pointsGeometry: PointsGeometry = new PointsGeometry(points);
const helper: TransformHelper = new TransformHelper();
const transform: Transform = helper.createTransform(helper.createFullGPano());
const result: number[] = pointsGeometry.getRect2d(transform);
expect(result.length).toBe(4);
expect(result).toEqual([
points[1][0],
points[1][1],
points[0][0],
points[0][1],
]);
});
});
describe("PointsGeometry.setVertex2d", () => {
it("should set point to value", () => {
const original: number[][] = [[0.1, 0.2], [0.3, 0.4]];
const pointGeometry: PointsGeometry = new PointsGeometry(original);
const point: number[] = [0.5, 0.6];
const transform: Transform = new TransformHelper().createTransform();
pointGeometry.setVertex2d(1, point, transform);
expect(pointGeometry.points[1][0]).toBe(point[0]);
expect(pointGeometry.points[1][1]).toBe(point[1]);
});
it("should clamp negative input value to [0, 1] interval", () => {
const original: number[][] = [[0.1, 0.2], [0.3, 0.4]];
const pointGeometry: PointsGeometry = new PointsGeometry(original);
const point: number[] = [-1, -1];
const transform: Transform = new TransformHelper().createTransform();
pointGeometry.setVertex2d(1, point, transform);
expect(pointGeometry.points[1][0]).toBe(0);
expect(pointGeometry.points[1][1]).toBe(0);
});
it("should clamp input value larger than 1 to [0, 1] interval", () => {
const original: number[][] = [[0.1, 0.2], [0.3, 0.4]];
const pointGeometry: PointsGeometry = new PointsGeometry(original);
const point: number[] = [2, 2];
const transform: Transform = new TransformHelper().createTransform();
pointGeometry.setVertex2d(1, point, transform);
expect(pointGeometry.points[1][0]).toBe(1);
expect(pointGeometry.points[1][1]).toBe(1);
});
});
describe("PointsGeometry.removePoint2d", () => {
it("should reomve point according to index", () => {
const original: number[][] = [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]];
const pointGeometry: PointsGeometry = new PointsGeometry(original);
pointGeometry.removePoint2d(1);
expect(pointGeometry.points.length).toBe(2);
expect(pointGeometry.points[0][0]).toBe(0.1);
expect(pointGeometry.points[0][1]).toBe(0.2);
expect(pointGeometry.points[1][0]).toBe(0.5);
expect(pointGeometry.points[1][1]).toBe(0.6);
});
});
describe("PointsGeometry.removePoint2d", () => {
it("should reomve point according to index", () => {
const original: number[][] = [[0.1, 0.2], [0.3, 0.4]];
const pointGeometry: PointsGeometry = new PointsGeometry(original);
pointGeometry.addPoint2d([0.5, 0.6]);
expect(pointGeometry.points.length).toBe(3);
expect(pointGeometry.points[0][0]).toBe(0.1);
expect(pointGeometry.points[0][1]).toBe(0.2);
expect(pointGeometry.points[1][0]).toBe(0.3);
expect(pointGeometry.points[1][1]).toBe(0.4);
expect(pointGeometry.points[2][0]).toBe(0.5);
expect(pointGeometry.points[2][1]).toBe(0.6);
});
});