def test_iteration(self): d = HashMap(key_type=ctypes.c_int, value_type=ctypes.c_char_p, capacity=30) for i, letter in enumerate(uppercase): d[i] = letter for key in d: self.assertTrue(key in d) keys = {key for key in d} for i, letter in enumerate(uppercase): self.assertTrue(i in keys) letters = set(uppercase) for key in d: self.assertTrue(d[key] in letters) letters -= {d[key]} self.assertEqual(letters, set(), "Not all of the letters were iterated through") for key, value in d.items(): self.assertTrue(d[key], value)
def prep_trucks(self): # Big O: O(N^2) h = HashMap() # temporary lists to manage addresses truck2_addresses = [] deadline_addresses = [] delayed_addresses = [] delivered_with_addresses = [] other_addresses = [] # temporary lists to manage packages truck2_packages = [] deadline_packages = [] delayed_packages = [] delivered_with_packages = [] other_packages = [] # loads package details for easy assigning and sorting packages h.load_package_details("package_details.txt", h) # begins the assigning process for item in h.items(): # only applies to the packages that aren't already # on a truck or delivered if "ON TRUCK" or "DELIVERED" not in item[7]: # If it has a deadline (i.e. does not say "EOD" in deadline) # this will add it to a separate list if "EOD" not in item[4].upper(): if item[0] not in deadline_addresses: deadline_addresses.append(item[0]) # If notes says it must be on truck 2 # this will add it to a separate list if "TRUCK" in item[6].upper(): if item[0] not in truck2_addresses: truck2_addresses.append(item[0]) # If notes says it is delayed # this will add it to a separate list if "DELAYED" in item[6].upper(): if item[0] not in delayed_addresses: delayed_addresses.append(item[0]) # if notes says it needs to be delivered with ... # this will add it to a separate list if "DELIVERED WITH" in item[6].upper(): a = [int(s) for s in item[6].split() if s.isdigit()] for number in a: if number not in delivered_with_addresses: address = h.get_address(str(number)) if address not in delivered_with_addresses: delivered_with_addresses.append(address) if item[0] not in delivered_with_addresses: delivered_with_addresses.append(item[0]) # this makes a list for everything else # without a deadline or without any notes if "EOD" in item[4].upper() or "NA" in item[6].upper(): if item[0] not in other_addresses: other_addresses.append(item[0]) # if any overlaps occur between "truck 2", "deadline", or "other" # sets priority to truck 2 for address in truck2_addresses: if address in deadline_addresses: deadline_addresses.remove(address) if address in other_addresses: other_addresses.remove(address) # if any overlaps occur between "delayed", "deadline", or "other" # sets priority to delayed for address in delayed_addresses: if address in deadline_addresses: deadline_addresses.remove(address) if address in other_addresses: other_addresses.remove(address) # if any overlaps occur between "delivered with", "deadline", or "other" # set priority to delivered_with_addresses for address in delivered_with_addresses: if address in deadline_addresses: deadline_addresses.remove(address) if address in other_addresses: other_addresses.remove(address) # if any overlaps occur between deadline and "other" # set priority to deadline_addresses for address in deadline_addresses: if address in other_addresses: other_addresses.remove(address) # gets package IDs for addresses assigned to specific lists truck2_packages = self.reform_list(h, truck2_addresses) deadline_packages = self.reform_list(h, deadline_addresses) delayed_packages = self.reform_list(h, delayed_addresses) delivered_with_packages = self.reform_list(h, delivered_with_addresses) other_packages = self.reform_list(h, other_addresses) # sends each list through a double check function finding # and finds any with "wrong address" and assigns them to truck 3 new_truck2 = self.double_check(h, truck2_packages) new_deadline = self.double_check(h, deadline_packages) new_delayed = self.double_check(h, delayed_packages) new_delivered_with = self.double_check(h, delivered_with_packages) new_other = self.double_check(h, other_packages) # merges package lists, assigns list to trucks self.truck_1_packages(h, new_deadline, new_delivered_with) self.truck_2_packages(h, new_truck2, new_delayed) self.truck_3_packages(h, new_other) return self.truck_1, self.truck_2, self.truck_3