use sqlitegraph::algo::async_traversal::{bfs_async, k_hop_async};
use sqlitegraph::backend::native::v3::V3Backend;
use sqlitegraph::backend::{BackendDirection, EdgeSpec, GraphBackend, NodeSpec};
use sqlitegraph::snapshot::SnapshotId;
use tempfile::TempDir;
#[tokio::test]
async fn test_async_bfs_and_k_hop() {
let temp = TempDir::new().unwrap();
let db_path = temp.path().join("async_traversal.graph");
let backend = V3Backend::create(&db_path).unwrap();
let _n1 = backend
.insert_node_with_id(
NodeSpec {
kind: "Node".to_string(),
name: "A".to_string(),
file_path: None,
data: serde_json::json!({}),
},
1,
)
.unwrap();
let _n2 = backend
.insert_node_with_id(
NodeSpec {
kind: "Node".to_string(),
name: "B".to_string(),
file_path: None,
data: serde_json::json!({}),
},
2,
)
.unwrap();
let _n3 = backend
.insert_node_with_id(
NodeSpec {
kind: "Node".to_string(),
name: "C".to_string(),
file_path: None,
data: serde_json::json!({}),
},
3,
)
.unwrap();
backend
.insert_edge(EdgeSpec {
from: 1,
to: 2,
edge_type: "Edge".to_string(),
data: serde_json::json!({}),
})
.unwrap();
backend
.insert_edge(EdgeSpec {
from: 2,
to: 3,
edge_type: "Edge".to_string(),
data: serde_json::json!({}),
})
.unwrap();
backend.flush_to_disk().unwrap();
let snapshot_id = SnapshotId::current();
let visited_bfs = bfs_async(&backend, snapshot_id, 1, 2).await.unwrap();
assert_eq!(visited_bfs, vec![1, 2, 3]);
let visited_khop = k_hop_async(&backend, snapshot_id, 1, 2, BackendDirection::Outgoing)
.await
.unwrap();
assert_eq!(visited_khop, vec![1, 2, 3]);
}