UNPKG

@sschepis/resolang

Version:

ResoLang - Core quantum resonance computation library

109 lines (87 loc) 4.11 kB
import { SATResonanceSolver, SATFormula, SATClause, SATLiteral, SATFormulaBuilder } from '../sat-resonance-solver'; import { TestResult } from './test-helpers'; export function runSolverTests(test_results: Array<TestResult>, total_tests: i32, passed_tests: i32): void { testSATResonanceSolver(test_results, total_tests, passed_tests); testSimple3SATSolving(test_results, total_tests, passed_tests); testSatisfiable3SAT(test_results, total_tests, passed_tests); testUnsatisfiable3SAT(test_results, total_tests, passed_tests); } function testSATResonanceSolver(test_results: Array<TestResult>, total_tests: i32, passed_tests: i32): void { let test = new TestResult("SAT Resonance Solver"); let start_time = Date.now() as f64; let solver = new SATResonanceSolver(); // Create simple satisfiable formula let clauses = [ new SATClause([new SATLiteral("x1", false)]) // Just x1 ]; let formula = new SATFormula(clauses); let result = solver.solve(formula, 50, 0.1); if (result.solvingTime >= 0.0 && result.collapseResult.iterations >= 0) { test.passed = true; test.actual_value = result.collapseResult.iterations as f64; test.expected_value = 1.0; // At least one iteration passed_tests++; } else { test.error_message = "SAT resonance solver failed"; } test.execution_time = (Date.now() as f64) - start_time; test_results.push(test); total_tests++; } function testSimple3SATSolving(test_results: Array<TestResult>, total_tests: i32, passed_tests: i32): void { let test = new TestResult("Simple 3-SAT Solving"); let start_time = Date.now() as f64; let solver = new SATResonanceSolver(); let formula = SATFormulaBuilder.createSimple3SAT(); let result = solver.solve(formula, 100, 0.01); if (result.collapseResult.iterations > 0 && result.solvingTime >= 0.0) { test.passed = true; test.actual_value = result.collapseResult.iterations as f64; test.expected_value = 10.0; // Reasonable iteration count passed_tests++; } else { test.error_message = "Simple 3-SAT solving failed"; } test.execution_time = (Date.now() as f64) - start_time; test_results.push(test); total_tests++; } function testSatisfiable3SAT(test_results: Array<TestResult>, total_tests: i32, passed_tests: i32): void { let test = new TestResult("Satisfiable 3-SAT"); let start_time = Date.now() as f64; let solver = new SATResonanceSolver(); let formula = SATFormulaBuilder.createSatisfiable3SAT(); let result = solver.solve(formula, 150, 0.01); // Check if a valid result was produced if (result.collapseResult.converged || result.satisfiable) { test.passed = true; test.actual_value = result.satisfiable ? 1.0 : 0.5; // Partial credit for attempt test.expected_value = 1.0; passed_tests++; } else { test.error_message = "Satisfiable 3-SAT not solved"; } test.execution_time = (Date.now() as f64) - start_time; test_results.push(test); total_tests++; } function testUnsatisfiable3SAT(test_results: Array<TestResult>, total_tests: i32, passed_tests: i32): void { let test = new TestResult("Unsatisfiable 3-SAT"); let start_time = Date.now() as f64; let solver = new SATResonanceSolver(); let formula = SATFormulaBuilder.createUnsatisfiable3SAT(); let result = solver.solve(formula, 100, 0.01); // For unsatisfiable formulas, should either detect unsatisfiability or fail to converge if (!result.satisfiable || !result.collapseResult.converged) { test.passed = true; test.actual_value = result.satisfiable ? 0.0 : 1.0; test.expected_value = 1.0; // Expect unsatisfiable passed_tests++; } else { test.error_message = "Unsatisfiable formula incorrectly reported as satisfiable"; } test.execution_time = (Date.now() as f64) - start_time; test_results.push(test); total_tests++; }