use rspc_dev_utilities::test_data::{ dur_to_str, make_test_data, TestData, TestDataClient, TestDataServer, TestEnum, DATASIZE, }; use tokio::join; use rspc::transport; #[tokio::main] async fn main() -> Result<(), Box> { let (c, s) = transport::channel::new_sync(); let data: TestData = make_test_data(DATASIZE); let srv_thread = tokio::spawn(async move { let mut server = TestDataServer::from(data); server.listen(s).await }); let client = TestDataClient::new(c); let clientref = &client; let job1 = async { let now = std::time::Instant::now(); assert_eq!(DATASIZE, client.len().await.unwrap()); println!("len: {}", dur_to_str(now.elapsed())); let now = std::time::Instant::now(); assert_eq!(267914296, clientref.fib(42).await.unwrap()); println!("fib1: {}", dur_to_str(now.elapsed())); }; let job2 = async { let now = std::time::Instant::now(); assert_eq!(DATASIZE, client.len().await.unwrap()); println!("len: {}", dur_to_str(now.elapsed())); let now = std::time::Instant::now(); assert_eq!(4, client.calc().await.unwrap().unwrap_or(0)); println!("calc: {}", dur_to_str(now.elapsed())); let cdat = make_test_data(DATASIZE); let now = std::time::Instant::now(); assert_eq!(8, client.calc_add(cdat).await.unwrap().unwrap_or(0)); println!("calc_add: {}", dur_to_str(now.elapsed())); let now = std::time::Instant::now(); assert_eq!(267914296, client.fib(42).await.unwrap()); println!("fib2: {}", dur_to_str(now.elapsed())); let now = std::time::Instant::now(); clientref.push((false, TestEnum::NoValue)).await.unwrap(); println!("push: {}", dur_to_str(now.elapsed())); let now = std::time::Instant::now(); assert_eq!(DATASIZE + 1, client.len().await.unwrap()); println!("len: {}", dur_to_str(now.elapsed())); }; join!(job1, job2); client.stop().await.unwrap(); srv_thread.await.unwrap().unwrap(); Ok(()) }