observable-tree 0.1.0

Reactive Observable BTree
Documentation
use std::sync::Arc;
use tokio::sync::Mutex;

use observable_tree::BTree;

#[tokio::main]
async fn main() {
    let tree = BTree::start(1000);
    let btree = Arc::new(Mutex::new(tree));

    let btree_main = btree.clone();
    let m = btree_main.lock().await;
    let ins = (*m).insert("hello".to_string(), 5).await;
    assert!(ins.unwrap().is_none());

    let cont = (*m).contains("hello".to_string()).await;
    assert!(cont.unwrap());

    {
        let btree_async = btree.clone();
        tokio::spawn(async move {
            let t_m = btree_async.lock().await;
            let ins = (*t_m).insert("wow".to_string(), 76).await;
            assert!(ins.unwrap().is_none());

            let cont = (*t_m).contains("wow".to_string()).await;
            assert!(cont.unwrap());
        });
        println!("Done async 1");
    };

    {
        let btree_async2 = btree.clone();
        tokio::spawn(async move {
            let t_m = btree_async2.lock().await;

            let cont = (*t_m).contains("wow".to_string()).await;
            assert!(cont.unwrap());
            let cont = (*t_m).contains("hello".to_string()).await;
            assert!(cont.unwrap());
        });
        println!("Done async 2")
    };

    print!("Done!")
}