use rust_lapper::{Interval, Lapper};
type Iv = Interval<usize, u32>;
fn main() {
let data: Vec<Iv> = vec![
Iv {
start: 70,
stop: 120,
val: 0,
}, Iv {
start: 10,
stop: 15,
val: 0,
},
Iv {
start: 10,
stop: 15,
val: 0,
}, Iv {
start: 12,
stop: 15,
val: 0,
}, Iv {
start: 14,
stop: 16,
val: 0,
}, Iv {
start: 40,
stop: 45,
val: 0,
},
Iv {
start: 50,
stop: 55,
val: 0,
},
Iv {
start: 60,
stop: 65,
val: 0,
},
Iv {
start: 68,
stop: 71,
val: 0,
}, Iv {
start: 70,
stop: 75,
val: 0,
},
];
let mut lapper = Lapper::new(data);
assert_eq!(
lapper.find(11, 15).collect::<Vec<&Iv>>(),
vec![
&Iv {
start: 10,
stop: 15,
val: 0
},
&Iv {
start: 10,
stop: 15,
val: 0
}, &Iv {
start: 12,
stop: 15,
val: 0
}, &Iv {
start: 14,
stop: 16,
val: 0
}, ]
);
lapper.merge_overlaps();
assert_eq!(
lapper.find(11, 15).collect::<Vec<&Iv>>(),
vec![&Iv {
start: 10,
stop: 16,
val: 0
},]
);
assert_eq!(lapper.cov(), 73);
let data = vec![
Iv {
start: 5,
stop: 15,
val: 0,
},
Iv {
start: 48,
stop: 80,
val: 0,
},
];
let (union, intersect) = lapper.union_and_intersect(&Lapper::new(data));
assert_eq!(union, 88);
assert_eq!(intersect, 27);
for interval in lapper.depth().filter(|x| x.val > 2) {
println!(
"Depth at {} - {}: {}",
interval.start, interval.stop, interval.val
);
}
let encoded = bincode::serialize(&lapper).unwrap();
let decoded: Lapper<usize, u32> = bincode::deserialize(&encoded[..]).unwrap();
dbg!(lapper);
dbg!(decoded);
}