class TestDownheap(unittest.TestCase): def setUp(self): self.h = Heap() self.h.insert(5, 'Five') def test_once_left(self): self.h.heap.append(Node(2, 'Two')) self.h.heap.append(Node(3, 'Three')) self.h._downheap(0) self.assertEqual(self.h.heap[0].val, 'Two') self.assertEqual(self.h.heap[1].val, 'Five') def test_once_right(self): self.h.heap.append(Node(3, 'Three')) self.h.heap.append(Node(2, 'Two')) self.h._downheap(0) self.assertEqual(self.h.heap[0].val, 'Two') self.assertEqual(self.h.heap[2].val, 'Five') def test_many_left(self): self.h.insert(3, 'Three') self.h.insert(8, 'Eight') self.h.insert(10, 'Ten') self.h.insert(13, 'Thirteen') self.h.insert(11, 'Eleven') self.h.insert(12, 'Twelve') self.h.insert(4, 'Four') self.h.insert(2, 'Two') self.h.heap.pop() self.h.heap[0] = Node(5, 'Five') self.h._downheap(0) self.assertEqual(self.h.heap[0].val, 'Three') self.assertEqual(self.h.heap[1].val, 'Four') self.assertEqual(self.h.heap[3].val, 'Five') with self.assertRaises(IndexError): self.h.heap[8] def test_many_right(self): self.h.insert(3, 'Three') self.h.insert(8, 'Eight') self.h.insert(10, 'Ten') self.h.insert(13, 'Thirteen') self.h.insert(11, 'Eleven') self.h.insert(12, 'Twelve') self.h.insert(4, 'Four') self.h.insert(2, 'Two') self.h.insert(15, 'Fifteen') self.h.insert(9, 'Nine') self.h.insert(14, 'Fourteen') self.h.insert(1, 'One') self.h.heap.pop() self.h.heap[0] = Node(11, 'Eleven') self.h._downheap(0) self.assertEqual(self.h.heap[0].val, 'Two') self.assertEqual(self.h.heap[2].val, 'Eight') self.assertEqual(self.h.heap[5].val, 'Eleven') with self.assertRaises(IndexError): self.h.heap[12]