Skip to content

Commit d00c850

Browse files
committed
BTreeMap: correct tests for alternative choices of B
1 parent d3163e9 commit d00c850

File tree

3 files changed

+8
-81
lines changed

3 files changed

+8
-81
lines changed

library/alloc/benches/btree/map.rs

+2-76
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@ pub fn iter_1m(b: &mut Bencher) {
283283
bench_iter(b, 1_000, 1_000_000);
284284
}
285285

286+
// On Windows, this is a factor 11 away from causing stack overflow,
287+
// where node size grows to roughly `node::CAPACITY * FAT * 8` = 300 KB.
286288
const FAT: usize = 256;
287289

288290
// The returned map has small keys and values.
@@ -296,11 +298,6 @@ fn fat_val_map(n: usize) -> BTreeMap<usize, [usize; FAT]> {
296298
(0..n).map(|i| (i, [i; FAT])).collect::<BTreeMap<_, _>>()
297299
}
298300

299-
// The returned map has large keys and values.
300-
fn fat_map(n: usize) -> BTreeMap<[usize; FAT], [usize; FAT]> {
301-
(0..n).map(|i| ([i; FAT], [i; FAT])).collect::<BTreeMap<_, _>>()
302-
}
303-
304301
#[bench]
305302
pub fn clone_slim_100(b: &mut Bencher) {
306303
let src = slim_map(100);
@@ -513,74 +510,3 @@ pub fn clone_fat_val_100_and_remove_half(b: &mut Bencher) {
513510
map
514511
})
515512
}
516-
517-
#[bench]
518-
pub fn clone_fat_100(b: &mut Bencher) {
519-
let src = fat_map(100);
520-
b.iter(|| src.clone())
521-
}
522-
523-
#[bench]
524-
pub fn clone_fat_100_and_clear(b: &mut Bencher) {
525-
let src = fat_map(100);
526-
b.iter(|| src.clone().clear())
527-
}
528-
529-
#[bench]
530-
pub fn clone_fat_100_and_drain_all(b: &mut Bencher) {
531-
let src = fat_map(100);
532-
b.iter(|| src.clone().drain_filter(|_, _| true).count())
533-
}
534-
535-
#[bench]
536-
pub fn clone_fat_100_and_drain_half(b: &mut Bencher) {
537-
let src = fat_map(100);
538-
b.iter(|| {
539-
let mut map = src.clone();
540-
assert_eq!(map.drain_filter(|i, _| i[0] % 2 == 0).count(), 100 / 2);
541-
assert_eq!(map.len(), 100 / 2);
542-
})
543-
}
544-
545-
#[bench]
546-
pub fn clone_fat_100_and_into_iter(b: &mut Bencher) {
547-
let src = fat_map(100);
548-
b.iter(|| src.clone().into_iter().count())
549-
}
550-
551-
#[bench]
552-
pub fn clone_fat_100_and_pop_all(b: &mut Bencher) {
553-
let src = fat_map(100);
554-
b.iter(|| {
555-
let mut map = src.clone();
556-
while map.pop_first().is_some() {}
557-
map
558-
});
559-
}
560-
561-
#[bench]
562-
pub fn clone_fat_100_and_remove_all(b: &mut Bencher) {
563-
let src = fat_map(100);
564-
b.iter(|| {
565-
let mut map = src.clone();
566-
while let Some(elt) = map.iter().map(|(&i, _)| i).next() {
567-
let v = map.remove(&elt);
568-
debug_assert!(v.is_some());
569-
}
570-
map
571-
});
572-
}
573-
574-
#[bench]
575-
pub fn clone_fat_100_and_remove_half(b: &mut Bencher) {
576-
let src = fat_map(100);
577-
b.iter(|| {
578-
let mut map = src.clone();
579-
for i in (0..100).step_by(2) {
580-
let v = map.remove(&[i; FAT]);
581-
debug_assert!(v.is_some());
582-
}
583-
assert_eq!(map.len(), 100 / 2);
584-
map
585-
})
586-
}

library/alloc/src/collections/btree/map/tests.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,9 @@ impl<'a, K: 'a, V: 'a> NodeRef<marker::Immut<'a>, K, V, marker::LeafOrInternal>
137137
}
138138
}
139139

140-
// Tests our value of MIN_INSERTS_HEIGHT_2. It may change according to the
141-
// implementation of insertion, but it's best to be aware of when it does.
140+
// Tests our value of MIN_INSERTS_HEIGHT_2. Failure may mean you just need to
141+
// adapt that value to match a change in node::CAPACITY or the choices made
142+
// during insertion, otherwise other test cases may fail or be less useful.
142143
#[test]
143144
fn test_levels() {
144145
let mut map = BTreeMap::new();

library/alloc/src/collections/btree/node/tests.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ fn test_partial_cmp_eq() {
113113
#[cfg(target_arch = "x86_64")]
114114
fn test_sizes() {
115115
assert_eq!(core::mem::size_of::<LeafNode<(), ()>>(), 16);
116-
assert_eq!(core::mem::size_of::<LeafNode<i64, i64>>(), 16 + CAPACITY * 8 * 2);
117-
assert_eq!(core::mem::size_of::<InternalNode<(), ()>>(), 112);
118-
assert_eq!(core::mem::size_of::<InternalNode<i64, i64>>(), 112 + CAPACITY * 8 * 2);
116+
assert_eq!(core::mem::size_of::<LeafNode<i64, i64>>(), 16 + CAPACITY * 2 * 8);
117+
assert_eq!(core::mem::size_of::<InternalNode<(), ()>>(), 16 + (CAPACITY + 1) * 8);
118+
assert_eq!(core::mem::size_of::<InternalNode<i64, i64>>(), 16 + (CAPACITY * 3 + 1) * 8);
119119
}

0 commit comments

Comments
 (0)