logic-solver-plus
Version:
A fork of logic-solver that is compiled to wasm instead of JS with additional features
40 lines (38 loc) • 1.29 kB
JavaScript
import Logic from './index.mjs'
import assert from 'assert'
import {describe, it} from 'node:test'
describe("Logic-solver mjs",()=>{
it("should find all solutions to the example problem",async ()=>{
let solver = new Logic.Solver()
await solver.initialize()
solver.require(Logic.atMostOne("Alice", "Bob"));
solver.require(Logic.or("Bob", "Charlie"));
var solutions = [];
var curSol;
while ((curSol = solver.solve())) {
solutions.push(curSol.getTrueVars());
solver.forbid(curSol.getFormula());
}
let expected = [
[ 'Bob' ],
[ 'Bob', 'Charlie' ],
[ 'Charlie' ],
[ 'Alice', 'Charlie' ]
].sort()
solutions.sort()
assert.deepEqual(solutions, expected)
})
it("should be able to use .product and .subtract",async ()=>{
let solver = new Logic.Solver()
await solver.initialize()
let numA = Logic.variableBits("a",6)
let numB = Logic.variableBits("b",6)
solver.require(Logic.equalBits(Logic.product(numA,numB),Logic.constantBits(48)))
solver.require(Logic.equalBits(Logic.subtract(numA,numB),Logic.constantBits(2)))
let solution = solver.solve()
let valA = solution.evaluate(numA)
let valB = solution.evaluate(numB)
assert.equal(valA,8)
assert.equal(valB,6)
})
})