gen.test.js

2.3 kB · javascript · 58 lines

1import { expect, test } from "bun:test";2import * as gen from "./gen.js";34const bytes = await Bun.file(new URL("./pkg/gen/mrlyjs_gen_bg.wasm", import.meta.url)).arrayBuffer();5gen.initSync({ module: bytes });6const rows = await Bun.file(new URL("../mrlyrs/fixtures/gen.json", import.meta.url)).json();7const row = (fn) => rows.find((r) => r.fn === fn);8const sha256 = (bytes) => new Bun.CryptoHasher("sha256").update(bytes).digest("hex");9const tileConfig = () => ({ groups: gen.Group.all(), catalog: "Classics", min_size: 3, max_size: 9, parity: "Odds" });1011test("gen::name::Tile::recipe", () => {12  const r = row("gen::name::Tile::recipe");13  const name = gen.name.Tile.from_json(r.in.name);14  const tile = name.recipe();15  const recipe = {16    group: tile.group,17    factor: tile.factor,18    sources: tile.sources.map((source) => ({ code: String(source.code) })),19    numbers: Array.from(tile.numbers),20    levels: Array.from(tile.levels),21    rotations: Array.from(tile.rotations),22    invert: tile.invert,23    flip: tile.flip,24    width: tile.width,25    height: tile.height,26  };27  expect(recipe).toEqual(r.out.recipe);28  expect(name.to_json()).toBe(r.out.json);29  expect(name.to_id()).toBe(r.out.id);30});3132test("gen::draw::create", () => {33  const r = row("gen::draw::create");34  const tile = gen.build.create_2d(tileConfig(), new gen.Rng(r.in.seed));35  expect(gen.name.Tile.of(tile).to_json()).toBe(r.out);36});3738test("gen::build::build_2d", () => {39  const r = row("gen::build::build_2d");40  const cell = gen.build.build_2d(gen.name.Tile.from_json(r.in.tile.in.name).recipe());41  expect(cell.shape).toEqual([r.out.height, r.out.width]);42  expect(Array.from(cell.types)).toEqual(r.out.types.flat());43});4445test("gen::variation::create", () => {46  const r = row("gen::variation::create");47  const config = { tile: tileConfig(), paint: {}, files: [[1, 1], [3, 3], [5, 5]] };48  const variation = gen.variation.create(config, new gen.Rng(r.in.seed));49  expect(variation.key).toBe(r.out.key);50  expect(String(variation.seed)).toBe(r.out.seed);51  expect(variation.edition).toBe(r.out.edition);52  expect(gen.name.Tile.of(variation.tile).to_json()).toBe(r.out.tile);53});5455test("gen::background", () => {56  const r = row("gen::background");57  expect(sha256(gen.background(r.in.seed, r.in.width, r.in.height))).toBe(r.out);58});