Refactor (1)

This commit is contained in:
2025-09-19 18:54:12 +09:00
committed by cannorin
parent 6b15542c40
commit c3b1bf39a4
26 changed files with 1684 additions and 105 deletions

View File

@@ -0,0 +1,30 @@
import { expect, test } from "vitest";
import { validWorlds } from "../sat";
import { validWorlds as validWorldsNaive } from "../semantics";
import { prettyPrint } from "../syntax";
import { randomFormula, randomFrame, testFormulas } from "./utils";
const elapsed = <T>(f: () => T) => {
const start = Date.now();
const value = f();
const end = Date.now();
return { value, elapsed: end - start };
};
for (const fml of testFormulas.concat(
[...Array(50)].map(() => randomFormula()),
)) {
test(`SAT works for ${prettyPrint(fml)}`, () => {
const count = 100;
let diff = 0;
for (let i = 0; i < count; i++) {
const frame = randomFrame();
const expected = elapsed(() => validWorldsNaive(frame, fml));
const actual = elapsed(() => validWorlds(frame, fml));
expect(actual.value.sort()).toStrictEqual(expected.value.sort());
diff += actual.elapsed - expected.elapsed;
}
expect(diff / count).toBeLessThanOrEqual(10);
});
}