use criterion::{black_box, criterion_group, criterion_main, Criterion};
use hpo::HpoTermId;
use hpo::Ontology;
fn ancestors(ontology: &Ontology, times: usize) -> usize {
let mut count = 0;
let mut terms: (HpoTermId, HpoTermId) = (
HpoTermId::try_from("HP:0000001").unwrap(),
HpoTermId::try_from("HP:0000001").unwrap(),
);
ontology
.into_iter()
.skip(800)
.take(times)
.for_each(|term1| {
for term2 in ontology.into_iter().skip(500).take(times) {
let overlap = term1.common_ancestor_ids(&term2).len();
if overlap > count {
count = overlap;
terms = (term1.id(), term2.id());
}
}
});
count
}
fn union_ancestors(ontology: &Ontology, times: usize) -> usize {
let mut count = 0;
let mut terms: (HpoTermId, HpoTermId) = (
HpoTermId::try_from("HP:0000001").unwrap(),
HpoTermId::try_from("HP:0000001").unwrap(),
);
ontology
.into_iter()
.skip(800)
.take(times)
.for_each(|term1| {
for term2 in ontology.into_iter().skip(500).take(times) {
let overlap = term1.union_ancestor_ids(&term2).len();
if overlap > count {
count = overlap;
terms = (term1.id(), term2.id());
}
}
});
count
}
fn ancestors_benchmark(c: &mut Criterion) {
let ontology = Ontology::from_binary("tests/ontology.hpo").unwrap();
c.bench_function("common-ancestors 500", |b| {
b.iter(|| ancestors(black_box(&ontology), black_box(500)))
});
}
fn union_ancestors_benchmark(c: &mut Criterion) {
let ontology = Ontology::from_binary("tests/ontology.hpo").unwrap();
c.bench_function("union-ancestors 500", |b| {
b.iter(|| union_ancestors(black_box(&ontology), black_box(500)))
});
}
criterion_group!(
common_ancestors,
ancestors_benchmark,
union_ancestors_benchmark
);
criterion_main!(common_ancestors);