graphannis-core 4.1.2

This crate supports graph representation and generic query-functionality.
Documentation
use super::*;
use crate::{graph::NODE_TYPE_KEY, types::Annotation, util::example_graphs::create_linear_gs};

#[test]
fn find_connections_dense() {
    let orig = create_linear_gs().unwrap();
    let mut gs = DenseAdjacencyListStorage::new();
    let mut node_annos = AnnoStorageImpl::new();
    for i in 0..=10 {
        node_annos
            .insert(
                i,
                Annotation {
                    key: NODE_TYPE_KEY.as_ref().clone(),
                    val: "node".into(),
                },
            )
            .unwrap();
    }
    gs.copy(&node_annos, &orig).unwrap();

    let found: Result<Vec<NodeID>> = gs.find_connected(0, 2, Bound::Included(3)).collect();
    let mut found = found.unwrap();
    found.sort();
    assert_eq!(vec![2, 3], found);
    assert_eq!(true, gs.is_connected(0, 2, 2, Bound::Included(3)).unwrap());
    assert_eq!(true, gs.is_connected(0, 3, 2, Bound::Included(3)).unwrap());
    assert_eq!(false, gs.is_connected(0, 4, 2, Bound::Included(3)).unwrap());
    assert_eq!(false, gs.is_connected(0, 8, 2, Bound::Included(3)).unwrap());

    let found: Result<Vec<NodeID>> = gs.find_connected(5, 1, Bound::Excluded(3)).collect();
    let mut found = found.unwrap();
    found.sort();
    assert_eq!(vec![6, 7], found);
    assert_eq!(true, gs.is_connected(5, 6, 1, Bound::Excluded(3)).unwrap());
    assert_eq!(true, gs.is_connected(5, 7, 1, Bound::Excluded(3)).unwrap());
    assert_eq!(false, gs.is_connected(5, 8, 1, Bound::Excluded(3)).unwrap());

    let found: Result<Vec<NodeID>> = gs
        .find_connected(0, 2, std::ops::Bound::Unbounded)
        .collect();
    let mut found = found.unwrap();
    found.sort();
    assert_eq!(vec![2, 3, 4], found);
    assert_eq!(true, gs.is_connected(0, 2, 2, Bound::Unbounded).unwrap());
    assert_eq!(true, gs.is_connected(0, 3, 2, Bound::Unbounded).unwrap());
    assert_eq!(true, gs.is_connected(0, 4, 2, Bound::Unbounded).unwrap());
    assert_eq!(false, gs.is_connected(0, 8, 2, Bound::Unbounded).unwrap());
}

#[test]
fn find_connections_inverse_dense() {
    let orig = create_linear_gs().unwrap();
    let mut gs = DenseAdjacencyListStorage::new();
    let mut node_annos = AnnoStorageImpl::new();
    for i in 0..=10 {
        node_annos
            .insert(
                i,
                Annotation {
                    key: NODE_TYPE_KEY.as_ref().clone(),
                    val: "node".into(),
                },
            )
            .unwrap();
    }
    gs.copy(&node_annos, &orig).unwrap();

    let found: Result<Vec<NodeID>> = gs
        .find_connected_inverse(4, 2, std::ops::Bound::Included(3))
        .collect();
    let mut found = found.unwrap();
    found.sort();
    assert_eq!(vec![1, 2], found);

    let found: Result<Vec<NodeID>> = gs
        .find_connected_inverse(3, 1, std::ops::Bound::Excluded(3))
        .collect();
    let mut found = found.unwrap();
    found.sort();
    assert_eq!(vec![1, 2], found);
}