Esempio n. 1
0
 def setUp(self):
     self.ht = HashTable()
     push = self.ht.push
     push("apple", 100)  # hashed key: 10
     push("orange", 200)  # hashed key: 9
     push("melon", 300)  # hashed key: 2
     push("strawberry", 400)  # hashed key: 4
     push("banana", 500)  # hashed key: 1
     push("watermelon", 600)  # hashed key: 10
     push("mango", 550)  # hashed key: 4
Esempio n. 2
0
 def test_contains(self):
     ht = HashTable()
     ht.set('I', 1)
     ht.set('V', 5)
     ht.set('X', 10)
     assert ht.contains('I') is True
     assert ht.contains('V') is True
     assert ht.contains('X') is True
     assert ht.contains('A') is False
Esempio n. 3
0
 def test_size(self):
     ht = HashTable()
     assert ht.size == 0
     ht.set('I', 1)
     assert ht.size == 1
     ht.set('V', 5)
     assert ht.size == 2
     ht.set('X', 10)
     assert ht.size == 3
Esempio n. 4
0
class TestHashTable(unittest.TestCase):
    def setUp(self):
        self.ht = HashTable()
        push = self.ht.push
        push("apple", 100)  # hashed key: 10
        push("orange", 200)  # hashed key: 9
        push("melon", 300)  # hashed key: 2
        push("strawberry", 400)  # hashed key: 4
        push("banana", 500)  # hashed key: 1
        push("watermelon", 600)  # hashed key: 10
        push("mango", 550)  # hashed key: 4

    def tearDown(self):
        del self.ht

    def test_01_peek(self):
        self.assertEqual(self.ht.peek("apple"), 100)
        self.assertEqual(self.ht.peek("orange"), 200)
        self.assertEqual(self.ht.peek("melon"), 300)
        self.assertEqual(self.ht.peek("strawberry"), 400)
        self.assertEqual(self.ht.peek("banana"), 500)
        self.assertEqual(self.ht.peek("watermelon"), 600)
        self.assertEqual(self.ht.peek("mango"), 550)

    def test_02_pop(self):
        self.assertEqual(self.ht.pop("apple"), 100)
        self.assertEqual(self.ht.pop("orange"), 200)
        self.assertEqual(self.ht.pop("melon"), 300)
        self.assertEqual(self.ht.pop("strawberry"), 400)
        self.assertEqual(self.ht.pop("banana"), 500)
        self.assertEqual(self.ht.pop("watermelon"), 600)
        self.assertEqual(self.ht.pop("mango"), 550)
        with self.assertRaises(KeyError):
            self.ht.pop("apple")

    def test_03_expand(self):
        push = self.ht.push
        self.assertEqual(self.ht.capacity, 10)
        push("tomato", 101)
        push("pear", 102)
        push("peach", 103)
        push("another", 104)
        push("other", 105)
        push("something", 106)
        self.assertEqual(self.ht.capacity, 15)

    def test_04_modify(self):
        push = self.ht.push
        push("apple", 101)
        push("orange", 201)
        push("melon", 301)
        push("strawberry", 401)
        push("banana", 501)
        push("watermelon", 601)
        push("mango", 551)
        self.assertEqual(self.ht.peek("apple"), 101)
        self.assertEqual(self.ht.peek("orange"), 201)
        self.assertEqual(self.ht.peek("melon"), 301)
        self.assertEqual(self.ht.peek("strawberry"), 401)
        self.assertEqual(self.ht.peek("banana"), 501)
        self.assertEqual(self.ht.peek("watermelon"), 601)
        self.assertEqual(self.ht.peek("mango"), 551)
Esempio n. 5
0
 def test_set_and_get(self):
     ht = HashTable()
     ht.set('I', 1)
     ht.set('V', 5)
     ht.set('X', 10)
     assert ht.get('I') == 1
     assert ht.get('V') == 5
     assert ht.get('X') == 10
     assert ht.length() == 3
     assert ht.size == 3
     with self.assertRaises(KeyError):
         ht.get('A')  # Key does not exist
Esempio n. 6
0
 def test_resize(self):
     ht = HashTable(2)  # Set init_size to 2
     assert ht.size == 0
     assert len(ht.buckets) == 2
     assert ht.load_factor() == 0
     ht.set('I', 1)
     assert ht.size == 1
     assert len(ht.buckets) == 2
     assert ht.load_factor() == 0.5
     ht.set('V', 5)  # Should trigger resize
     assert ht.size == 2
     assert len(ht.buckets) == 4
     assert ht.load_factor() == 0.5
     ht.set('X', 10)
     assert ht.size == 3
     assert len(ht.buckets) == 4
     assert ht.load_factor() == 0.75
     ht.set('L', 50)  # Should trigger resize
     assert ht.size == 4
     assert len(ht.buckets) == 8
     assert ht.load_factor() == 0.5
Esempio n. 7
0
 def test_items(self):
     ht = HashTable()
     assert ht.items() == []
     ht.set('I', 1)
     assert ht.items() == [('I', 1)]
     ht.set('V', 5)
     self.assertCountEqual(ht.items(), [('I', 1), ('V', 5)])
     ht.set('X', 10)
     self.assertCountEqual(ht.items(), [('I', 1), ('V', 5), ('X', 10)])
Esempio n. 8
0
 def test_length(self):
     ht = HashTable()
     assert ht.length() == 0
     ht.set('I', 1)
     assert ht.length() == 1
     ht.set('V', 5)
     assert ht.length() == 2
     ht.set('X', 10)
     assert ht.length() == 3
Esempio n. 9
0
 def test_values(self):
     ht = HashTable()
     assert ht.values() == []
     ht.set('I', 1)
     assert ht.values() == [1]
     ht.set('V', 5)
     self.assertCountEqual(ht.values(), [1, 5])  # Ignore item order
     ht.set('X', 10)
     self.assertCountEqual(ht.values(), [1, 5, 10])  # Ignore item order
Esempio n. 10
0
 def test_keys(self):
     ht = HashTable()
     assert ht.keys() == []
     ht.set('I', 1)
     assert ht.keys() == ['I']
     ht.set('V', 5)
     self.assertCountEqual(ht.keys(), ['I', 'V'])  # Ignore item order
     ht.set('X', 10)
     self.assertCountEqual(ht.keys(), ['I', 'V', 'X'])  # Ignore item order
Esempio n. 11
0
 def test_delete(self):
     ht = HashTable(4)
     ht.set('I', 1)
     ht.set('V', 5)
     ht.set('X', 10)
     assert ht.load == 4
     assert ht.length() == 3
     assert ht.size == 3
     ht.delete('I')
     ht.delete('X')
     assert ht.length() == 1
     assert ht.size == 1
     with self.assertRaises(KeyError):
         ht.delete('X')  # Key no longer exists
     with self.assertRaises(KeyError):
         ht.delete('A')  # Key does not exist
     ht.set('I', 1)
     ht.set('V', 5)
     ht.set('X', 10)
     ht.set('II', 2)
     ht.set('IV', 4)
     ht.set('XI', 11)
     assert ht.length() == 6
     assert ht.size == 6
Esempio n. 12
0
 def test_set_twice_and_get(self):
     ht = HashTable()
     ht.set('I', 1)
     ht.set('V', 4)
     ht.set('X', 9)
     assert ht.length() == 3
     assert ht.size == 3
     ht.set('V', 5)  # Update value
     ht.set('X', 10)  # Update value
     assert ht.get('I') == 1
     assert ht.get('V') == 5
     assert ht.get('X') == 10
     assert ht.length() == 3  # Check length is not overcounting
     assert ht.size == 3  # Check size is not overcounting
Esempio n. 13
0
 def test_init(self):
     ht = HashTable(4)
     assert len(ht.buckets) == 4
     assert ht.length() == 0
     assert ht.size == 0