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