speedytree 0.1.0

Canonical and RapidNJ implementations of Neighbor-joining in Rust
Documentation
#[cfg(test)]
fn assert_equal_tree(a: &crate::Tree, b: &crate::Tree) {
    use crate::property_tests::tree_distances::{branch_score, robinson_foulds};
    assert_eq!(robinson_foulds(&a, &b), 0);
    assert!(petgraph::algo::is_isomorphic(&a, &b));
    assert!(branch_score(&a, &b) < f64::EPSILON);
}

#[test]
fn test_random_additive_binary_trees_naive() {
    use crate::{
        naive_nj::canonical_neighbor_joining,
        property_tests::random_additive_tree::{
            distance_matrix_from_tree, random_unrooted_binary_tree,
        },
    };
    for i in 4..20 {
        let original_tree = random_unrooted_binary_tree(i);
        let d = distance_matrix_from_tree(original_tree.clone());
        let tree = canonical_neighbor_joining(d).unwrap();
        assert_equal_tree(&original_tree, &tree)
    }
}
#[test]
fn test_random_additive_binary_trees_rapid() {
    use crate::property_tests::random_additive_tree::{
        distance_matrix_from_tree, random_unrooted_binary_tree,
    };
    use crate::rapid_nj::rapid_nj;
    for i in 4..20 {
        let original_tree = random_unrooted_binary_tree(i);
        let d = distance_matrix_from_tree(original_tree.clone());
        let chunk_size = rand::random::<usize>() % (i + 1) + 1;
        let tree = rapid_nj(d, chunk_size).unwrap();
        assert_equal_tree(&original_tree, &tree)
    }
}

#[test]
fn test_random_additive_binary_trees_mix() {
    use crate::hybrid_nj::neighbor_joining;
    use crate::property_tests::random_additive_tree::{
        distance_matrix_from_tree, random_unrooted_binary_tree,
    };
    for i in (25..100).step_by(25) {
        let original_tree = random_unrooted_binary_tree(i);
        let d: crate::distances::DistanceMatrix = distance_matrix_from_tree(original_tree.clone());
        for _ in 0..5 {
            let naive_steps = rand::random::<usize>() % (i + 1);
            let chunk_size = rand::random::<usize>() % (i + 1) + 1;
            let tree = neighbor_joining(d.clone(), naive_steps, chunk_size).unwrap();
            assert_equal_tree(&original_tree, &tree)
        }
    }
}