#!/bin/bash set -e echo "==================================" echo "๐Ÿงช COMPREHENSIVE PACKAGE TEST SUITE" echo "==================================" # Colors GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' success() { echo -e "${GREEN}โœ… $1${NC}"; } error() { echo -e "${RED}โŒ $1${NC}"; exit 1; } info() { echo -e "${YELLOW}โ„น๏ธ $1${NC}"; } # Test 1: @ruvector/core echo "" info "TEST 1: Building @ruvector/core" cd npm/core npm run build || error "@ruvector/core build failed" success "@ruvector/core built successfully" # Check .node binaries info "Checking native .node binaries..." if [ -f "native/linux-x64/ruvector.node" ]; then ls -lh native/linux-x64/ruvector.node success "Native binary found: $(du -h native/linux-x64/ruvector.node | cut -f1)" else error "Native binary not found!" fi # Test 2: ruvector wrapper echo "" info "TEST 2: Building ruvector wrapper" cd ../packages/ruvector npm run build || error "ruvector build failed" success "ruvector wrapper built successfully" # Test 3: ruvector-extensions echo "" info "TEST 3: Building ruvector-extensions" cd ../ruvector-extensions npm run build || error "ruvector-extensions build failed" success "ruvector-extensions built successfully" # Test 4: Create fresh test environment echo "" info "TEST 4: Creating fresh test environment" cd /tmp rm -rf test-ruv-complete mkdir test-ruv-complete cd test-ruv-complete npm init -y > /dev/null # Install from published versions info "Installing packages..." npm install @ruvector/core@0.1.14 ruvector@0.1.20 --silent || error "Package installation failed" success "Packages installed" # Test 5: ESM Import Test echo "" info "TEST 5: ESM Import Test" cat > test-esm.js << 'TESTEOF' import('@ruvector/core').then(core => { console.log(' VectorDB:', typeof core.VectorDB); console.log(' version:', core.version()); console.log(' hello:', core.hello()); if (typeof core.VectorDB !== 'function') process.exit(1); console.log(' โœ… ESM imports working'); }).catch(err => { console.error('โŒ ESM test failed:', err); process.exit(1); }); TESTEOF node test-esm.js || error "ESM import test failed" success "ESM imports work correctly" # Test 6: CommonJS Require Test echo "" info "TEST 6: CommonJS Require Test" cat > test-cjs.js << 'TESTEOF' try { const core = require('@ruvector/core'); console.log(' Exports:', Object.keys(core)); console.log(' VectorDB:', typeof core.VectorDB); console.log(' version:', core.version()); console.log(' hello:', core.hello()); if (typeof core.VectorDB !== 'function') { console.error('โŒ VectorDB not found in exports'); process.exit(1); } console.log(' โœ… CommonJS require working'); } catch (err) { console.error('โŒ CommonJS test failed:', err); process.exit(1); } TESTEOF node test-cjs.js || error "CommonJS require test failed" success "CommonJS require works correctly" # Test 7: VectorDB Instantiation echo "" info "TEST 7: VectorDB Instantiation & Basic Operations" cat > test-vectordb.js << 'TESTEOF' const { VectorDB, DistanceMetric } = require('@ruvector/core'); async function test() { console.log(' Creating VectorDB instance...'); const db = new VectorDB({ dimensions: 3, distanceMetric: DistanceMetric.Cosine, storagePath: '/tmp/test-vectordb.db' }); console.log(' Inserting vectors...'); const id1 = await db.insert({ id: 'vec1', vector: [1.0, 0.0, 0.0] }); console.log(' Inserted:', id1); const id2 = await db.insert({ id: 'vec2', vector: [0.9, 0.1, 0.0] }); console.log(' Inserted:', id2); console.log(' Searching...'); const results = await db.search({ vector: [1.0, 0.0, 0.0], k: 2 }); console.log(' Found', results.length, 'results'); const len = await db.len(); console.log(' Total vectors:', len); if (len !== 2) { console.error('โŒ Expected 2 vectors, got', len); process.exit(1); } console.log(' โœ… VectorDB operations working'); } test().catch(err => { console.error('โŒ VectorDB test failed:', err); process.exit(1); }); TESTEOF node test-vectordb.js || error "VectorDB operations failed" success "VectorDB operations work correctly" # Test 8: CLI Test echo "" info "TEST 8: CLI Tool Test" npx ruvector info || error "CLI tool failed" success "CLI tool works correctly" # Test 9: ruvector wrapper functionality echo "" info "TEST 9: Ruvector Wrapper Test" cat > test-wrapper.js << 'TESTEOF' const { VectorDB, getImplementationType, isNative } = require('ruvector'); console.log(' Implementation:', getImplementationType()); console.log(' Is Native:', isNative()); console.log(' VectorDB:', typeof VectorDB); if (typeof VectorDB !== 'function') { console.error('โŒ VectorDB not exported from wrapper'); process.exit(1); } console.log(' โœ… Wrapper exports working'); TESTEOF node test-wrapper.js || error "Wrapper test failed" success "Ruvector wrapper works correctly" # Test 10: Check binary compatibility echo "" info "TEST 10: Binary Compatibility Check" file node_modules/@ruvector/core/native/linux-x64/ruvector.node || error "Cannot inspect binary" success "Binary is valid ELF shared object" # Final Summary echo "" echo "==================================" echo "๐ŸŽ‰ ALL TESTS PASSED!" echo "==================================" echo "" echo "Summary:" echo " โœ… @ruvector/core builds" echo " โœ… Native .node binaries present" echo " โœ… ruvector wrapper builds" echo " โœ… ruvector-extensions builds" echo " โœ… ESM imports work" echo " โœ… CommonJS requires work" echo " โœ… VectorDB instantiation works" echo " โœ… Vector operations work (insert, search, len)" echo " โœ… CLI tool works" echo " โœ… Wrapper exports work" echo " โœ… Binary compatibility verified" echo "" echo "๐Ÿ“ฆ Package Versions:" cd /tmp/test-ruv-complete npm list @ruvector/core ruvector 2>/dev/null | grep -E "@ruvector/core|ruvector@" echo "" echo "๐Ÿš€ Everything is working correctly!"