https://opendal.apache.org/ logo
Test code: ```rs #[tokio::test] async fn opendal_v...
# general
q
Test code:
Copy code
rs
#[tokio::test]
async fn opendal_vs_tokio_write() {
    // Payload of 1024 bytes
    let mut payload = String::with_capacity(1024);
    for _ in 0..payload.capacity() {
        payload.push('A');
    }
    let payload: &'static str = payload.leak();
    let total_files = 1000;
    let runs = 10;
    let root = "/tmp/ramdisk/files";

    // OpenDAL
    let op = Operator::new(services::Fs::default().root(root))
        .expect("Failed to create operator")
        .finish();

    let mut opendal_elapsed = Duration::ZERO;
    let mut tokio_elapsed = Duration::ZERO;
    
    for _ in 0..runs {
        let start_opendal = tokio::time::Instant::now();

        for i in 0..total_files {
            op.write(&i.to_string(), payload).await.unwrap();
        }
        for i in 0..total_files {
            op.delete(&i.to_string()).await.unwrap();
        }

        let end_opendal = tokio::time::Instant::now();

        // Tokio
        for i in 0..total_files {
            fs::write(&format!("{root}/{i}"), payload).await.unwrap();
        }
        for i in 0..total_files {
            fs::remove_file(&format!("{root}/{i}")).await.unwrap();
        }

        let end_tokio = tokio::time::Instant::now();

        opendal_elapsed += end_opendal - start_opendal;
        tokio_elapsed += end_tokio - end_opendal;
    }

    let opendal_throughput = (total_files * runs) as f64 / opendal_elapsed.as_secs_f64();
    let tokio_throughput = (total_files * runs) as f64 / tokio_elapsed.as_secs_f64();

    println!("  Total files             : {}", total_files);
    println!("  Throughput OpenDAL      : {}", opendal_throughput); // 5505.096180388658
    println!("  Duration OpenDAL        : {:?}", opendal_elapsed); // 181.649869ms
    println!("  Throughput Tokio        : {}", tokio_throughput); // 24910.126753685377
    println!("  Duration Tokio          : {:?}", tokio_elapsed); // 40.144316ms
}