use super::*;
#[test]
fn test_build_candidate_sets_fallback() {
let siblings = vec![vec![0usize, 1], vec![0, 1]];
let bbknn = vec![vec![1usize], vec![0]];
let pbsamp_to_group = vec![0usize, 1];
let cand = build_candidate_sets(&siblings, &bbknn, &pbsamp_to_group);
assert_eq!(cand[0], vec![0, 1]);
assert_eq!(cand[1], vec![0, 1]);
}
#[test]
fn child_offset_within_parent_is_bounded_per_parent() {
let parent = vec![0usize, 0, 0, 1, 1, 1];
let child = vec![10usize, 10, 11, 22, 23, 22];
let off = child_offset_within_parent(&child, &parent);
assert_eq!(off, vec![0, 0, 1, 0, 1, 0]);
let refined_parent = vec![3usize, 3, 3, 8, 8, 8];
let (_lab, k) = project_to_refinement(&off, &refined_parent);
assert!(k <= 4, "expected ≤ 2 parents × 2 offsets, got {k}");
}
#[test]
fn test_project_to_refinement_splits_straddling_groups() {
let child = vec![0usize, 0, 0, 1, 1];
let parent = vec![0usize, 0, 1, 1, 1];
let (reproj, k) = project_to_refinement(&child, &parent);
assert_eq!(k, 3);
assert_eq!(reproj[0], reproj[1]);
assert_ne!(reproj[0], reproj[2]);
assert_eq!(reproj[3], reproj[4]);
assert_ne!(reproj[2], reproj[3]);
let mut group_parent = std::collections::HashMap::new();
for (&g, &p) in reproj.iter().zip(parent.iter()) {
assert_eq!(*group_parent.entry(g).or_insert(p), p);
}
}