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