view src/benches/maps_bench.rs @ 487:76562348cb17

Fix excluded paths in coverage script.
author Lewin Bormann <lbo@spheniscida.de>
date Tue, 20 Aug 2019 18:18:53 +0200
parents ce6ac9a9bb05
children 0130b5d5e8c7
line wrap: on
line source

//! Compare different implementations of bytestring->bytestring maps. This is built as separate
//! binary.

#[macro_use]
extern crate bencher;
extern crate rand;
extern crate rusty_leveldb;

use bencher::Bencher;
use rand::Rng;

use rusty_leveldb::DefaultCmp;
use rusty_leveldb::SkipMap;

use std::collections::HashMap;
use std::rc::Rc;

fn gen_key_val<R: Rng>(
    gen: &mut R,
    keylen: usize,
    vallen: usize,
) -> (Vec<u8>, Vec<u8>) {
    let mut key = Vec::with_capacity(keylen);
    let mut val = Vec::with_capacity(vallen);

    for _i in 0..keylen {
        key.push(gen.gen_range('a' as u8, 'z' as u8));
    }
    for _i in 0..vallen {
        val.push(gen.gen_range('a' as u8, 'z' as u8));
    }
    (key, val)
}

fn bench_gen_key_val(b: &mut Bencher) {
    let mut gen = rand::thread_rng();
    b.iter(|| {
        let (k, _v) = gen_key_val(&mut gen, 10, 10);
        k.len();
    });
}

fn bench_skipmap_insert(b: &mut Bencher) {
    let mut gen = rand::thread_rng();

    let mut skm = SkipMap::new(Rc::new(Box::new(DefaultCmp)));

    b.iter(|| {
        let (mut k, v) = gen_key_val(&mut gen, 10, 10);
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k.clone(), v.clone());
        k[9] += 1;
        skm.insert(k, v);
    });
}

fn bench_hashmap_insert(b: &mut Bencher) {
    let mut gen = rand::thread_rng();
    let mut hm = HashMap::new();

    b.iter(|| {
        let (mut k, v) = gen_key_val(&mut gen, 10, 10);
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k.clone(), v.clone());
        k[9] += 1;
        hm.insert(k, v);
    });
}

benchmark_group!(
    basic,
    bench_gen_key_val,
    bench_skipmap_insert,
    bench_hashmap_insert
);
benchmark_main!(basic);