Mercurial > lbo > hg > leveldb-rs
changeset 481:2190a3c01f1e
Add benchmark for skipmap
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Fri, 19 Jul 2019 14:36:21 +0200 |
parents | 7466f5240d1f |
children | 6d48f2046c29 |
files | Cargo.toml src/benches/maps_bench.rs |
diffstat | 2 files changed, 90 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Cargo.toml Fri Jul 19 13:58:16 2019 +0200 +++ b/Cargo.toml Fri Jul 19 14:36:21 2019 +0200 @@ -19,6 +19,13 @@ [dev-dependencies] time-test = "0.2" +bencher = "0.1" + +[[bench]] +name = "maps_bench" +harness = false +path = "src/benches/maps_bench.rs" [workspace] members = ["examples/write-a-lot", "examples/leveldb-tool"] +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/benches/maps_bench.rs Fri Jul 19 14:36:21 2019 +0200 @@ -0,0 +1,83 @@ +//! 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<I: Iterator<Item = char>>( + gen: &mut I, + keylen: usize, + vallen: usize, +) -> (Vec<u8>, Vec<u8>) { + let mut key = Vec::with_capacity(keylen); + let mut val = Vec::with_capacity(vallen); + + let mut k = 0; + let mut v = 0; + for c in gen { + if k < keylen { + key.push(c as u8); + k += 1; + continue; + } + + if v < vallen { + val.push(c as u8); + v += 1; + continue; + } + break; + } + (key, val) +} + +fn bench_gen_key_val(b: &mut Bencher) { + let mut gen = rand::thread_rng(); + let mut gen = gen.gen_ascii_chars(); + 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 gen = gen.gen_ascii_chars(); + + let mut skm = SkipMap::new(Rc::new(Box::new(DefaultCmp))); + + b.iter(|| { + let (k, v) = gen_key_val(&mut gen, 10, 10); + skm.insert(k, v); + }); +} + +fn bench_hashmap_insert(b: &mut Bencher) { + let mut gen = rand::thread_rng(); + let mut gen = gen.gen_ascii_chars(); + let mut hm = HashMap::new(); + + b.iter(|| { + let (k, v) = gen_key_val(&mut gen, 10, 10); + hm.insert(k, v); + }); +} + +benchmark_group!( + basic, + bench_gen_key_val, + bench_skipmap_insert, + bench_hashmap_insert +); +benchmark_main!(basic);