Catch insert() on ManagedMap with zero-sized backing store
This commit is contained in:
parent
660378c0bc
commit
ecbc2ee8e5
@ -157,6 +157,8 @@ impl<'a, K: Ord + 'a, V: 'a> ManagedMap<'a, K, V> {
|
|||||||
|
|
||||||
pub fn insert(&mut self, key: K, new_value: V) -> Result<Option<V>, (K, V)> {
|
pub fn insert(&mut self, key: K, new_value: V) -> Result<Option<V>, (K, V)> {
|
||||||
match self {
|
match self {
|
||||||
|
&mut ManagedMap::Borrowed(ref mut pairs) if pairs.len() < 1 =>
|
||||||
|
Err((key, new_value)), // no space at all
|
||||||
&mut ManagedMap::Borrowed(ref mut pairs) => {
|
&mut ManagedMap::Borrowed(ref mut pairs) => {
|
||||||
match binary_search_by_key(pairs, &key) {
|
match binary_search_by_key(pairs, &key) {
|
||||||
Err(_) if pairs[pairs.len() - 1].is_some() =>
|
Err(_) if pairs[pairs.len() - 1].is_some() =>
|
||||||
@ -398,6 +400,13 @@ mod test {
|
|||||||
assert_eq!(unwrap(&map), [Some(("a", 1)), Some(("b", 2)), Some(("c", 3)), None]);
|
assert_eq!(unwrap(&map), [Some(("a", 1)), Some(("b", 2)), Some(("c", 3)), None]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_insert_no_space() {
|
||||||
|
// Zero-sized backing store
|
||||||
|
let mut map = ManagedMap::Borrowed(&mut []);
|
||||||
|
assert_eq!(map.insert("a", 1), Err(("a", 1)));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_remove_nonexistent() {
|
fn test_remove_nonexistent() {
|
||||||
let mut pairs = one_pair_full();
|
let mut pairs = one_pair_full();
|
||||||
|
Loading…
Reference in New Issue
Block a user