Skip to content

Instantly share code, notes, and snippets.

@mcclane
Created November 26, 2018 03:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcclane/178b4530079ae46ffa979073b3e2fe0d to your computer and use it in GitHub Desktop.
Save mcclane/178b4530079ae46ffa979073b3e2fe0d to your computer and use it in GitHub Desktop.
import unittest
from hash_quad import *
class TestList(unittest.TestCase):
def test_01a(self):
ht = HashTable(7)
self.assertEqual(ht.get_table_size(), 7)
def test_01b(self):
ht = HashTable(7)
self.assertEqual(ht.get_num_items(), 0)
def test_01c(self):
ht = HashTable(7)
self.assertAlmostEqual(ht.get_load_factor(), 0)
def test_01d(self):
ht = HashTable(7)
self.assertEqual(ht.get_all_keys(), [])
def test_01e(self):
ht = HashTable(7)
self.assertFalse(ht.in_table("cat"))
def test_01f(self):
ht = HashTable(7)
self.assertEqual(ht.get_value("cat"), None)
def test_01g(self):
ht = HashTable(7)
self.assertEqual(ht.get_index("cat"), None)
def test_01h(self):
ht = HashTable(7)
self.assertEqual(ht.horner_hash("cat"), 3)
def test_02a(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertEqual(ht.get_table_size(), 7)
def test_02b(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertEqual(ht.get_num_items(), 1)
def test_02c(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertAlmostEqual(ht.get_load_factor(), 1/7)
def test_02d(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertEqual(ht.get_all_keys(), ["cat"])
def test_02e(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertTrue(ht.in_table("cat"))
self.assertFalse(ht.in_table("not_cat"))
ht = HashTable(1)
ht.insert("cat", 5)
self.assertTrue(ht.in_table("cat"))
self.assertEqual(ht.get_index("cat"), 0)
self.assertFalse(ht.in_table("not_cat"))
def test_02f(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertEqual(ht.get_value("cat"), [5])
def test_02g(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertEqual(ht.get_index("cat"), 3)
self.assertEqual(ht.get_index("not_cat"), None)
ht = HashTable(1)
ht.insert("cat", 5)
ht.insert("cat", 10)
self.assertEqual(ht.get_index("cat"), 0)
self.assertEqual(ht.get_index("not_cat"), None)
self.assertEqual(ht.get_value("cat"), [5, 10])
def test_rehash_size(self):
"""Test size of the hashtable after rehashing it"""
ht = HashTable(1)
self.assertEqual(1, ht.get_table_size())
ht.insert("cat", 4)
self.assertEqual(3, ht.get_table_size())
ht.insert("dog", 1)
self.assertEqual(7, ht.get_table_size())
ht.insert("thing", 1)
ht.insert("dog", 2)
self.assertEqual(7, ht.get_table_size())
def test_03(self):
ht = HashTable(7)
ht.insert("cat", 5)
ht.insert("cat", 17)
self.assertEqual(ht.get_value("cat"), [5, 17])
def test_04(self):
ht = HashTable(7)
ht.insert("cat", 5)
self.assertEqual(ht.get_index("cat"), 3)
ht.insert("dog", 8)
self.assertEqual(ht.get_num_items(), 2)
self.assertEqual(ht.get_index("dog"), 6)
self.assertAlmostEqual(ht.get_load_factor(), 2 / 7)
ht.insert("mouse", 10)
self.assertEqual(ht.get_num_items(), 3)
self.assertEqual(ht.get_index("mouse"), 4)
self.assertAlmostEqual(ht.get_load_factor(), 3 / 7)
ht.insert("elephant", 12) # hash table should be resized
self.assertEqual(ht.get_num_items(), 4)
self.assertEqual(ht.get_table_size(), 15)
self.assertAlmostEqual(ht.get_load_factor(), 4 / 15)
self.assertEqual(ht.get_index("cat"), 12)
self.assertEqual(ht.get_index("dog"), 14)
self.assertEqual(ht.get_index("mouse"), 13)
self.assertEqual(ht.get_index("elephant"), 9)
keys = ht.get_all_keys()
keys.sort()
self.assertEqual(keys, ["cat", "dog", "elephant", "mouse"])
def test_a_lot_of_things(self):
ht = HashTable(1)
self.assertEqual(ht.get_load_factor(), 0)
self.assertEqual(ht.get_num_items(), 0)
self.assertEqual(ht.get_table_size(), 1)
self.assertListEqual(ht.get_all_keys(), [])
self.assertEqual(ht.horner_hash("something"), 0)
ht.insert("something", 0)
self.assertEqual(ht.get_table_size(), 3)
self.assertTrue(ht.in_table("something"))
self.assertEqual(ht.get_index("something"), 1)
self.assertListEqual(ht.get_all_keys(), ["something"])
self.assertAlmostEqual(ht.get_load_factor(), 1 / 3)
self.assertEqual(ht.get_num_items(), 1)
# def test_quadratic_probing_wraparound(self):
# ht = HashTable(10)
# print(ht.hash_table)
# ht.insert("@", 1)
# print(ht.hash_table)
# ht.insert("d@", 1)
# print(ht.hash_table)
# ht.insert("dd@", 1)
# print(ht.hash_table)
# ht.insert("ddd@", 1)
# print(ht.hash_table)
def test_try_non_int(self):
ht = HashTable(5)
ht.insert("hello", "world")
self.assertEqual(ht.get_value("hello"), ["world"])
# def test_wrap_around(self):
# ht = HashTable(5)
# ht.insert("hello", "world")
# print(ht.hash_table)
# ht.insert("world", "hello")
# print(ht.hash_table)
# ht.insert("this", "that")
# print(ht.hash_table)
# ht.insert("what", "do")
# print(ht.hash_table)
# ht.insert("you", "want")
# print(ht.hash_table)
# ht.insert("i", "hate")
# print(ht.hash_table)
# ht.insert("this", "assignment")
# print(ht.hash_table)
if __name__ == '__main__':
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment