UNPKG

dlx

Version:

Knuth's Dancing Links algorithm for the exact cover problem

64 lines (53 loc) 1.7 kB
describe("dlx", function () { var dlx = require("../"); it("loads successfully", function () { expect(dlx).toBeTruthy(); expect(dlx.solve).toBeTruthy(); expect(dlx.solve_sparse_matrix).toBeTruthy(); expect(dlx.solve_tagged_matrix).toBeTruthy(); }) describe("dlx.solve()", function () { it("works in simple cases", function () { // empty matrix has an empty solution expect(dlx.solve([])).toEqual([[]]); // trivially solvable case expect(dlx.solve([[1]])).toEqual([[0]]); // unsolvable case expect(dlx.solve([[0]])).toEqual([]); }); it("finds all solutions", function () { var dense = [[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]; expect(dlx.solve(dense).length).toEqual(5); }); it("returns sorted solutions", function () { var dense = [[0,1],[1,0]]; expect(dlx.solve(dense)).toEqual([[0,1]]); }); it("sorts the solutions", function () { var dense = [[0,1],[1,1],[1,0]]; expect(dlx.solve(dense)).toEqual([[0,2],[1]]); }); }); describe("dlx.solve_sparse_matrix()", function () { it("works in simple cases", function () { expect(dlx.solve_sparse_matrix([])).toEqual([[]]); expect(dlx.solve_sparse_matrix([[0]])).toEqual([[0]]); expect(dlx.solve_sparse_matrix([[1]])).toEqual([]); expect(dlx.solve_sparse_matrix([[0],[1]])).toEqual([[0,1]]); }); }); describe("dlx.solve_tagged_matrix()", function () { it("works", function () { var tagged_matrix = { "row1": ["col1", "col2"], "row2": ["col1", "col3"], "row3": ["col3"], "all": ["col1", "col2", "col3"] }; expect(dlx.solve_tagged_matrix(tagged_matrix)).toEqual([ ["row1", "row3"], ["all"] ]); }); }); });