packages feed

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,
  );
});