math.test.js

2.1 kB · javascript · 52 lines

1import { expect, test } from "bun:test";2import * as math from "./math.js";34const bytes = await Bun.file(new URL("./pkg/math/mrlyjs_math_bg.wasm", import.meta.url)).arrayBuffer();5math.initSync({ module: bytes });6const rows = await Bun.file(new URL("../mrlyrs/fixtures/math.json", import.meta.url)).json();7const row = (fn) => rows.find((r) => r.fn === fn);89test("math::atoms::carpet_2d", () => {10  const r = row("math::atoms::carpet_2d");11  const seed = math.atoms.carpet_2d(r.in.n);12  expect(seed.shape).toEqual(r.out.shape);13  expect(Array.from(seed.data)).toEqual(r.out.data);14});1516test("math::two::carpet", () => {17  const r = row("math::two::carpet");18  const cell = math.two.carpet(r.in.number, r.in.level);19  expect(JSON.parse(math.two.to_json(cell))).toEqual(r.out);20});2122test("math::two::census::census", () => {23  const r = row("math::two::census::census");24  const census = math.two.census(math.two.carpet(r.in.cell.in.number, r.in.cell.in.level));25  expect({ ...census, perimeter: Number(census.perimeter) }).toEqual(r.out);26});2728test("math::counts::fill", () => {29  const r = row("math::counts::fill");30  expect(math.counts.fill(r.in.code, r.in.number, r.in.dimension, r.in.level, r.in.base)).toBe(r.out);31});3233test("math::bang::bang", () => {34  const r = row("math::bang::bang");35  expect(math.bang.bang(r.in.dimension).distinct()).toBe(r.out);36});3738test("math::three::census::census", () => {39  const r = row("math::three::census::census");40  const census = math.three.census(math.three.carpet(r.in.cell.in.number, r.in.cell.in.level));41  expect(String(census.surface)).toBe(r.out);42});4344test("math::spectrum::laplacian_spectrum", () => {45  const r = row("math::spectrum::laplacian_spectrum");46  const network = new math.graph.Network(r.in.network.dim);47  for (const position of r.in.network.nodes) network.add_node(position);48  for (const [parent, child, radius] of r.in.network.branches) network.add_branch(parent, child, radius);49  const spectrum = Array.from(math.spectrum.laplacian_spectrum(network, r.in.normalised));50  expect(spectrum.length).toBe(r.out.length);51  spectrum.forEach((value, i) => expect(value).toBeCloseTo(r.out[i], 12));52});