flnode 0.10.0

Glue code for flmodules
Documentation
use flarch::start_logging;
mod helpers;
use flmodules::Modules;
use helpers::*;

async fn connect_nodes_n(nbr_nodes: usize) -> anyhow::Result<()> {
    let mut net = NetworkSimul::new();
    log::info!("Creating {nbr_nodes} nodes");
    net.add_nodes(Modules::RAND, nbr_nodes).await?;
    net.process(5).await;
    log::info!("Sent a total of {} messages", net.messages);

    log::info!("Verify for full connection of all nodes");
    let mut nodes_to_visit = vec![*net.nodes.keys().next().unwrap()];
    let mut nodes_visited = vec![];

    while !nodes_to_visit.is_empty() {
        let id = nodes_to_visit.pop().unwrap();
        if nodes_visited.contains(&id) {
            continue;
        }
        nodes_visited.push(id);
        let node = net.nodes.get_mut(&id).unwrap();
        let nd = node.node.random.as_ref().unwrap().stats.clone();
        for n in &nd.borrow().connected.0 {
            if nodes_to_visit.contains(&n.id) || nodes_visited.contains(&n.id) {
                continue;
            }
            nodes_to_visit.push(n.id);
        }
    }
    assert_eq!(nbr_nodes, nodes_visited.len());
    Ok(())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[tokio::test]
    async fn connect_nodes() -> anyhow::Result<()> {
        start_logging();

        for n in &[2, 3, 4, 5, 10, 20, 50, 100] {
            connect_nodes_n(*n).await?;
        }
        Ok(())
    }
}