Skip to content

Commit 3453de7

Browse files
committed
fixed merge tests
1 parent 7b34ed2 commit 3453de7

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

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

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use core::assert_matches;
2-
use std::iter;
32
use std::ops::Bound::{Excluded, Included, Unbounded};
43
use std::panic::{AssertUnwindSafe, catch_unwind};
54
use std::sync::atomic::AtomicUsize;
65
use std::sync::atomic::Ordering::SeqCst;
6+
use std::{cmp, iter};
77

88
use super::*;
99
use crate::boxed::Box;
@@ -2144,45 +2144,59 @@ macro_rules! create_merge_test {
21442144

21452145
a.merge(b, |_, a_val, b_val| a_val + b_val);
21462146

2147-
assert_eq!(a.len(), $len);
2148-
assert_eq!(b.len(), 0);
2147+
assert_eq!(a.len(), cmp::max($len, 8));
21492148

2150-
for i in 0..$len {
2149+
for i in 0..cmp::max($len, 8) {
21512150
if i < 5 {
21522151
assert_eq!(a[&i], i);
21532152
} else {
2154-
assert_eq!(a[&i], i + 2 * i);
2153+
if i < cmp::min($len, 8) {
2154+
assert_eq!(a[&i], i + 2 * i);
2155+
} else if i >= $len {
2156+
assert_eq!(a[&i], i);
2157+
} else {
2158+
assert_eq!(a[&i], 2 * i);
2159+
}
21552160
}
21562161
}
21572162

21582163
a.check();
2159-
assert_eq!(a.remove(&($len - 1)), Some(($len - 1) + 2 * ($len - 1)));
2164+
assert_eq!(
2165+
a.remove(&($len - 1)),
2166+
if $len >= 5 && $len < 8 {
2167+
Some(($len - 1) + 2 * ($len - 1))
2168+
} else {
2169+
Some(2 * ($len - 1))
2170+
}
2171+
);
21602172
assert_eq!(a.insert($len - 1, 20), None);
21612173
a.check();
21622174
}
21632175
};
21642176
}
21652177

21662178
// These are mostly for testing the algorithm that "fixes" the right edge after insertion.
2179+
// Single node, merge conflicting key values.
2180+
create_merge_test!(test_merge_7, 7);
21672181
// Single node.
2168-
create_merge_test!(test_append_9, 9);
2182+
create_merge_test!(test_merge_9, 9);
21692183
// Two leafs that don't need fixing.
2170-
create_merge_test!(test_append_17, 17);
2184+
create_merge_test!(test_merge_17, 17);
21712185
// Two leafs where the second one ends up underfull and needs stealing at the end.
2172-
create_merge_test!(test_append_14, 14);
2186+
create_merge_test!(test_merge_14, 14);
21732187
// Two leafs where the second one ends up empty because the insertion finished at the root.
2174-
create_merge_test!(test_append_12, 12);
2188+
create_merge_test!(test_merge_12, 12);
21752189
// Three levels; insertion finished at the root.
2176-
create_merge_test!(test_append_144, 144);
2190+
create_merge_test!(test_merge_144, 144);
21772191
// Three levels; insertion finished at leaf while there is an empty node on the second level.
2178-
create_merge_test!(test_append_145, 145);
2192+
create_merge_test!(test_merge_145, 145);
21792193
// Tests for several randomly chosen sizes.
2180-
create_merge_test!(test_append_170, 170);
2181-
create_merge_test!(test_append_181, 181);
2194+
create_merge_test!(test_merge_170, 170);
2195+
create_merge_test!(test_merge_181, 181);
21822196
#[cfg(not(miri))] // Miri is too slow
2183-
create_merge_test!(test_append_239, 239);
2197+
create_merge_test!(test_merge_239, 239);
21842198
#[cfg(not(miri))] // Miri is too slow
2185-
create_merge_test!(test_append_1700, 1700);
2199+
create_merge_test!(test_merge_1700, 1700);
21862200

21872201
#[test]
21882202
#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
@@ -2680,10 +2694,10 @@ fn test_id_based_merge() {
26802694
lhs.insert(IdBased { id: 0, name: "lhs_k".to_string() }, "1".to_string());
26812695
rhs.insert(IdBased { id: 0, name: "rhs_k".to_string() }, "2".to_string());
26822696

2683-
lhs.merge(rhs, |_, lhs_val, rhs_val| {
2684-
lhs_val.push_str(rhs_val);
2697+
lhs.merge(rhs, |_, mut lhs_val, rhs_val| {
2698+
lhs_val.push_str(&rhs_val);
26852699
lhs_val
26862700
});
26872701

2688-
assert_eq!(lhs.pop_first().unwrap().0.name, "12".to_string());
2702+
assert_eq!(lhs.pop_first().unwrap().0.name, "lhs_k".to_string());
26892703
}

library/alloctests/tests/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![feature(allocator_api)]
22
#![feature(binary_heap_pop_if)]
3+
#![feature(btree_merge)]
34
#![feature(const_heap)]
45
#![feature(deque_extend_front)]
56
#![feature(iter_array_chunks)]

0 commit comments

Comments
 (0)