Merge commit 'd803bfe2b1fe7f5e219e50ac20d6801a0a58ac75' as 'vendor/ruvector'
This commit is contained in:
172
vendor/ruvector/npm/packages/graph-node/test.js
vendored
Normal file
172
vendor/ruvector/npm/packages/graph-node/test.js
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
const { GraphDatabase, version, hello } = require('./index.js');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
console.log('RuVector Graph Node Test');
|
||||
console.log('========================\n');
|
||||
|
||||
// Test 1: Version and hello
|
||||
console.log('1. Testing version and hello functions:');
|
||||
console.log(' Version:', version());
|
||||
console.log(' Hello:', hello());
|
||||
console.log(' ✓ Basic functions work\n');
|
||||
|
||||
// Test 2: Create database
|
||||
console.log('2. Creating graph database:');
|
||||
const db = new GraphDatabase({
|
||||
distanceMetric: 'Cosine',
|
||||
dimensions: 3
|
||||
});
|
||||
console.log(' ✓ Database created\n');
|
||||
|
||||
// Test 3: Create nodes
|
||||
console.log('3. Creating nodes:');
|
||||
(async () => {
|
||||
try {
|
||||
const nodeId1 = await db.createNode({
|
||||
id: 'alice',
|
||||
embedding: new Float32Array([1.0, 0.0, 0.0]),
|
||||
labels: ['Person', 'Employee'],
|
||||
properties: { name: 'Alice', age: '30' }
|
||||
});
|
||||
console.log(' Created node:', nodeId1);
|
||||
|
||||
const nodeId2 = await db.createNode({
|
||||
id: 'bob',
|
||||
embedding: new Float32Array([0.0, 1.0, 0.0]),
|
||||
labels: ['Person'],
|
||||
properties: { name: 'Bob', age: '25' }
|
||||
});
|
||||
console.log(' Created node:', nodeId2);
|
||||
console.log(' ✓ Nodes created\n');
|
||||
|
||||
// Test 4: Create edge
|
||||
console.log('4. Creating edge:');
|
||||
const edgeId = await db.createEdge({
|
||||
from: 'alice',
|
||||
to: 'bob',
|
||||
description: 'knows',
|
||||
embedding: new Float32Array([0.5, 0.5, 0.0]),
|
||||
confidence: 0.95
|
||||
});
|
||||
console.log(' Created edge:', edgeId);
|
||||
console.log(' ✓ Edge created\n');
|
||||
|
||||
// Test 5: Create hyperedge
|
||||
console.log('5. Creating hyperedge:');
|
||||
const nodeId3 = await db.createNode({
|
||||
id: 'charlie',
|
||||
embedding: new Float32Array([0.0, 0.0, 1.0])
|
||||
});
|
||||
|
||||
const hyperedgeId = await db.createHyperedge({
|
||||
nodes: ['alice', 'bob', 'charlie'],
|
||||
description: 'collaborated_on_project',
|
||||
embedding: new Float32Array([0.33, 0.33, 0.33]),
|
||||
confidence: 0.85
|
||||
});
|
||||
console.log(' Created hyperedge:', hyperedgeId);
|
||||
console.log(' ✓ Hyperedge created\n');
|
||||
|
||||
// Test 6: Query
|
||||
console.log('6. Querying graph:');
|
||||
const results = await db.query('MATCH (n) RETURN n');
|
||||
console.log(' Query results:', JSON.stringify(results, null, 2));
|
||||
console.log(' ✓ Query executed\n');
|
||||
|
||||
// Test 7: Search hyperedges
|
||||
console.log('7. Searching hyperedges:');
|
||||
const searchResults = await db.searchHyperedges({
|
||||
embedding: new Float32Array([0.3, 0.3, 0.3]),
|
||||
k: 5
|
||||
});
|
||||
console.log(' Search results:', searchResults);
|
||||
console.log(' ✓ Search completed\n');
|
||||
|
||||
// Test 8: k-hop neighbors
|
||||
console.log('8. Finding k-hop neighbors:');
|
||||
const neighbors = await db.kHopNeighbors('alice', 2);
|
||||
console.log(' Neighbors:', neighbors);
|
||||
console.log(' ✓ Neighbors found\n');
|
||||
|
||||
// Test 9: Statistics
|
||||
console.log('9. Getting statistics:');
|
||||
const stats = await db.stats();
|
||||
console.log(' Stats:', stats);
|
||||
console.log(' ✓ Statistics retrieved\n');
|
||||
|
||||
// Test 10: Transactions
|
||||
console.log('10. Testing transactions:');
|
||||
const txId = await db.begin();
|
||||
console.log(' Transaction started:', txId);
|
||||
await db.commit(txId);
|
||||
console.log(' Transaction committed');
|
||||
console.log(' ✓ Transaction test passed\n');
|
||||
|
||||
// Test 11: Batch insert
|
||||
console.log('11. Testing batch insert:');
|
||||
const batchResult = await db.batchInsert({
|
||||
nodes: [
|
||||
{ id: 'n1', embedding: new Float32Array([1, 0, 0]) },
|
||||
{ id: 'n2', embedding: new Float32Array([0, 1, 0]) }
|
||||
],
|
||||
edges: [
|
||||
{
|
||||
from: 'n1',
|
||||
to: 'n2',
|
||||
description: 'connects',
|
||||
embedding: new Float32Array([0.5, 0.5, 0])
|
||||
}
|
||||
]
|
||||
});
|
||||
console.log(' Batch result:', batchResult);
|
||||
console.log(' ✓ Batch insert completed\n');
|
||||
|
||||
// Test 12: Persistence
|
||||
console.log('12. Testing persistence:');
|
||||
const tmpDir = os.tmpdir();
|
||||
const dbPath = path.join(tmpDir, `ruvector-test-${Date.now()}.db`);
|
||||
|
||||
console.log(' Creating persistent database at:', dbPath);
|
||||
const persistentDb = new GraphDatabase({
|
||||
distanceMetric: 'Cosine',
|
||||
dimensions: 3,
|
||||
storagePath: dbPath
|
||||
});
|
||||
|
||||
console.log(' isPersistent():', persistentDb.isPersistent());
|
||||
console.log(' getStoragePath():', persistentDb.getStoragePath());
|
||||
|
||||
// Add data to persistent database
|
||||
await persistentDb.createNode({
|
||||
id: 'persistent_node_1',
|
||||
embedding: new Float32Array([1.0, 0.5, 0.2]),
|
||||
labels: ['PersistentTest'],
|
||||
properties: { testKey: 'testValue' }
|
||||
});
|
||||
console.log(' Created node in persistent database');
|
||||
|
||||
const persistentStats = await persistentDb.stats();
|
||||
console.log(' Persistent DB stats:', persistentStats);
|
||||
|
||||
// Test opening existing database
|
||||
console.log(' Opening existing database with GraphDatabase.open()...');
|
||||
const reopenedDb = GraphDatabase.open(dbPath);
|
||||
console.log(' Reopened isPersistent():', reopenedDb.isPersistent());
|
||||
|
||||
// Cleanup
|
||||
try {
|
||||
fs.unlinkSync(dbPath);
|
||||
console.log(' Cleaned up test database');
|
||||
} catch (e) {
|
||||
// Ignore cleanup errors
|
||||
}
|
||||
console.log(' ✓ Persistence test passed\n');
|
||||
|
||||
console.log('✅ All tests passed!');
|
||||
} catch (error) {
|
||||
console.error('❌ Test failed:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user