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!") }