shared_vector 0.5.0

Reference counted vector data structure.
Documentation
use criterion::{black_box, criterion_group, criterion_main, Criterion, BenchmarkId};
use shared_vector::{AtomicSharedVector, SharedVector, Vector};

criterion_group!(vector, vector_push);
criterion_main!(vector);

fn push_shared(n: u32, initial_cap: usize) {
    let mut v = SharedVector::with_capacity(initial_cap);
    for i in 0..n {
        v.push(i);
    }
    black_box(v);
}

fn push_atomic(n: u32, initial_cap: usize) {
    let mut v = AtomicSharedVector::with_capacity(initial_cap);
    for i in 0..n {
        v.push(i);
    }
    black_box(v);
}

fn push_unique(n: u32, initial_cap: usize) {
    let mut v = Vector::with_capacity(initial_cap);
    for i in 0..n {
        v.push(i);
    }
    black_box(v);
}

fn push_std(n: u32, initial_cap: usize) {
    let mut v = Vec::with_capacity(initial_cap);
    for i in 0..n {
        v.push(i);
    }
    black_box(v);
}

fn vector_push(c: &mut Criterion) {
    let mut g = c.benchmark_group("push");

    for item_count in [1000, 10_000] {
        for initial_cap in [1024, 256, 32] {
            g.bench_with_input(BenchmarkId::new(&format!("shared({initial_cap})"), &item_count), &item_count, |b, item_count| b.iter (||push_shared(*item_count, black_box(initial_cap))));
            g.bench_with_input(BenchmarkId::new(&format!("atomic({initial_cap})"), &item_count), &item_count, |b, item_count| b.iter (||push_atomic(*item_count, black_box(initial_cap))));
            g.bench_with_input(BenchmarkId::new(&format!("unique({initial_cap})"), &item_count), &item_count, |b, item_count| b.iter(||push_unique(*item_count, black_box(initial_cap))));
            g.bench_with_input(BenchmarkId::new(&format!("std({initial_cap})"), &item_count), &item_count, |b, item_count| b.iter(||push_std(*item_count, black_box(initial_cap))));
        }
    }
}