From cccda38920288e53a70a60a44c7c17f2d7cb7413 Mon Sep 17 00:00:00 2001 From: Julien Lengrand-Lambert Date: Thu, 21 Nov 2013 11:08:35 +0100 Subject: [PATCH] Finishes implementing hash method --- 02_hash_maps/hm.py | 13 ++++++++++++- 02_hash_maps/hm_test.py | 6 +++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/02_hash_maps/hm.py b/02_hash_maps/hm.py index 71c80f2..9cf3a4e 100644 --- a/02_hash_maps/hm.py +++ b/02_hash_maps/hm.py @@ -12,8 +12,19 @@ class HashMap(): return self._size def _hash(self, value): + """ + Generates a hash for the given value. + The input is expected to be a String, with only ASCII characters. + """ if len(value) < 1: raise Exception("Size of value must be greater than one") - return 1 + + # hash function taken from HT3. + # We shift and add : << 4 is a *16 + h = 0 + for letter in value: + h = (h << 4) + ord(letter) + + return h diff --git a/02_hash_maps/hm_test.py b/02_hash_maps/hm_test.py index 1561125..5f16779 100644 --- a/02_hash_maps/hm_test.py +++ b/02_hash_maps/hm_test.py @@ -17,8 +17,12 @@ class test_hash_map(unittest.TestCase): def test__hash(self): hm = HashMap() + + value = "a" + self.assertEqual(hm._hash(value), ord(value)) + value = "test" - self.assertEqual(hm._hash("test"), 1) + self.assertEqual(hm._hash(value), 502948) value = "" self.assertRaises(Exception, lambda x : hm._hash(value))