From ecbc2ee8e5cb45be7c24d1dcc122b36405e95879 Mon Sep 17 00:00:00 2001 From: Astro Date: Tue, 6 Mar 2018 17:20:07 +0100 Subject: [PATCH] Catch insert() on ManagedMap with zero-sized backing store --- src/map.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/map.rs b/src/map.rs index 38ee18d..de7eaea 100644 --- a/src/map.rs +++ b/src/map.rs @@ -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, (K, V)> { 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) => { match binary_search_by_key(pairs, &key) { 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]); } + #[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] fn test_remove_nonexistent() { let mut pairs = one_pair_full();