import { describe, test, expect } from "bun:test"; import { SudokuGenerator } from "./SudokuGenerator"; describe("SudokuGenerator", () => { test("generates an 81-character string of only digits 1–9 for solution", () => { const generator = new SudokuGenerator(); const solution = generator.getSolution(); expect(solution).toHaveLength(81); expect(/^[1-9]+$/.test(solution)).toBe(true); }); test("generates 10 valid boards", () => { for (let i = 0; i < 10; i++) { const generator = new SudokuGenerator(); const solution = generator.getSolution(); expect(solution).toHaveLength(81); expect(/^[1-9]+$/.test(solution)).toBe(true); } }); test("generates 100 valid boards", () => { for (let i = 0; i < 100; i++) { const generator = new SudokuGenerator(); const solution = generator.getSolution(); expect(solution).toHaveLength(81); expect(/^[1-9]+$/.test(solution)).toBe(true); } }); test("generates puzzle with correct number of empty cells", () => { const easyGen = new SudokuGenerator(); easyGen.generate('easy'); const easyPuzzle = easyGen.getPuzzle(); const easyEmpty = (easyPuzzle.match(/\./g) || []).length; expect(easyEmpty).toBe(40); const mediumGen = new SudokuGenerator(); mediumGen.generate('medium'); const mediumPuzzle = mediumGen.getPuzzle(); const mediumEmpty = (mediumPuzzle.match(/\./g) || []).length; expect(mediumEmpty).toBe(50); const hardGen = new SudokuGenerator(); hardGen.generate('hard'); const hardPuzzle = hardGen.getPuzzle(); const hardEmpty = (hardPuzzle.match(/\./g) || []).length; expect(hardEmpty).toBe(60); }); test("puzzle and solution have same givens in same positions", () => { const generator = new SudokuGenerator(); generator.generate('medium'); const puzzle = generator.getPuzzle(); const solution = generator.getSolution(); for (let i = 0; i < 81; i++) { if (puzzle[i] !== '.') { expect(puzzle[i]).toBe(solution[i]); } } }); });