Created
November 26, 2018 03:55
-
-
Save mcclane/178b4530079ae46ffa979073b3e2fe0d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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