num.test.js
1.3 kB · javascript · 41 lines
1import { expect, test } from "bun:test";2import * as num from "./num.js";34const bytes = await Bun.file(new URL("./pkg/num/mrlyjs_num_bg.wasm", import.meta.url)).arrayBuffer();5num.initSync({ module: bytes });6const rows = await Bun.file(new URL("../mrlyrs/fixtures/num.json", import.meta.url)).json();7const row = (fn) => rows.find((r) => r.fn === fn);89test("num::factor::factorial", () => {10 const r = row("num::factor::factorial");11 expect(num.factor.factorial(r.in.number)).toBe(r.out);12});1314test("num::factor::gcd", () => {15 const r = row("num::factor::gcd");16 expect(r.in.pairs.map(([a, b]) => num.factor.gcd(a, b))).toEqual(r.out);17});1819test("num::factor::divisors", () => {20 const r = row("num::factor::divisors");21 expect(Array.from(num.factor.divisors(r.in.number), Number)).toEqual(r.out);22});2324test("num::factor::mobius_sieve", () => {25 const r = row("num::factor::mobius_sieve");26 expect(Array.from(num.factor.mobius_sieve(r.in.limit))).toEqual(r.out);27});2829test("num::prime::is_prime", () => {30 const r = row("num::prime::is_prime");31 const kept = [];32 for (let n = r.in.from; n <= r.in.to; n++) {33 if (num.prime.is_prime(n)) kept.push(n);34 }35 expect(kept).toEqual(r.out);36});3738test("num::series::zeta", () => {39 const r = row("num::series::zeta");40 expect(num.series.zeta(r.in.s, r.in.terms)).toBeCloseTo(r.out, 12);41});