use std::sync::Arc;
use nodedb_mem::{EngineId, EngineLimits, GovernorConfig, MemoryGovernor, ScopedMemory};
use nodedb_types::{DatabaseId, TenantId};
const PER_ENGINE: usize = usize::MAX / EngineId::COUNT;
pub(crate) fn test_memory() -> ScopedMemory {
let governor = Arc::new(
MemoryGovernor::new(GovernorConfig {
global_ceiling: PER_ENGINE * EngineId::ALL.len(),
engine_limits: EngineLimits::uniform(PER_ENGINE),
})
.expect("test governor"),
);
ScopedMemory::new(
governor,
DatabaseId::DEFAULT,
TenantId::new(0),
EngineId::Graph,
)
}
pub(crate) fn chain_csr() -> crate::csr::CsrIndex {
let mut csr = crate::csr::CsrIndex::new(test_memory());
for (src, label, dst) in [
("a", "KNOWS", "b"),
("b", "KNOWS", "c"),
("c", "KNOWS", "d"),
("a", "WORKS", "e"),
] {
csr.add_edge(src, label, dst).expect("test edge");
}
csr
}
pub(crate) fn long_chain_csr() -> crate::csr::CsrIndex {
let mut csr = crate::csr::CsrIndex::new(test_memory());
for i in 0..999 {
csr.add_edge(&format!("n{i}"), "NEXT", &format!("n{}", i + 1))
.expect("test edge");
}
csr.compact()
.expect("test governor ceiling covers this reservation");
csr
}