use horon_engine::Store;
fn payload(path: &str) -> Vec<u8> {
format!("payload-for::{}", path).into_bytes()
}
fn assert_no_crossover(store: &Store, paths: &[String], label: &str) {
for path in paths {
let got = store.get(path).unwrap_or_else(|e| {
panic!("{label}: {path} vanished after insert: {e:?}")
});
assert_eq!(
got,
payload(path),
"{label}: {path} returned another node's data — identity collision",
);
}
}
#[test]
fn deep_chain_keeps_identities_distinct() {
let store = Store::new();
let mut paths = Vec::new();
let mut path = String::new();
for level in 0..17 {
path = format!("{}/d{}", path, level);
store.put(&path, &payload(&path)).unwrap();
paths.push(path.clone());
}
assert_no_crossover(&store, &paths, "deep chain");
}
#[test]
fn same_level_cousins_across_branches_stay_distinct() {
let store = Store::new();
let mut paths = Vec::new();
let mut frontier = vec![String::new()];
for _ in 0..5 {
let mut next = Vec::new();
for parent in &frontier {
for child in 0..4 {
let path = format!("{}/b{}", parent, child);
if store.put(&path, &payload(&path)).is_ok() {
paths.push(path.clone());
next.push(path);
}
}
}
frontier = next;
if paths.len() > 1_000 {
break;
}
}
assert!(paths.len() > 900, "fixture should be large enough to matter");
assert_no_crossover(&store, &paths, "cousins");
}
#[test]
fn wide_fanout_keeps_identities_distinct() {
let store = Store::new();
store.put("/wide", &payload("/wide")).unwrap();
let mut paths = vec!["/wide".to_string()];
for i in 0..600 {
let path = format!("/wide/s{:04}", i);
store.put(&path, &payload(&path)).unwrap();
paths.push(path);
}
assert_no_crossover(&store, &paths, "wide fan-out");
}
#[test]
fn identity_is_independent_of_sibling_insertion_order() {
let build = |reverse: bool| {
let store = Store::new();
store.put("/root", &payload("/root")).unwrap();
let mut order: Vec<usize> = (0..64).collect();
if reverse {
order.reverse();
}
for i in order {
let path = format!("/root/c{:03}", i);
store.put(&path, &payload(&path)).unwrap();
}
store
};
for (label, store) in [("forward", build(false)), ("reverse", build(true))] {
let paths: Vec<String> = (0..64).map(|i| format!("/root/c{:03}", i)).collect();
assert_no_crossover(&store, &paths, label);
assert_eq!(
store.list("/root").unwrap().len(),
64,
"{label}: every sibling must survive as its own node"
);
}
}
#[test]
fn the_index_can_locate_every_node_it_holds() {
let store = Store::new();
let mut path = String::new();
for level in 0..16 {
path = format!("{}/d{}", path, level);
store.put(&path, &payload(&path)).unwrap();
}
for i in 0..300 {
let p = format!("/wide{:04}", i);
store.put(&p, &payload(&p)).unwrap();
}
let network = store.inner().shared_htt().tensor_network();
assert!(
network.verify_index_locates_all_nodes(),
"the spatial index cannot find a node it indexed"
);
assert!(network.validate_network(), "network integrity failed");
}