Skip to content

Instantly share code, notes, and snippets.

@H2CO3
Created November 27, 2021 07:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save H2CO3/e20fa206a7a5dd851ff8e70832d877c0 to your computer and use it in GitHub Desktop.
Save H2CO3/e20fa206a7a5dd851ff8e70832d877c0 to your computer and use it in GitHub Desktop.
use std::iter;
use std::collections::BTreeMap;
use bencher::{ benchmark_group, benchmark_main, Bencher };
use rand::prelude::*;
use rand_pcg::Pcg64;
use heapless::FnvIndexMap;
fn get_keys_values(n: usize) -> Vec<(&'static str, u8)> {
let mut rng = Pcg64::seed_from_u64(2);
let values = iter::from_fn(|| rng.gen::<u8>().into());
let keys = [
"ab", "ac", "ad", "ae", "af", "ag", "ah", "ai",
"XB", "XC", "XD", "XE", "XF", "XG", "XH", "XI",
]
.iter()
.copied()
.cycle();
keys.zip(values).take(n).collect()
}
fn index_map(b: &mut Bencher) {
let kvs = get_keys_values(5_000);
let mut map = FnvIndexMap::<&str, u8, 32>::new();
b.iter(move || {
for &(key, value) in &kvs {
map.insert(key, value).unwrap();
}
});
}
fn btree_map(b: &mut Bencher) {
let kvs = get_keys_values(5_000);
let mut map = BTreeMap::<&str, u8>::new();
b.iter(move || {
for &(key, value) in &kvs {
map.insert(key, value);
}
});
}
benchmark_group!(benches, index_map, btree_map);
benchmark_main!(benches);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment