Squashed 'vendor/ruvector/' content from commit b64c2172

git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
ruv
2026-02-28 14:39:40 -05:00
commit d803bfe2b1
7854 changed files with 3522914 additions and 0 deletions

View File

@@ -0,0 +1,113 @@
#!/usr/bin/env node
/**
* SQL Test Script - Test CREATE TABLE and SQL operations in WASM
*/
import { readFile } from 'fs/promises';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
async function main() {
console.log('╔════════════════════════════════════════════════════════════╗');
console.log('║ RvLite WASM SQL Test Suite ║');
console.log('╚════════════════════════════════════════════════════════════╝\n');
// Load WASM
const wasmPath = join(__dirname, '../public/pkg/rvlite_bg.wasm');
const wasmBytes = await readFile(wasmPath);
const { default: initRvLite, RvLite, RvLiteConfig } = await import('../public/pkg/rvlite.js');
await initRvLite(wasmBytes);
console.log('WASM loaded successfully!\n');
const config = new RvLiteConfig(384);
const db = new RvLite(config);
const tests = [];
function test(name, fn) {
try {
fn();
tests.push({ name, passed: true });
console.log(` \x1b[32m✓\x1b[0m ${name}`);
} catch (error) {
tests.push({ name, passed: false, error: error.message });
console.log(` \x1b[31m✗\x1b[0m ${name}`);
console.log(` Error: ${error.message}`);
}
}
console.log('═══════════════════════════════════════════════════════════════');
console.log('SQL Parser Tests');
console.log('═══════════════════════════════════════════════════════════════');
// Test 1: CREATE TABLE with VECTOR column (3-dimensional for test)
test('CREATE TABLE with VECTOR', () => {
const result = db.sql("CREATE TABLE docs (id TEXT, content TEXT, embedding VECTOR(3))");
console.log(' Result:', JSON.stringify(result));
});
// Test 2: INSERT with correct vector dimensions
test('INSERT INTO table', () => {
const result = db.sql("INSERT INTO docs (id, content, embedding) VALUES ('doc1', 'hello world', [1.0, 2.0, 3.0])");
console.log(' Result:', JSON.stringify(result));
});
// Test 3: INSERT another vector
test('INSERT second vector', () => {
const result = db.sql("INSERT INTO docs (id, content, embedding) VALUES ('doc2', 'test content', [4.0, 5.0, 6.0])");
console.log(' Result:', JSON.stringify(result));
});
// Test 4: Vector search with L2 distance
test('Vector search with L2 distance', () => {
const result = db.sql("SELECT * FROM docs ORDER BY embedding <-> [1.0, 2.0, 3.0] LIMIT 5");
console.log(' Result:', JSON.stringify(result));
});
// Test 5: Vector search with cosine distance
test('Vector search with cosine distance', () => {
const result = db.sql("SELECT * FROM docs ORDER BY embedding <=> [0.5, 0.5, 0.5] LIMIT 5");
console.log(' Result:', JSON.stringify(result));
});
// Test 6: Vector search with filter
test('Vector search with filter', () => {
const result = db.sql("SELECT * FROM docs WHERE id = 'doc1' ORDER BY embedding <-> [1.0, 2.0, 3.0] LIMIT 5");
console.log(' Result:', JSON.stringify(result));
});
// Test 7: DROP TABLE
test('DROP TABLE', () => {
const result = db.sql("DROP TABLE docs");
console.log(' Result:', JSON.stringify(result));
});
// Cleanup
db.free();
// Summary
console.log('\n╔════════════════════════════════════════════════════════════╗');
console.log('║ TEST SUMMARY ║');
console.log('╚════════════════════════════════════════════════════════════╝\n');
const passed = tests.filter(t => t.passed).length;
const failed = tests.filter(t => !t.passed).length;
console.log(` Total: ${tests.length} tests`);
console.log(` \x1b[32mPassed: ${passed}\x1b[0m`);
console.log(` \x1b[31mFailed: ${failed}\x1b[0m`);
if (failed > 0) {
console.log('\n Failed tests:');
tests.filter(t => !t.passed).forEach(t => {
console.log(` - ${t.name}: ${t.error}`);
});
process.exit(1);
}
}
main().catch(console.error);