diff options
Diffstat (limited to 'src/index.rs')
-rw-r--r-- | src/index.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/index.rs b/src/index.rs index ed0183e..0166b0f 100644 --- a/src/index.rs +++ b/src/index.rs @@ -30,6 +30,11 @@ impl Index { } } + pub fn remove(&mut self, key: &str, value: &str) { + let kv = kv(key, value); + self.map.remove(&kv); + } + pub fn find(&self, key: &str, value: &str) -> Vec<ChunkId> { let kv = kv(key, value); if let Some(v) = self.map.get(&kv) { @@ -43,6 +48,15 @@ impl Index { self.generations.push(id) } + pub fn remove_generation(&mut self, id: &ChunkId) { + self.generations = self + .generations + .iter() + .cloned() + .filter(|x| x != id) + .collect(); + } + pub fn find_generations(&self) -> Vec<ChunkId> { self.generations.clone() } @@ -82,6 +96,16 @@ mod test { } #[test] + fn removes_inserted() { + let id: ChunkId = "id001".parse().unwrap(); + let mut idx = Index::default(); + idx.insert(id.clone(), "sha256", "abc"); + idx.remove("sha256", "abc"); + let ids: Vec<ChunkId> = idx.find("sha256", "abc"); + assert_eq!(ids, vec![]); + } + + #[test] fn has_no_generations_initially() { let idx = Index::default(); assert_eq!(idx.find_generations(), vec![]); @@ -94,4 +118,13 @@ mod test { idx.insert_generation(id.clone()); assert_eq!(idx.find_generations(), vec![id]); } + + #[test] + fn removes_generaion() { + let id: ChunkId = "id001".parse().unwrap(); + let mut idx = Index::default(); + idx.insert_generation(id.clone()); + idx.remove_generation(&id); + assert_eq!(idx.find_generations(), vec![]); + } } |