예제 #1
0
    def test_hash_table_insertion_and_retrieval(self):
        ht = HashTable(8)

        ht.insert("key-0", "val-0")
        ht.insert("key-1", "val-1")
        ht.insert("key-2", "val-2")
        ht.insert("key-3", "val-3")
        ht.insert("key-4", "val-4")
        ht.insert("key-5", "val-5")
        ht.insert("key-6", "val-6")
        ht.insert("key-7", "val-7")
        ht.insert("key-8", "val-8")
        ht.insert("key-9", "val-9")

        return_value = ht.retrieve("key-0")
        self.assertTrue(return_value == "val-0")
        return_value = ht.retrieve("key-1")
        self.assertTrue(return_value == "val-1")
        return_value = ht.retrieve("key-2")
        self.assertTrue(return_value == "val-2")
        return_value = ht.retrieve("key-3")
        self.assertTrue(return_value == "val-3")
        return_value = ht.retrieve("key-4")
        self.assertTrue(return_value == "val-4")
        return_value = ht.retrieve("key-5")
        self.assertTrue(return_value == "val-5")
        return_value = ht.retrieve("key-6")
        self.assertTrue(return_value == "val-6")
        return_value = ht.retrieve("key-7")
        self.assertTrue(return_value == "val-7")
        return_value = ht.retrieve("key-8")
        self.assertTrue(return_value == "val-8")
        return_value = ht.retrieve("key-9")
        self.assertTrue(return_value == "val-9")
예제 #2
0
def loadHash(lista):
    if not lista is None:
        MyHash = HashTable()
        for item in lista:
            MyHash.insert(item, item)

        return MyHash

    return None
예제 #3
0
class TestHashTable(unittest.TestCase):
    def setUp(self):
        self.ht = HashTable()

    def test_hash(self):
        self.assertEqual(self.ht.hash("Maximus"), self.ht.hash("Maximus"))
        self.assertTrue(self.ht.hash("Maximus") < self.ht.capacity)

    def test_insert(self):
        self.ht.insert("key", "value")
        self.assertEqual(self.ht.size, 1)
        self.assertEqual(self.ht.buckets[self.ht.hash("key")].value, "value")

    def test_find(self):
        obj = "Maximus"
        self.ht.insert("Intel", obj)
        self.assertEqual(obj, self.ht.find("Intel"))
        obj = ["Hello", "world"]
        self.ht.insert("hobby", obj)
        self.assertEqual(obj, self.ht.find("hobby"))

    def test_remove(self):
        obj = "19"
        self.ht.insert("age", obj)
        self.assertEqual(1, self.ht.size)
        self.assertEqual(obj, self.ht.remove("age"))
        self.assertEqual(0, self.ht.size)
예제 #4
0
    def test_hash_table_resize(self):
        ht = HashTable(8)

        ht.insert("key-0", "val-0")
        ht.insert("key-1", "val-1")
        ht.insert("key-2", "val-2")
        ht.insert("key-3", "val-3")
        ht.insert("key-4", "val-4")
        ht.insert("key-5", "val-5")
        ht.insert("key-6", "val-6")
        ht.insert("key-7", "val-7")
        ht.insert("key-8", "val-8")
        ht.insert("key-9", "val-9")

        ht.resize()

        self.assertTrue(len(ht.storage) == 16)

        return_value = ht.retrieve("key-0")
        self.assertTrue(return_value == "val-0")
        return_value = ht.retrieve("key-1")
        self.assertTrue(return_value == "val-1")
        return_value = ht.retrieve("key-2")
        self.assertTrue(return_value == "val-2")
        return_value = ht.retrieve("key-3")
        self.assertTrue(return_value == "val-3")
        return_value = ht.retrieve("key-4")
        self.assertTrue(return_value == "val-4")
        return_value = ht.retrieve("key-5")
        self.assertTrue(return_value == "val-5")
        return_value = ht.retrieve("key-6")
        self.assertTrue(return_value == "val-6")
        return_value = ht.retrieve("key-7")
        self.assertTrue(return_value == "val-7")
        return_value = ht.retrieve("key-8")
        self.assertTrue(return_value == "val-8")
        return_value = ht.retrieve("key-9")
        self.assertTrue(return_value == "val-9")
예제 #5
0
class TestHashTable(unittest.TestCase):
    def setUp(self):
        self.ht = HashTable()

    def test_hash(self):
        self.assertEqual(self.ht.hash("hello"), self.ht.hash("hello"))
        self.assertTrue(self.ht.hash("hello") < self.ht.capacity)

    def test_insert(self):
        self.assertEqual(self.ht.size, 0)
        self.ht.insert("test_key", "test_value")
        self.assertEqual(self.ht.size, 1)
        self.assertEqual(
            self.ht.buckets[self.ht.hash("test_key")].value, "test_value")

        def test_find(self):
            self.assertEqual(self.ht.size, 0)
            obj = "hello"
            self.ht.insert("key1", obj)
            self.assertEqual(obj, self.ht.find("key1"))
            obj = ["this", "is", "a", "list"]
            self.ht.insert("key2", obj)
            self.assertEqual(obj, self.ht.find("key2"))

        def test_remove(self):
            self.assertEqual(self.ht.size, 0)
            obj = "test object"
            self.ht.insert("key1", obj)
            self.assertEqual(1, self.ht.size)
            self.assertEqual(obj, self.ht.remove("key1"))
            self.assertEqual(0, self.ht.size)
            self.assertEqual(None, self.ht.remove("some random key"))

        def test_capacity(self):
            # Test all public methods in one run at a large capacity
            for i in range(0, 1000):
                self.assertEqual(i, self.ht.size)
                self.ht.insert("key" + str(i), "value")
            self.assertEqual(self.ht.size, 1000)
            for i in range(0, 1000):
                self.assertEqual(1000-i, self.ht.size)
                self.assertEqual(self.ht.find("key" + str(i)),
                                 self.ht.remove("key" + str(i)))

        def test_issue2(self):
            self.assertEqual(self.ht.size, 0)
            self.ht.insert('A', 5)
            self.assertEqual(self.ht.size, 1)
            self.ht.insert('B', 10)
            self.assertEqual(self.ht.size, 2)
            self.ht.insert('Ball', 'hello')
            self.assertEqual(self.ht.size, 3)

            self.assertEqual(5, self.ht.remove('A'))
            self.assertEqual(self.ht.size, 2)
            self.assertEqual(None, self.ht.remove('A'))
            self.assertEqual(self.ht.size, 2)
            self.assertEqual(None, self.ht.remove('A'))
            self.assertEqual(self.ht.size, 2)
예제 #6
0
    def test_hash_table_removes_correctly(self):
        ht = HashTable(8)

        ht.insert("key-0", "val-0")
        ht.insert("key-1", "val-1")
        ht.insert("key-2", "val-2")
        ht.insert("key-3", "val-3")
        ht.insert("key-4", "val-4")
        ht.insert("key-5", "val-5")
        ht.insert("key-6", "val-6")
        ht.insert("key-7", "val-7")
        ht.insert("key-8", "val-8")
        ht.insert("key-9", "val-9")

        return_value = ht.retrieve("key-0")
        self.assertTrue(return_value == "val-0")
        return_value = ht.retrieve("key-1")
        self.assertTrue(return_value == "val-1")
        return_value = ht.retrieve("key-2")
        self.assertTrue(return_value == "val-2")
        return_value = ht.retrieve("key-3")
        self.assertTrue(return_value == "val-3")
        return_value = ht.retrieve("key-4")
        self.assertTrue(return_value == "val-4")
        return_value = ht.retrieve("key-5")
        self.assertTrue(return_value == "val-5")
        return_value = ht.retrieve("key-6")
        self.assertTrue(return_value == "val-6")
        return_value = ht.retrieve("key-7")
        self.assertTrue(return_value == "val-7")
        return_value = ht.retrieve("key-8")
        self.assertTrue(return_value == "val-8")
        return_value = ht.retrieve("key-9")
        self.assertTrue(return_value == "val-9")

        ht.remove("key-9")
        ht.remove("key-8")
        ht.remove("key-7")
        ht.remove("key-6")
        ht.remove("key-5")
        ht.remove("key-4")
        ht.remove("key-3")
        ht.remove("key-2")
        ht.remove("key-1")
        ht.remove("key-0")

        return_value = ht.retrieve("key-0")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-1")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-2")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-3")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-4")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-5")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-6")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-7")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-8")
        self.assertTrue(return_value is None)
        return_value = ht.retrieve("key-9")
        self.assertTrue(return_value is None)
예제 #7
0
class PackageStatus:
    """Class used to track status of packages throughout the simulation"""
    def __init__(self, package_list):
        # initialize hash table to size of amount of packages
        self.num_packages = len(package_list)
        self.packages = HashTable(self.num_packages)
        for package in package_list:
            self.packages.insert(package.get_id(), package)

    def add_timestamp(self, id, time):
        package = self.packages.search(id)
        package.set_timestamp(time)
        self.packages.insert(id, package)

    def add_truck_timestamp(self, id, time):
        package = self.packages.search(id)
        package.set_truck_timestamp(time)
        self.packages.insert(id, package)

    def add_delivery_truck(self, id, delivery_truck):
        package = self.packages.search(id)
        package.set_delivery_truck(delivery_truck)
        self.packages.insert(id, package)

    def update_address(self, id, new_address):
        package = self.packages.search(id)
        package.set_address(new_address)
        self.packages.insert(id, package)

    def get_package(self, key):
        return self.packages.search(key)

    def get_num_packages(self):
        return self.num_packages

    def display_package_status(self, time):
        data = {}
        for i in range(1, self.num_packages + 1):
            current_package = self.packages.search(i)
            delivery_status = str()
            if not current_package.get_timestamp():
                delivery_status = "Undelivered"
            # if current package timestamp is less than time given, it has been delivered
            elif current_package.get_timestamp() < time:
                delivery_status = "delivered at " + str(
                    datetime.timedelta(
                        hours=current_package.get_timestamp()))[:-3]
            elif current_package.get_truck_timestamp() < time:
                delivery_status = "en route"
            else:
                delivery_status = "at the hub"
            data[current_package.get_id()] = [
                current_package.get_address(),
                current_package.get_delivery_truck(), delivery_status
            ]
            # if timestamp is none, undelivered
        print("{:<10} {:<40} {:<10} {:<10}".format('Package ID', 'Address',
                                                   'Truck #', 'Status'))
        for k, v in data.items():
            address, truck, status = v
            print("{:<10} {:<40} {:<10} {:<10}".format(k, address, truck,
                                                       status))