ranges 0.4.0

This crate provides a generic alternative to core/std ranges, set-operations to work with them and a range set that can efficiently store them with the least amount of memory possible.
Documentation
use criterion::{black_box, criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion, Throughput};

use ranges::{GenericRange, Ranges};

fn insert(c: &mut Criterion) {
    let mut group = c.benchmark_group("insert collisions");
    let max_exponent = 14;

    for exponent in 0..=max_exponent {
        let mut ranges = Ranges::new();
        for i in 0..2_usize.pow(exponent) {
            ranges.insert(i * 10..(i * 10) + 5);
        }

        group.throughput(Throughput::Elements(ranges.len() as u64));
        group.bench_function(BenchmarkId::from_parameter(ranges.len()), |b| {
            b.iter_batched(
                || ranges.clone(),
                |mut r| {
                    let _ = r.insert(black_box(GenericRange::from(usize::MIN..=usize::MAX)));
                },
                BatchSize::PerIteration,
            );
        });
    }

    group.finish();
}

criterion_group!(benches, insert);
criterion_main!(benches);