Beispiel #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
Beispiel #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
Beispiel #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
Beispiel #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)
Beispiel #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
Beispiel #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
Beispiel #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)])
Beispiel #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
Beispiel #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
Beispiel #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
Beispiel #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
Beispiel #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
Beispiel #13
0
 def test_init(self):
     ht = HashTable(4)
     assert len(ht.buckets) == 4
     assert ht.length() == 0
     assert ht.size == 0