class TestSplay(unittest.TestCase): def setUp(self): self.st = SplayTree() def testEmpty(self): self.assertEqual(self.st.traverseBFS(),'(Empty)') self.assertFalse(self.st.find(1)) self.assertEqual(self.st.findMax(),None) self.assertEqual(self.st.findMin(),None) self.assertEqual(self.st.findRecentAccessed(),None) self.assertFalse(self.st.delete(1)) self.assertTrue(self.st.insert(5)) self.assertEqual(self.st.traverseBFS(),'(None)<-5->(None,None)\n') print("\ntestEmpty PASSED") def testInsert(self): self.assertTrue(self.st.insert(1)) string = '(None)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(5)) string = '(None)<-5->(1,None)\n(5)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(3)) string = '(None)<-3->(1,5)\n(3)<-1->(None,None)\n(3)<-5->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(7)) string = '(None)<-7->(5,None)\n(7)<-5->(3,None)\n(5)<-3->(1,None)\n'\ '(3)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(2)) string = '(None)<-2->(1,5)\n(2)<-1->(None,None)\n(2)<-5->(3,7)\n'\ '(5)<-3->(None,None)\n(5)<-7->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(9)) string = '(None)<-9->(2,None)\n(9)<-2->(1,7)\n(2)<-1->(None,None)\n'\ '(2)<-7->(5,None)\n(7)<-5->(3,None)\n(5)<-3->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(8)) string = '(None)<-8->(7,9)\n(8)<-7->(2,None)\n(8)<-9->(None,None)\n'\ '(7)<-2->(1,5)\n(2)<-1->(None,None)\n(2)<-5->(3,None)\n'\ '(5)<-3->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(10)) string = '(None)<-10->(9,None)\n(10)<-9->(8,None)\n(9)<-8->(7,None)\n'\ '(8)<-7->(2,None)\n(7)<-2->(1,5)\n(2)<-1->(None,None)\n(2)<-5->(3,None)\n'\ '(5)<-3->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(6)) string = '(None)<-6->(5,9)\n(6)<-5->(2,None)\n(6)<-9->(7,10)\n'\ '(5)<-2->(1,3)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n(2)<-1->(None,None)\n'\ '(2)<-3->(None,None)\n(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.insert(4)) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) print('\ntextInsert PASSED') def testDFSorder(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) keys = [4, 3, 2, 1, 5, 6, 9, 7, 8, 10] self.assertEqual(self.st.traverseDFSpreorder(),keys) keys = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.assertEqual(self.st.traverseDFSinorder(),keys) keys = [1, 2, 3, 8, 7, 10, 9, 6, 5, 4] self.assertEqual(self.st.traverseDFSpostorder(),keys) print("\ntestDFS(pre&in&post)order PASSED") def testFind(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Same result as duplicate insert self.assertTrue(self.st.find(7)) string = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(8,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n(4)<-3->(2,None)\n(3)<-2->(1,None)\n'\ '(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.find(4)) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,7)\n'\ '(3)<-2->(1,None)\n(5)<-7->(6,9)\n(2)<-1->(None,None)\n'\ '(7)<-6->(None,None)\n(7)<-9->(8,10)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Failed find still splays the tree using the last valid node found # I.E. splay(1) for a failed find(0) self.assertFalse(self.st.find(0)) string = '(None)<-1->(None,4)\n(1)<-4->(2,5)\n(4)<-2->(None,3)\n'\ '(4)<-5->(None,7)\n(2)<-3->(None,None)\n(5)<-7->(6,9)\n'\ '(7)<-6->(None,None)\n(7)<-9->(8,10)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) print("\ntestFind PASSED") def testDuplicateInsert(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Same result as find(7) self.assertFalse(self.st.insert(7)) string = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(8,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n(4)<-3->(2,None)\n(3)<-2->(1,None)\n'\ '(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) print("\ntestDuplicateInsert PASSED") def testCopy(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) origString = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),origString) #Make Copy copy = self.st.copyTree() #Modify Original self.assertTrue(self.st.delete(8)) newString = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(None,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-10->(None,None)\n'\ '(4)<-3->(2,None)\n(3)<-2->(1,None)\n(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),newString) #Ensure copy was NOT changed self.assertEqual(copy.traverseBFS(),origString) #Modify Copy self.assertTrue(copy.find(7)) copyString = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(8,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n(4)<-3->(2,None)\n(3)<-2->(1,None)\n'\ '(2)<-1->(None,None)\n' self.assertEqual(copy.traverseBFS(),copyString) #Ensure original was NOT changed self.assertEqual(self.st.traverseBFS(),newString) print("\ntestCopy PASSED") def testFindMin(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check FindMin self.assertEqual(self.st.findMin(),1) #Modify Tree self.assertTrue(self.st.find(7)) string = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(8,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n(4)<-3->(2,None)\n(3)<-2->(1,None)\n'\ '(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check FindMin Again self.assertEqual(self.st.findMin(),1) #Modify Tree with a failed find self.assertFalse(self.st.find(0)) string = '(None)<-1->(None,7)\n(1)<-7->(4,9)\n(7)<-4->(2,5)\n'\ '(7)<-9->(8,10)\n(4)<-2->(None,3)\n(4)<-5->(None,6)\n'\ '(9)<-8->(None,None)\n(9)<-10->(None,None)\n(2)<-3->(None,None)\n'\ '(5)<-6->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check FindMin Again self.assertEqual(self.st.findMin(),1) print("\ntestFindMin PASSED") def testFindMax(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check FindMax self.assertEqual(self.st.findMax(),10) #Modify Tree self.assertTrue(self.st.find(7)) string = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(8,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-8->(None,None)\n'\ '(9)<-10->(None,None)\n(4)<-3->(2,None)\n(3)<-2->(1,None)\n'\ '(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check FindMax Again self.assertEqual(self.st.findMax(),10) #Modify Tree with a failed find self.assertFalse(self.st.find(0)) string = '(None)<-1->(None,7)\n(1)<-7->(4,9)\n(7)<-4->(2,5)\n'\ '(7)<-9->(8,10)\n(4)<-2->(None,3)\n(4)<-5->(None,6)\n'\ '(9)<-8->(None,None)\n(9)<-10->(None,None)\n(2)<-3->(None,None)\n'\ '(5)<-6->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check FindMax Again self.assertEqual(self.st.findMax(),10) print("\ntestFindMax PASSED") def testDeleteLeaf(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(8)) string = '(None)<-7->(5,9)\n(7)<-5->(4,6)\n(7)<-9->(None,10)\n'\ '(5)<-4->(3,None)\n(5)<-6->(None,None)\n(9)<-10->(None,None)\n'\ '(4)<-3->(2,None)\n(3)<-2->(1,None)\n(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(1)) string = '(None)<-2->(None,5)\n(2)<-5->(3,7)\n(5)<-3->(None,4)\n'\ '(5)<-7->(6,9)\n(3)<-4->(None,None)\n(7)<-6->(None,None)\n'\ '(7)<-9->(None,10)\n(9)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(6)) string = '(None)<-7->(5,9)\n(7)<-5->(2,None)\n(7)<-9->(None,10)\n'\ '(5)<-2->(None,3)\n(9)<-10->(None,None)\n'\ '(2)<-3->(None,4)\n(3)<-4->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(4)) string = '(None)<-3->(2,7)\n(3)<-2->(None,None)\n(3)<-7->(5,9)\n'\ '(7)<-5->(None,None)\n(7)<-9->(None,10)\n'\ '(9)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(5)) string = '(None)<-7->(3,9)\n(7)<-3->(2,None)\n(7)<-9->(None,10)\n'\ '(3)<-2->(None,None)\n(9)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(10)) string = '(None)<-9->(7,None)\n(9)<-7->(3,None)\n'\ '(7)<-3->(2,None)\n(3)<-2->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertFalse(self.st.delete(10)) string = '(None)<-9->(7,None)\n(9)<-7->(3,None)\n'\ '(7)<-3->(2,None)\n(3)<-2->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(2)) string = '(None)<-3->(None,7)\n(3)<-7->(None,9)\n'\ '(7)<-9->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(9)) string = '(None)<-7->(3,None)\n(7)<-3->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(3)) string = '(None)<-7->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(7)) string = '(Empty)' self.assertEqual(self.st.traverseBFS(),string) self.assertFalse(self.st.delete(7)) string = '(Empty)' self.assertEqual(self.st.traverseBFS(),string) print("\ntestDeleteLeaf PASSED") def testDeleteFail(self): self.assertFalse(self.st.delete(1)) boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check tree is resplayed even with a delete failure # similar to a failed find self.assertFalse(self.st.delete(0)) string = '(None)<-1->(None,4)\n(1)<-4->(2,5)\n(4)<-2->(None,3)\n'\ '(4)<-5->(None,6)\n(2)<-3->(None,None)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(1)) string = '(None)<-4->(2,5)\n(4)<-2->(None,3)\n'\ '(4)<-5->(None,6)\n(2)<-3->(None,None)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Check tree is resplayed even with a delete failure self.assertFalse(self.st.delete(1)) string = '(None)<-2->(None,4)\n(2)<-4->(3,5)\n'\ '(4)<-3->(None,None)\n(4)<-5->(None,6)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) print("\ntestDeleteFail PASSED") def testDeleteInternal(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(7)) string = '(None)<-9->(4,10)\n(9)<-4->(3,6)\n(9)<-10->(None,None)\n'\ '(4)<-3->(2,None)\n(4)<-6->(5,8)\n(3)<-2->(1,None)\n'\ '(6)<-5->(None,None)\n(6)<-8->(None,None)\n(2)<-1->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(4)) string = '(None)<-3->(2,9)\n(3)<-2->(1,None)\n(3)<-9->(6,10)\n'\ '(2)<-1->(None,None)\n(9)<-6->(5,8)\n(9)<-10->(None,None)\n'\ '(6)<-5->(None,None)\n(6)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) #Differed from animation at http://techunix.technion.ac.il/~itai/, # but this should be a valid answer self.assertTrue(self.st.delete(2)) string = '(None)<-3->(1,9)\n(3)<-1->(None,None)\n(3)<-9->(6,10)\n'\ '(9)<-6->(5,8)\n(9)<-10->(None,None)\n'\ '(6)<-5->(None,None)\n(6)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(9)) string = '(None)<-6->(3,8)\n(6)<-3->(1,5)\n(6)<-8->(None,10)\n'\ '(3)<-1->(None,None)\n(3)<-5->(None,None)\n'\ '(8)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(8)) string = '(None)<-6->(3,10)\n(6)<-3->(1,5)\n(6)<-10->(None,None)\n'\ '(3)<-1->(None,None)\n(3)<-5->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(3)) string = '(None)<-1->(None,6)\n(1)<-6->(5,10)\n(6)<-5->(None,None)\n'\ '(6)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(6)) string = '(None)<-5->(1,10)\n(5)<-1->(None,None)\n'\ '(5)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(5)) string = '(None)<-1->(None,10)\n(1)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(1)) string = '(None)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(10)) string = '(Empty)' self.assertEqual(self.st.traverseBFS(),string) self.assertFalse(self.st.delete(10)) string = '(Empty)' self.assertEqual(self.st.traverseBFS(),string) print("\ntestDeleteInternal PASSED") def testDeleteRoot(self): boolResult = True for value in [1,5,3,7,2,9,8,10,6,4]: boolResult = boolResult and self.st.insert(value) self.assertTrue(boolResult) string = '(None)<-4->(3,5)\n(4)<-3->(2,None)\n(4)<-5->(None,6)\n'\ '(3)<-2->(1,None)\n(5)<-6->(None,9)\n(2)<-1->(None,None)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(4)) string = '(None)<-3->(2,5)\n(3)<-2->(1,None)\n(3)<-5->(None,6)\n'\ '(2)<-1->(None,None)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(3)) string = '(None)<-2->(1,5)\n(2)<-1->(None,None)\n'\ '(2)<-5->(None,6)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(2)) string = '(None)<-1->(None,5)\n'\ '(1)<-5->(None,6)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(1)) string = '(None)<-5->(None,6)\n(5)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(5)) string = '(None)<-6->(None,9)\n'\ '(6)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(6)) string = '(None)<-9->(7,10)\n(9)<-7->(None,8)\n(9)<-10->(None,None)\n'\ '(7)<-8->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(9)) string = '(None)<-7->(None,8)\n(7)<-8->(None,10)\n(8)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(7)) string = '(None)<-8->(None,10)\n(8)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(8)) string = '(None)<-10->(None,None)\n' self.assertEqual(self.st.traverseBFS(),string) self.assertTrue(self.st.delete(10)) string = '(Empty)' self.assertEqual(self.st.traverseBFS(),string) self.assertFalse(self.st.delete(10)) string = '(Empty)' self.assertEqual(self.st.traverseBFS(),string) print("\ntestDeleteRoot PASSED") def testListSort(self): listToSort = [x for x in range(0,101,1)] random.shuffle(listToSort) for value in listToSort: self.st.insert(value) sortedList = self.st.traverseDFSinorder() self.assertEqual(sortedList,[x for x in range(0,101,1)]) print("\ntestListSort PASSED") def testRecentAccessed(self): boolResult = True listToSort = [x for x in range(0,101,1)] random.shuffle(listToSort) for value in listToSort: boolResult = boolResult and self.st.insert(value) self.assertEqual(self.st.findRecentAccessed(),value) self.assertTrue(boolResult) self.assertTrue(self.st.find(7)) self.assertEqual(self.st.findRecentAccessed(),7) #Failed Find self.assertFalse(self.st.find(101)) self.assertEqual(self.st.findRecentAccessed(),100) #Failed Delete self.assertFalse(self.st.delete(-1)) self.assertEqual(self.st.findRecentAccessed(),0) print("\ntestRecentAccessed PASSED")
def setUp(self): self.st = SplayTree()