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