2014-07-15 23:39:32 +00:00
|
|
|
#![cfg(test)]
|
|
|
|
|
2019-11-13 23:32:36 +00:00
|
|
|
use std::collections::HashMap;
|
2024-07-28 22:13:50 +00:00
|
|
|
|
2019-11-27 18:29:00 +00:00
|
|
|
use test::Bencher;
|
2014-07-15 23:39:32 +00:00
|
|
|
|
|
|
|
#[bench]
|
2016-09-26 18:55:47 +00:00
|
|
|
fn new_drop(b: &mut Bencher) {
|
2014-07-15 23:39:32 +00:00
|
|
|
b.iter(|| {
|
2016-09-26 18:55:47 +00:00
|
|
|
let m: HashMap<i32, i32> = HashMap::new();
|
2014-07-15 23:39:32 +00:00
|
|
|
assert_eq!(m.len(), 0);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
2016-09-26 18:55:47 +00:00
|
|
|
fn new_insert_drop(b: &mut Bencher) {
|
2014-07-15 23:39:32 +00:00
|
|
|
b.iter(|| {
|
|
|
|
let mut m = HashMap::new();
|
2015-01-25 21:05:03 +00:00
|
|
|
m.insert(0, 0);
|
2014-07-15 23:39:32 +00:00
|
|
|
assert_eq!(m.len(), 1);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
2014-07-15 20:58:35 +00:00
|
|
|
fn grow_by_insertion(b: &mut Bencher) {
|
2014-07-15 23:39:32 +00:00
|
|
|
let mut m = HashMap::new();
|
|
|
|
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1..1001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(i, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut k = 1001;
|
|
|
|
|
|
|
|
b.iter(|| {
|
|
|
|
m.insert(k, k);
|
|
|
|
k += 1;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn find_existing(b: &mut Bencher) {
|
|
|
|
let mut m = HashMap::new();
|
|
|
|
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1..1001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(i, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
b.iter(|| {
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1..1001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.contains_key(&i);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn find_nonexisting(b: &mut Bencher) {
|
|
|
|
let mut m = HashMap::new();
|
|
|
|
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1..1001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(i, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
b.iter(|| {
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1001..2001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.contains_key(&i);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn hashmap_as_queue(b: &mut Bencher) {
|
|
|
|
let mut m = HashMap::new();
|
|
|
|
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1..1001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(i, i);
|
|
|
|
}
|
|
|
|
|
2015-01-25 21:05:03 +00:00
|
|
|
let mut k = 1;
|
2014-07-15 23:39:32 +00:00
|
|
|
|
|
|
|
b.iter(|| {
|
2014-11-06 17:24:47 +00:00
|
|
|
m.remove(&k);
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(k + 1000, k + 1000);
|
|
|
|
k += 1;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
2014-11-06 17:24:47 +00:00
|
|
|
fn get_remove_insert(b: &mut Bencher) {
|
2014-07-15 23:39:32 +00:00
|
|
|
let mut m = HashMap::new();
|
|
|
|
|
2015-12-03 01:07:29 +00:00
|
|
|
for i in 1..1001 {
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(i, i);
|
|
|
|
}
|
|
|
|
|
2015-01-25 21:05:03 +00:00
|
|
|
let mut k = 1;
|
2014-07-15 23:39:32 +00:00
|
|
|
|
|
|
|
b.iter(|| {
|
2014-11-06 17:24:47 +00:00
|
|
|
m.get(&(k + 400));
|
|
|
|
m.get(&(k + 2000));
|
|
|
|
m.remove(&k);
|
2014-07-15 23:39:32 +00:00
|
|
|
m.insert(k + 1000, k + 1000);
|
|
|
|
k += 1;
|
|
|
|
})
|
|
|
|
}
|