From 6229ba7acc92d8bb2786ab9c7b622bf0648f00f9 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Sat, 23 Nov 2024 19:26:15 -0600 Subject: [PATCH] Fix implementation; tests passing. --- src/main.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index e0b4ff0..ee46d19 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,13 +4,21 @@ struct HashMap<'a, K: PartialEq, V> { } impl<'a, K: PartialEq, V> HashMap<'a, K, V> { - fn new(capacity: usize, hash_fn: fn(&K) -> usize) -> Self { + fn new(hash_fn: fn(&K) -> usize) -> Self { HashMap { - table: Vec::with_capacity(capacity), + table: vec![None; 16], hash_fn, } } + + fn with_capacity(capacity: usize, hash_fn: fn(&K) -> usize) -> Self { + HashMap { + table: vec![None; capacity], + hash_fn + } + } + fn put(&mut self, k: &'a K, v: &'a V) { let hash = (self.hash_fn)(&k); let target_index = hash % self.table.capacity(); @@ -55,7 +63,16 @@ mod hash_map_tests { fn simple_put_and_get() { let jesse = String::from("Jesse"); let brault = String::from("Brault"); - let mut map: HashMap = HashMap::new(8, |s| s.len()); + let mut map: HashMap = HashMap::new(|s| s.len()); + map.put(&jesse, &brault); + assert_eq!(map.get(&jesse), Some(&brault)); + } + + #[test] + fn put_and_get_with_str() { + let jesse = "Jesse"; + let brault = "Brault"; + let mut map: HashMap<&str, &str> = HashMap::new(|s| s.len()); map.put(&jesse, &brault); assert_eq!(map.get(&jesse), Some(&brault)); }