def test_2(self): pq = MinPQ([5, 4, 3, 2, 1]) self.assertEqual(pq.size(), 5) self.assertTrue(pq.capacity == 5) self.assertTrue(pq.capacity == pq.num_items) self.assertTrue(pq.arr == [1, 2, 3, 5, 4]) self.assertEqual(pq.min(), 1) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertEqual(pq.del_min(), 5) self.assertTrue(pq.capacity == 2) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty())
def test_use_case_one(self): """ Implementation of use case 1 as outlined in lab instructions""" pq_test = MinPQ() pq_test.insert(5) pq_test.insert(3) self.assertTrue(pq_test.capacity == 2) pq_test.insert(6) self.assertEqual(3, pq_test.size()) self.assertEqual(3, pq_test.min()) self.assertEqual(3, pq_test.del_min()) self.assertEqual(5, pq_test.del_min()) self.assertEqual(6, pq_test.del_min()) self.assertEqual(0, pq_test.size()) self.assertTrue(pq_test.is_empty()) self.assertEqual(2, pq_test.capacity)
def test_1(self): pq = MinPQ() pq.insert(5) pq.insert(3) self.assertEqual(pq.capacity, 2) pq.insert(6) self.assertEqual(pq.size(), 3) self.assertTrue(pq.capacity == 4) self.assertEqual(pq.min(), 3) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 5) self.assertEqual(pq.del_min(), 6) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty()) self.assertTrue(pq.capacity == 2)
def test_pq2(self): pq = MinPQ() self.assertTrue(pq.is_empty()) for i in reversed(range(5)): print("pq.insert(", i, ")") pq.insert(i) self.assertEqual(pq.size(), 5) self.assertFalse(pq.is_empty()) self.assertEqual(pq.min(), 0) self.assertEqual(pq.del_min(), 0) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertTrue(pq.is_empty()) self.assertEqual(pq.size(), 0)
def test_full_functionality(self): """ Tests the bulk functionality of the MinPQ class""" pq_test = MinPQ() pq_test.insert(6) self.assertEqual(2, pq_test.capacity) self.assertEqual(pq_test.size(), pq_test.num_items) pq_test.insert(7) self.assertEqual([6, 7], pq_test.arr) pq_test.insert(2) self.assertEqual(3, pq_test.size()) self.assertEqual([2, 7, 6, None], pq_test.arr) self.assertFalse(pq_test.is_empty()) self.assertEqual(2, pq_test.del_min()) self.assertEqual(6, pq_test.del_min()) self.assertEqual(7, pq_test.del_min()) self.assertTrue(pq_test.is_empty())
def test_use_case_two(self): """ Implementation of use case 2 as outlined in lab instructions""" pq_test = MinPQ([5, 4, 3, 2, 1]) self.assertEqual(5, pq_test.size()) self.assertEqual(5, pq_test.capacity) self.assertEqual(pq_test.num_items, pq_test.capacity) self.assertTrue(pq_test.arr == [1, 2, 3, 5, 4]) self.assertEqual(1, pq_test.min()) self.assertEqual(1, pq_test.del_min()) self.assertEqual(2, pq_test.del_min()) self.assertFalse(pq_test.is_empty()) self.assertEqual(3, pq_test.del_min()) self.assertEqual(4, pq_test.del_min()) self.assertEqual(5, pq_test.del_min()) self.assertEqual(2, pq_test.capacity) self.assertEqual(0, pq_test.size()) self.assertTrue(pq_test.is_empty())
def test_pq(self): pq = MinPQ([3, 10, 231, 5]) self.assertEqual(pq.is_empty(), False) self.assertEqual(pq.size(), 4) self.assertEqual(pq.capacity, 4) self.assertEqual(pq.min(), 3) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 5) self.assertEqual(pq.del_min(), 10) self.assertEqual(pq.del_min(), 231) self.assertRaises(IndexError, pq.min) self.assertRaises(IndexError, pq.del_min) self.assertEqual(pq.is_empty(), True) self.assertEqual(pq.num_items, 0)
def create_huff_tree(list_of_freqs): """ Create a Huffman Tree from list of character frequencies Args: list_of_freqs(list): list with length of 256 characters Returns: MinPQ: the root node of the Min Priority Queue constructed from the Huffman Nodes """ priority_queue_list = [] for each in range(len(list_of_freqs)): if list_of_freqs[each] > 0: char = chr(each) freq = list_of_freqs[each] node = HuffmanNode(freq, char) priority_queue_list.append(node) priority_queue = MinPQ(priority_queue_list) if priority_queue.size() == 0: return None while priority_queue.size() > 1: # Retrieves the two smallest occurring Nodes from the queue node_1 = priority_queue.del_min() node_2 = priority_queue.del_min() # Determine the representation of the min chr representation min_chr = min(node_1.char, node_2.char) # Sum the different frequencies, create new Node, and add to queue sum_freq = node_1.freq + node_2.freq new_node = HuffmanNode(sum_freq, min_chr, node_1, node_2) priority_queue.insert(new_node) return priority_queue.del_min()
def test_pq4(self): arr = [5, 2, 3, 4, 1] print(arr) pq = MinPQ(arr) print("pq.heapify(",arr,")") self.assertEqual(pq.size(), 5) self.assertEqual(pq.capacity, 5) self.assertFalse(pq.is_empty()) self.assertEqual(pq.min(), 1) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertEqual(pq.del_min(), 5) self.assertTrue(pq.is_empty())
def create_huff_tree(list_of_freqs): """Creates a huffman tree given a list of character frequencies. Arguments: list_of_freqs (list): List of character frequencies from cnt_freq() Returns: The root node of the huffman tree created from the list of frequencies """ pq_arr = [] for char, freq in enumerate(list_of_freqs): if freq > 0: pq_arr.append(HuffmanNode(chr(char), freq, None, None)) min_pq = MinPQ(pq_arr) while min_pq.size() > 1: left = min_pq.del_min() right = min_pq.del_min() min_char = min(left.char, right.char) parent_node = HuffmanNode(min_char, left.freq + right.freq, left, right) min_pq.insert(parent_node) return min_pq.min()
def test_min_pq(self): minq = MinPQ([5, 4, 3, 2, 1, 0]) minq2 = MinPQ() minq2.insert(0) minq2.insert(1) self.assertEqual(minq2.capacity, 2) minq2.insert(2) self.assertEqual(minq2.capacity, 4) minq2.insert(3) minq2.insert(4) minq2.insert(5) self.assertEqual(minq2.min(), 0) minq2.del_min() self.assertEqual(minq2.min(), 1) self.assertEqual(minq2.size(), 5) minq2.del_min() minq2.del_min() self.assertEqual(minq2.capacity, 8) minq2.del_min() self.assertEqual(minq2.capacity, 4) minq2.del_min() minq2.del_min() self.assertRaises(IndexError, minq2.del_min)
class MinPQTests(unittest.TestCase): def setUp(self): self.pq1 = MinPQ() self.pq2 = MinPQ() def test_eq_repr(self): self.assertEqual(repr(self.pq1), 'MinPQ([None, None])') self.assertEqual(self.pq1, self.pq2) self.assertEqual(self.pq1.size(), 0) self.assertEqual(self.pq2.size(), 0) self.pq1.insert(0) self.pq1.insert(4) self.pq1.insert(3) self.pq2.insert(4) self.pq2.insert(3) self.pq2.insert(0) self.assertEqual(repr(self.pq1), 'MinPQ([0, 4, 3, None])') self.assertEqual(self.pq1.size(), 3) self.assertEqual(self.pq1.min(), 0) self.assertEqual(self.pq1, self.pq2) def test_heapify(self): pq = MinPQ([9, 6, 5, 2, 3]) self.assertEqual(pq.arr, [2, 3, 5, 6, 9]) pq = MinPQ([6, 3, 7, 2, 8, 1]) self.assertEqual(pq.arr, [1, 2, 6, 3, 8, 7]) pq = MinPQ([1, 3, 6, 8]) self.assertEqual(pq.arr, [1, 3, 6, 8]) def test_insert_del_size(self): self.assertRaises(IndexError, self.pq1.del_min) self.pq1.insert(1) self.assertEqual(self.pq1.size(), 1) self.assertEqual(self.pq1.arr, [1, None]) self.pq1.insert(6) self.assertEqual(self.pq1.size(), 2) self.assertEqual(self.pq1.arr, [1, 6]) self.pq1.insert(5) self.assertEqual(self.pq1.size(), 3) self.assertEqual(self.pq1.arr, [1, 6, 5, None]) self.assertEqual(self.pq1.del_min(), 1) self.assertEqual(self.pq1.arr, [5, 6, None, None]) self.pq1.insert(1) self.assertEqual(self.pq1.arr, [1, 6, 5, None]) def test_1(self): pq = MinPQ() pq.insert(5) pq.insert(3) self.assertEqual(pq.capacity, 2) pq.insert(6) self.assertEqual(pq.size(), 3) self.assertTrue(pq.capacity == 4) self.assertEqual(pq.min(), 3) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 5) self.assertEqual(pq.del_min(), 6) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty()) self.assertTrue(pq.capacity == 2) def test_2(self): pq = MinPQ([5, 4, 3, 2, 1]) self.assertEqual(pq.size(), 5) self.assertTrue(pq.capacity == 5) self.assertTrue(pq.capacity == pq.num_items) self.assertTrue(pq.arr == [1, 2, 3, 5, 4]) self.assertEqual(pq.min(), 1) self.assertEqual(pq.del_min(), 1) self.assertEqual(pq.del_min(), 2) self.assertEqual(pq.del_min(), 3) self.assertEqual(pq.del_min(), 4) self.assertEqual(pq.del_min(), 5) self.assertTrue(pq.capacity == 2) self.assertEqual(pq.size(), 0) self.assertTrue(pq.is_empty())