wifi-densepose/vendor/sublinear-time-solver/tests/test-rust-wasm.mjs

109 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Test the Rust-compiled WASM solver specifically
*/
import { WasmSolver } from './wasm-solver/pkg/sublinear_wasm_solver.js';
console.log('🔍 RUST WASM SOLVER TEST');
console.log('═'.repeat(60));
try {
// Test 1: Basic WASM functionality
console.log('\n1⃣ Testing Rust WASM Solver');
console.log('─'.repeat(40));
const wasmSolver = new WasmSolver();
wasmSolver.set_tolerance(1e-6);
wasmSolver.set_max_iterations(100);
// Create test matrix in CSR format
const matrixData = {
values: [4, -1, -1, 4, -1, -1, 4],
col_indices: [0, 1, 0, 1, 2, 1, 2],
row_ptr: [0, 2, 5, 7],
rows: 3,
cols: 3
};
const vectorData = [3, 2, 3];
console.log('✅ WASM solver created');
console.log(' Matrix format: CSR');
console.log(' Matrix size: 3x3');
// Test CSR solve
const start1 = performance.now();
const resultJson = wasmSolver.solve_csr(
JSON.stringify(matrixData),
JSON.stringify(vectorData)
);
const elapsed1 = performance.now() - start1;
const result = JSON.parse(resultJson);
console.log('✅ CSR solve succeeded');
console.log(` Solution: [${result.solution.map(x => x.toFixed(4)).join(', ')}]`);
console.log(` Time: ${elapsed1.toFixed(2)}ms`);
console.log(` Iterations: ${result.iterations}`);
// Test 2: Dense matrix solve
console.log('\n2⃣ Testing Dense Matrix Solve');
console.log('─'.repeat(40));
const denseMatrix = [
[4, -1, 0],
[-1, 4, -1],
[0, -1, 4]
];
const start2 = performance.now();
const denseResultJson = wasmSolver.solve_dense(
JSON.stringify(denseMatrix),
JSON.stringify(vectorData)
);
const elapsed2 = performance.now() - start2;
const denseResult = JSON.parse(denseResultJson);
console.log('✅ Dense solve succeeded');
console.log(` Solution: [${denseResult.solution.map(x => x.toFixed(4)).join(', ')}]`);
console.log(` Time: ${elapsed2.toFixed(2)}ms`);
console.log(` Iterations: ${denseResult.iterations}`);
// Test 3: Neumann series solve
console.log('\n3⃣ Testing Neumann Series');
console.log('─'.repeat(40));
const start3 = performance.now();
const neumannResultJson = wasmSolver.solve_neumann(
JSON.stringify(matrixData),
JSON.stringify(vectorData)
);
const elapsed3 = performance.now() - start3;
const neumannResult = JSON.parse(neumannResultJson);
console.log('✅ Neumann solve succeeded');
console.log(` Solution: [${neumannResult.solution.map(x => x.toFixed(4)).join(', ')}]`);
console.log(` Time: ${elapsed3.toFixed(2)}ms`);
console.log(` Iterations: ${neumannResult.iterations}`);
// Performance comparison
console.log('\n4⃣ Performance Analysis');
console.log('─'.repeat(40));
console.log(`CSR method: ${elapsed1.toFixed(2)}ms`);
console.log(`Dense method: ${elapsed2.toFixed(2)}ms`);
console.log(`Neumann method: ${elapsed3.toFixed(2)}ms`);
const avgTime = (elapsed1 + elapsed2 + elapsed3) / 3;
console.log(`Average time: ${avgTime.toFixed(2)}ms`);
console.log('\n' + '═'.repeat(60));
console.log('✨ SUCCESS: Rust WASM solver is fully functional!');
console.log('The WASM modules are working correctly.');
} catch (error) {
console.error('❌ FAILED:', error.message);
console.error('Stack:', error.stack);
console.log('\n' + '═'.repeat(60));
console.log('⚠️ Rust WASM solver has issues');
process.exit(1);
}