use std::time::Instant;
use sqlitegraph::backend::native::v3::edge_compat::{V3EdgeStore, Direction};
use sqlitegraph::backend::native::v3::btree::BTreeManager;
use tempfile::TempDir;
fn main() {
let temp_dir = TempDir::new().unwrap();
let db_path = temp_dir.path().join("test.graph");
let btree = BTreeManager::create(&db_path).unwrap();
let mut store = V3EdgeStore::new(btree, None);
println!("═══════════════════════════════════════════════════════════════");
println!(" V3EdgeStore Performance Test (RwLock + Vec<i64> cache)");
println!("═══════════════════════════════════════════════════════════════\n");
let start = Instant::now();
for j in 1..=20 {
store.insert_edge(1, 1 + j as i64, Direction::Outgoing).unwrap();
}
let insert_time = start.elapsed();
println!("Inserted 20 edges in {:?}", insert_time);
let start = Instant::now();
let result = store.outgoing(1).unwrap();
let first_time = start.elapsed();
println!("First query: {:?} ({} ns, {} neighbors)", first_time, first_time.as_nanos(), result.len());
let start = Instant::now();
for _ in 0..10000 {
let _ = store.outgoing(1).unwrap();
}
let total_time = start.elapsed();
let avg_ns = total_time.as_nanos() / 10000;
println!("10000 queries: {:?} (avg {} ns/query)", total_time, avg_ns);
store.print_stats();
println!("\n═══════════════════════════════════════════════════════════════");
if avg_ns < 5000 {
println!(" ✅ GOOD: Average query time is {} ns (< 5 μs)", avg_ns);
} else if avg_ns < 50000 {
println!(" ⚠️ OK: Average query time is {} ns (< 50 μs)", avg_ns);
} else {
println!(" ❌ SLOW: Average query time is {} ns (> 50 μs)", avg_ns);
}
println!("═══════════════════════════════════════════════════════════════");
}