moonlight-triangulation-1.0.1.0: bindings/typescript/test/binding.test.ts
import assert from "node:assert/strict";
import test from "node:test";
import { Moonlight, MoonlightError } from "../src/index.js";
test("immutable mesh algebra and dense projection", () => {
const engine = new Moonlight();
const left = engine.delaunay([[0, 0], [2, 0], [0, 2], [2, 2]]);
const right = engine.delaunay([[2, 0], [4, 0], [2, 2], [4, 2]]);
const meshes = [
left,
right,
left.union(right),
left.intersection(right),
left.difference(right),
left.symmetricDifference(right),
left.insertMany([[1, 1], [3, 1]]),
];
const [original, _right, union, intersection, difference, symmetric, extended] = meshes;
assert.equal(original?.vertexCount(), 4);
assert.equal(union?.vertexCount(), 6);
assert.equal(intersection?.vertexCount(), 2);
assert.equal(difference?.vertexCount(), 2);
assert.equal(symmetric?.vertexCount(), 4);
assert.equal(extended?.vertexCount(), 6);
assert.equal(original?.vertices().length, original?.vertexCount());
assert.equal(original?.triangles().length, original?.triangleCount());
meshes.forEach((mesh) => mesh.close());
});
test("invalid coordinate preserves typed witness", () => {
const engine = new Moonlight();
assert.throws(
() => engine.delaunay([[0, 0], [Number.NaN, 1], [1, 0]]),
(failure: unknown) =>
failure instanceof MoonlightError &&
failure.status === 4 &&
failure.code === 1 &&
failure.coordinateError === 1 &&
failure.inputIndex === 1n,
);
});