Skip to content

Commit 9525a63

Browse files
authored
Merge pull request #125 from cuviper/refactor-core
Refactor the map core to its own module
2 parents 22ecbbb + c037be8 commit 9525a63

File tree

11 files changed

+1419
-1316
lines changed

11 files changed

+1419
-1316
lines changed

benches/bench.rs

+52-52
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ fn new_hashmap(b: &mut Bencher) {
3030
}
3131

3232
#[bench]
33-
fn new_orderedmap(b: &mut Bencher) {
33+
fn new_indexmap(b: &mut Bencher) {
3434
b.iter(|| IndexMap::<String, String>::new());
3535
}
3636

@@ -40,7 +40,7 @@ fn with_capacity_10e5_hashmap(b: &mut Bencher) {
4040
}
4141

4242
#[bench]
43-
fn with_capacity_10e5_orderedmap(b: &mut Bencher) {
43+
fn with_capacity_10e5_indexmap(b: &mut Bencher) {
4444
b.iter(|| IndexMap::<String, String>::with_capacity(10_000));
4545
}
4646

@@ -57,7 +57,7 @@ fn insert_hashmap_10_000(b: &mut Bencher) {
5757
}
5858

5959
#[bench]
60-
fn insert_orderedmap_10_000(b: &mut Bencher) {
60+
fn insert_indexmap_10_000(b: &mut Bencher) {
6161
let c = 10_000;
6262
b.iter(|| {
6363
let mut map = IndexMap::with_capacity(c);
@@ -81,7 +81,7 @@ fn insert_hashmap_string_10_000(b: &mut Bencher) {
8181
}
8282

8383
#[bench]
84-
fn insert_orderedmap_string_10_000(b: &mut Bencher) {
84+
fn insert_indexmap_string_10_000(b: &mut Bencher) {
8585
let c = 10_000;
8686
b.iter(|| {
8787
let mut map = IndexMap::with_capacity(c);
@@ -106,7 +106,7 @@ fn insert_hashmap_str_10_000(b: &mut Bencher) {
106106
}
107107

108108
#[bench]
109-
fn insert_orderedmap_str_10_000(b: &mut Bencher) {
109+
fn insert_indexmap_str_10_000(b: &mut Bencher) {
110110
let c = 10_000;
111111
let ss = Vec::from_iter((0..c).map(|x| x.to_string()));
112112
b.iter(|| {
@@ -132,7 +132,7 @@ fn insert_hashmap_int_bigvalue_10_000(b: &mut Bencher) {
132132
}
133133

134134
#[bench]
135-
fn insert_orderedmap_int_bigvalue_10_000(b: &mut Bencher) {
135+
fn insert_indexmap_int_bigvalue_10_000(b: &mut Bencher) {
136136
let c = 10_000;
137137
let value = [0u64; 10];
138138
b.iter(|| {
@@ -157,7 +157,7 @@ fn insert_hashmap_100_000(b: &mut Bencher) {
157157
}
158158

159159
#[bench]
160-
fn insert_orderedmap_100_000(b: &mut Bencher) {
160+
fn insert_indexmap_100_000(b: &mut Bencher) {
161161
let c = 100_000;
162162
b.iter(|| {
163163
let mut map = IndexMap::with_capacity(c);
@@ -181,7 +181,7 @@ fn insert_hashmap_150(b: &mut Bencher) {
181181
}
182182

183183
#[bench]
184-
fn insert_orderedmap_150(b: &mut Bencher) {
184+
fn insert_indexmap_150(b: &mut Bencher) {
185185
let c = 150;
186186
b.iter(|| {
187187
let mut map = IndexMap::with_capacity(c);
@@ -205,7 +205,7 @@ fn entry_hashmap_150(b: &mut Bencher) {
205205
}
206206

207207
#[bench]
208-
fn entry_orderedmap_150(b: &mut Bencher) {
208+
fn entry_indexmap_150(b: &mut Bencher) {
209209
let c = 150;
210210
b.iter(|| {
211211
let mut map = IndexMap::with_capacity(c);
@@ -229,7 +229,7 @@ fn iter_sum_hashmap_10_000(b: &mut Bencher) {
229229
}
230230

231231
#[bench]
232-
fn iter_sum_orderedmap_10_000(b: &mut Bencher) {
232+
fn iter_sum_indexmap_10_000(b: &mut Bencher) {
233233
let c = 10_000;
234234
let mut map = IndexMap::with_capacity(c);
235235
let len = c - c / 10;
@@ -257,7 +257,7 @@ fn iter_black_box_hashmap_10_000(b: &mut Bencher) {
257257
}
258258

259259
#[bench]
260-
fn iter_black_box_orderedmap_10_000(b: &mut Bencher) {
260+
fn iter_black_box_indexmap_10_000(b: &mut Bencher) {
261261
let c = 10_000;
262262
let mut map = IndexMap::with_capacity(c);
263263
let len = c - c / 10;
@@ -317,7 +317,7 @@ fn lookup_hashmap_10_000_noexist(b: &mut Bencher) {
317317
}
318318

319319
#[bench]
320-
fn lookup_orderedmap_10_000_exist(b: &mut Bencher) {
320+
fn lookup_indexmap_10_000_exist(b: &mut Bencher) {
321321
let c = 10_000;
322322
let mut map = IndexMap::with_capacity(c);
323323
let keys = shuffled_keys(0..c);
@@ -334,7 +334,7 @@ fn lookup_orderedmap_10_000_exist(b: &mut Bencher) {
334334
}
335335

336336
#[bench]
337-
fn lookup_orderedmap_10_000_noexist(b: &mut Bencher) {
337+
fn lookup_indexmap_10_000_noexist(b: &mut Bencher) {
338338
let c = 10_000;
339339
let mut map = IndexMap::with_capacity(c);
340340
let keys = shuffled_keys(0..c);
@@ -357,7 +357,7 @@ const SORT_MAP_SIZE: usize = 10_000;
357357

358358
// use lazy_static so that comparison benchmarks use the exact same inputs
359359
lazy_static! {
360-
static ref KEYS: Vec<u32> = { shuffled_keys(0..LOOKUP_MAP_SIZE) };
360+
static ref KEYS: Vec<u32> = shuffled_keys(0..LOOKUP_MAP_SIZE);
361361
}
362362

363363
lazy_static! {
@@ -373,7 +373,7 @@ lazy_static! {
373373
}
374374

375375
lazy_static! {
376-
static ref OMAP_100K: IndexMap<u32, u32> = {
376+
static ref IMAP_100K: IndexMap<u32, u32> = {
377377
let c = LOOKUP_MAP_SIZE;
378378
let mut map = IndexMap::with_capacity(c as usize);
379379
let keys = &*KEYS;
@@ -385,7 +385,7 @@ lazy_static! {
385385
}
386386

387387
lazy_static! {
388-
static ref OMAP_SORT_U32: IndexMap<u32, u32> = {
388+
static ref IMAP_SORT_U32: IndexMap<u32, u32> = {
389389
let mut map = IndexMap::with_capacity(SORT_MAP_SIZE);
390390
for &key in &KEYS[..SORT_MAP_SIZE] {
391391
map.insert(key, key);
@@ -394,7 +394,7 @@ lazy_static! {
394394
};
395395
}
396396
lazy_static! {
397-
static ref OMAP_SORT_S: IndexMap<String, String> = {
397+
static ref IMAP_SORT_S: IndexMap<String, String> = {
398398
let mut map = IndexMap::with_capacity(SORT_MAP_SIZE);
399399
for &key in &KEYS[..SORT_MAP_SIZE] {
400400
map.insert(format!("{:^16x}", &key), String::new());
@@ -416,8 +416,8 @@ fn lookup_hashmap_100_000_multi(b: &mut Bencher) {
416416
}
417417

418418
#[bench]
419-
fn lookup_ordermap_100_000_multi(b: &mut Bencher) {
420-
let map = &*OMAP_100K;
419+
fn lookup_indexmap_100_000_multi(b: &mut Bencher) {
420+
let map = &*IMAP_100K;
421421
b.iter(|| {
422422
let mut found = 0;
423423
for key in 0..LOOKUP_SAMPLE_SIZE {
@@ -442,8 +442,8 @@ fn lookup_hashmap_100_000_inorder_multi(b: &mut Bencher) {
442442
}
443443

444444
#[bench]
445-
fn lookup_ordermap_100_000_inorder_multi(b: &mut Bencher) {
446-
let map = &*OMAP_100K;
445+
fn lookup_indexmap_100_000_inorder_multi(b: &mut Bencher) {
446+
let map = &*IMAP_100K;
447447
let keys = &*KEYS;
448448
b.iter(|| {
449449
let mut found = 0;
@@ -465,8 +465,8 @@ fn lookup_hashmap_100_000_single(b: &mut Bencher) {
465465
}
466466

467467
#[bench]
468-
fn lookup_ordermap_100_000_single(b: &mut Bencher) {
469-
let map = &*OMAP_100K;
468+
fn lookup_indexmap_100_000_single(b: &mut Bencher) {
469+
let map = &*IMAP_100K;
470470
let mut iter = (0..LOOKUP_MAP_SIZE + LOOKUP_SAMPLE_SIZE).cycle();
471471
b.iter(|| {
472472
let key = iter.next().unwrap();
@@ -490,7 +490,7 @@ fn grow_fnv_hashmap_100_000(b: &mut Bencher) {
490490
}
491491

492492
#[bench]
493-
fn grow_fnv_ordermap_100_000(b: &mut Bencher) {
493+
fn grow_fnv_indexmap_100_000(b: &mut Bencher) {
494494
b.iter(|| {
495495
let mut map: IndexMap<_, _, FnvBuilder> = IndexMap::default();
496496
for x in 0..GROW_SIZE {
@@ -529,7 +529,7 @@ fn hashmap_merge_shuffle(b: &mut Bencher) {
529529
}
530530

531531
#[bench]
532-
fn ordermap_merge_simple(b: &mut Bencher) {
532+
fn indexmap_merge_simple(b: &mut Bencher) {
533533
let first_map: IndexMap<u64, _> = (0..MERGE).map(|i| (i, ())).collect();
534534
let second_map: IndexMap<u64, _> = (MERGE..MERGE * 2).map(|i| (i, ())).collect();
535535
b.iter(|| {
@@ -540,7 +540,7 @@ fn ordermap_merge_simple(b: &mut Bencher) {
540540
}
541541

542542
#[bench]
543-
fn ordermap_merge_shuffle(b: &mut Bencher) {
543+
fn indexmap_merge_shuffle(b: &mut Bencher) {
544544
let first_map: IndexMap<u64, _> = (0..MERGE).map(|i| (i, ())).collect();
545545
let second_map: IndexMap<u64, _> = (MERGE..MERGE * 2).map(|i| (i, ())).collect();
546546
let mut v = Vec::new();
@@ -556,8 +556,8 @@ fn ordermap_merge_shuffle(b: &mut Bencher) {
556556
}
557557

558558
#[bench]
559-
fn swap_remove_ordermap_100_000(b: &mut Bencher) {
560-
let map = OMAP_100K.clone();
559+
fn swap_remove_indexmap_100_000(b: &mut Bencher) {
560+
let map = IMAP_100K.clone();
561561
let mut keys = Vec::from_iter(map.keys().cloned());
562562
let mut rng = SmallRng::from_entropy();
563563
keys.shuffle(&mut rng);
@@ -573,8 +573,8 @@ fn swap_remove_ordermap_100_000(b: &mut Bencher) {
573573
}
574574

575575
#[bench]
576-
fn shift_remove_ordermap_100_000_few(b: &mut Bencher) {
577-
let map = OMAP_100K.clone();
576+
fn shift_remove_indexmap_100_000_few(b: &mut Bencher) {
577+
let map = IMAP_100K.clone();
578578
let mut keys = Vec::from_iter(map.keys().cloned());
579579
let mut rng = SmallRng::from_entropy();
580580
keys.shuffle(&mut rng);
@@ -585,13 +585,13 @@ fn shift_remove_ordermap_100_000_few(b: &mut Bencher) {
585585
for key in &keys {
586586
map.shift_remove(key);
587587
}
588-
assert_eq!(map.len(), OMAP_100K.len() - keys.len());
588+
assert_eq!(map.len(), IMAP_100K.len() - keys.len());
589589
map
590590
});
591591
}
592592

593593
#[bench]
594-
fn shift_remove_ordermap_2_000_full(b: &mut Bencher) {
594+
fn shift_remove_indexmap_2_000_full(b: &mut Bencher) {
595595
let mut keys = KEYS[..2_000].to_vec();
596596
let mut map = IndexMap::with_capacity(keys.len());
597597
for &key in &keys {
@@ -611,8 +611,8 @@ fn shift_remove_ordermap_2_000_full(b: &mut Bencher) {
611611
}
612612

613613
#[bench]
614-
fn pop_ordermap_100_000(b: &mut Bencher) {
615-
let map = OMAP_100K.clone();
614+
fn pop_indexmap_100_000(b: &mut Bencher) {
615+
let map = IMAP_100K.clone();
616616

617617
b.iter(|| {
618618
let mut map = map.clone();
@@ -625,8 +625,8 @@ fn pop_ordermap_100_000(b: &mut Bencher) {
625625
}
626626

627627
#[bench]
628-
fn few_retain_ordermap_100_000(b: &mut Bencher) {
629-
let map = OMAP_100K.clone();
628+
fn few_retain_indexmap_100_000(b: &mut Bencher) {
629+
let map = IMAP_100K.clone();
630630

631631
b.iter(|| {
632632
let mut map = map.clone();
@@ -647,8 +647,8 @@ fn few_retain_hashmap_100_000(b: &mut Bencher) {
647647
}
648648

649649
#[bench]
650-
fn half_retain_ordermap_100_000(b: &mut Bencher) {
651-
let map = OMAP_100K.clone();
650+
fn half_retain_indexmap_100_000(b: &mut Bencher) {
651+
let map = IMAP_100K.clone();
652652

653653
b.iter(|| {
654654
let mut map = map.clone();
@@ -669,8 +669,8 @@ fn half_retain_hashmap_100_000(b: &mut Bencher) {
669669
}
670670

671671
#[bench]
672-
fn many_retain_ordermap_100_000(b: &mut Bencher) {
673-
let map = OMAP_100K.clone();
672+
fn many_retain_indexmap_100_000(b: &mut Bencher) {
673+
let map = IMAP_100K.clone();
674674

675675
b.iter(|| {
676676
let mut map = map.clone();
@@ -698,8 +698,8 @@ pub fn simple_sort<K: Ord + Hash, V>(m: &mut IndexMap<K, V>) {
698698
}
699699

700700
#[bench]
701-
fn ordermap_sort_s(b: &mut Bencher) {
702-
let map = OMAP_SORT_S.clone();
701+
fn indexmap_sort_s(b: &mut Bencher) {
702+
let map = IMAP_SORT_S.clone();
703703

704704
// there's a map clone there, but it's still useful to profile this
705705
b.iter(|| {
@@ -710,8 +710,8 @@ fn ordermap_sort_s(b: &mut Bencher) {
710710
}
711711

712712
#[bench]
713-
fn ordermap_simple_sort_s(b: &mut Bencher) {
714-
let map = OMAP_SORT_S.clone();
713+
fn indexmap_simple_sort_s(b: &mut Bencher) {
714+
let map = IMAP_SORT_S.clone();
715715

716716
// there's a map clone there, but it's still useful to profile this
717717
b.iter(|| {
@@ -722,8 +722,8 @@ fn ordermap_simple_sort_s(b: &mut Bencher) {
722722
}
723723

724724
#[bench]
725-
fn ordermap_sort_u32(b: &mut Bencher) {
726-
let map = OMAP_SORT_U32.clone();
725+
fn indexmap_sort_u32(b: &mut Bencher) {
726+
let map = IMAP_SORT_U32.clone();
727727

728728
// there's a map clone there, but it's still useful to profile this
729729
b.iter(|| {
@@ -734,8 +734,8 @@ fn ordermap_sort_u32(b: &mut Bencher) {
734734
}
735735

736736
#[bench]
737-
fn ordermap_simple_sort_u32(b: &mut Bencher) {
738-
let map = OMAP_SORT_U32.clone();
737+
fn indexmap_simple_sort_u32(b: &mut Bencher) {
738+
let map = IMAP_SORT_U32.clone();
739739

740740
// there's a map clone there, but it's still useful to profile this
741741
b.iter(|| {
@@ -747,15 +747,15 @@ fn ordermap_simple_sort_u32(b: &mut Bencher) {
747747

748748
// measure the fixed overhead of cloning in sort benchmarks
749749
#[bench]
750-
fn ordermap_clone_for_sort_s(b: &mut Bencher) {
751-
let map = OMAP_SORT_S.clone();
750+
fn indexmap_clone_for_sort_s(b: &mut Bencher) {
751+
let map = IMAP_SORT_S.clone();
752752

753753
b.iter(|| map.clone());
754754
}
755755

756756
#[bench]
757-
fn ordermap_clone_for_sort_u32(b: &mut Bencher) {
758-
let map = OMAP_SORT_U32.clone();
757+
fn indexmap_clone_for_sort_u32(b: &mut Bencher) {
758+
let map = IMAP_SORT_U32.clone();
759759

760760
b.iter(|| map.clone());
761761
}

benches/faststring.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ fn insert_hashmap_string_oneshot_10_000(b: &mut Bencher) {
9494
}
9595

9696
#[bench]
97-
fn insert_orderedmap_string_10_000(b: &mut Bencher) {
97+
fn insert_indexmap_string_10_000(b: &mut Bencher) {
9898
let c = 10_000;
9999
b.iter(|| {
100100
let mut map = IndexMap::with_capacity(c);
@@ -144,7 +144,7 @@ fn lookup_hashmap_10_000_exist_string_oneshot(b: &mut Bencher) {
144144
}
145145

146146
#[bench]
147-
fn lookup_ordermap_10_000_exist_string(b: &mut Bencher) {
147+
fn lookup_indexmap_10_000_exist_string(b: &mut Bencher) {
148148
let c = 10_000;
149149
let mut map = IndexMap::with_capacity(c);
150150
let keys = shuffled_keys(0..c);
@@ -162,7 +162,7 @@ fn lookup_ordermap_10_000_exist_string(b: &mut Bencher) {
162162
}
163163

164164
#[bench]
165-
fn lookup_ordermap_10_000_exist_string_oneshot(b: &mut Bencher) {
165+
fn lookup_indexmap_10_000_exist_string_oneshot(b: &mut Bencher) {
166166
let c = 10_000;
167167
let mut map = IndexMap::with_capacity(c);
168168
let keys = shuffled_keys(0..c);

0 commit comments

Comments
 (0)