コード例 #1
0
class TestAVL(unittest.TestCase):
    
    def setUp(self):
        self.avl = AVLTree()
        self.fullAVL = AVLTree()
        
        self.insertList = [47,30,2,6,12,64,62,98,93,95,97,99,3,4,5,7]
        for item in self.insertList:
            self.assertTrue(self.fullAVL.insert(item))
        self.result = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:0)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        
        
    def testEmpty(self):
        self.assertEqual(self.avl.outputTesting(),'(Empty)')
        self.assertFalse(self.avl.find(1))
        self.assertEqual(self.avl.findMax(),None)
        self.assertEqual(self.avl.findMin(),None)
        self.assertFalse(self.avl.delete(1))
        self.assertTrue(self.avl.insert(5))
        self.assertEqual(self.avl.outputTesting(),'(None)<-5(BF:0)->(None,None)\n')
        print("\ntestEmpty PASSED")
        
    def testInsert(self):
        self.assertTrue(self.avl.insert(47))
        string = '(None)<-47(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(30))
        string = '(None)<-47(BF:1)->(30,None)\n'\
                 '(47)<-30(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(2))
        string = '(None)<-30(BF:0)->(2,47)\n'\
                 '(30)<-2(BF:0)->(None,None)\n'\
                 '(30)<-47(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(6))
        string = '(None)<-30(BF:1)->(2,47)\n'\
                 '(30)<-2(BF:-1)->(None,6)\n'\
                 '(30)<-47(BF:0)->(None,None)\n'\
                 '(2)<-6(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(12))
        string = '(None)<-30(BF:1)->(6,47)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-47(BF:0)->(None,None)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(64))
        string = '(None)<-30(BF:0)->(6,47)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-47(BF:-1)->(None,64)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(47)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(62))
        string = '(None)<-30(BF:0)->(6,62)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(98))
        string = '(None)<-30(BF:-1)->(6,62)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-62(BF:-1)->(47,64)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:-1)->(None,98)\n'\
                 '(64)<-98(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(93))
        string = '(None)<-30(BF:-1)->(6,62)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-62(BF:-1)->(47,93)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-93(BF:0)->(64,98)\n'\
                 '(93)<-64(BF:0)->(None,None)\n'\
                 '(93)<-98(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(95))
        string = '(None)<-30(BF:-1)->(6,93)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-93(BF:0)->(62,98)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-98(BF:1)->(95,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(98)<-95(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(97))
        string = '(None)<-30(BF:-1)->(6,93)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(99))
        string = '(None)<-93(BF:0)->(30,97)\n'\
                 '(93)<-30(BF:0)->(6,62)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(6)<-2(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(3))
        string = '(None)<-93(BF:1)->(30,97)\n'\
                 '(93)<-30(BF:1)->(6,62)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(30)<-6(BF:1)->(2,12)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(6)<-2(BF:-1)->(None,3)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(2)<-3(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(4))
        string = '(None)<-93(BF:1)->(30,97)\n'\
                 '(93)<-30(BF:1)->(6,62)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(30)<-6(BF:1)->(3,12)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(6)<-3(BF:0)->(2,4)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(3)<-4(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        
        self.assertTrue(self.avl.insert(5))
        string = '(None)<-93(BF:1)->(30,97)\n'\
                 '(93)<-30(BF:1)->(4,62)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(30)<-4(BF:0)->(3,6)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-6(BF:0)->(5,12)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(6)<-5(BF:0)->(None,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)

        self.assertTrue(self.avl.insert(7))
        string = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:0)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.avl.outputTesting(),string)
        print('\ntextInsert PASSED')
        
    def testDFSorder(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        keys = [93,6,4,3,2,5,30,12,7,62,47,64,97,95,98,99]
        self.assertEqual(self.fullAVL.traverseDFSpreorder(),keys)

        self.insertList.sort(reverse=False)
        self.assertEqual(self.fullAVL.traverseDFSinorder(),self.insertList)
        
        keys = [2,3,5,4,7,12,47,64,62,30,6,95,99,98,97,93]
        self.assertEqual(self.fullAVL.traverseDFSpostorder(),keys)
        
        print("\ntestDFS(pre&in&post)order PASSED")

    def testFind(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        random.shuffle(self.insertList)
        for item in self.insertList:
            self.assertTrue(self.fullAVL.find(item))
        
        #FAIL FIND
        failFinds = [x for x in range(0,101)]
        for item in self.insertList:
            if item in failFinds:
                failFinds.remove(item)
        for item in failFinds:
            self.assertFalse(self.fullAVL.find(item))

        print("\ntestFind PASSED")
        
    def testDuplicateInsert(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #Duplicate Insert should fail and NOT change the output
        for item in self.insertList:
            self.assertFalse(self.fullAVL.insert(item))
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        print("\ntestDuplicateInsert PASSED")
        
    def testCopy(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        copy = self.fullAVL.copyTree()
        self.assertEqual(copy.outputTesting(),self.result)
        
        self.assertTrue(self.fullAVL.insert(1))
        self.assertTrue(copy.insert(0))
        
        #fullAVL after inserting 1
        newResult = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:0)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(2,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-2(BF:0)->(1,3)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(2)<-1(BF:0)->(None,None)\n'\
                 '(2)<-3(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        #The copy after inserting 0
        newCopy = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:0)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(2,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-2(BF:0)->(0,3)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(2)<-0(BF:0)->(None,None)\n'\
                 '(2)<-3(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        self.assertEqual(copy.outputTesting(),newCopy)
        print("\ntestCopy PASSED")
    
    def testFindMin(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #Find Min
        self.assertEqual(self.fullAVL.findMin(),2)
        
        #Insert New Min
        self.assertTrue(self.fullAVL.insert(0))
        newResult = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:0)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(2,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-2(BF:0)->(0,3)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(2)<-0(BF:0)->(None,None)\n'\
                 '(2)<-3(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        #Find New Min
        self.assertEqual(self.fullAVL.findMin(),0)

        print("\ntestFindMin PASSED")
        
    def testFindMax(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #Find Max
        self.assertEqual(self.fullAVL.findMax(),99)
        
        #Insert New Max
        self.assertTrue(self.fullAVL.insert(100))
        newResult = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:0)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,99)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-99(BF:0)->(98,100)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(99)<-98(BF:0)->(None,None)\n'\
                 '(99)<-100(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        #Find New Max
        self.assertEqual(self.fullAVL.findMax(),100)
        print("\ntestFindMax PASSED")
        
    def testDeleteLeaf(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #Delete requires rotations
        self.assertTrue(self.fullAVL.delete(99))
        newResult = '(None)<-6(BF:-1)->(4,93)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-93(BF:1)->(30,97)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(93)<-30(BF:0)->(12,62)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Delete does not require rotations
        self.assertTrue(self.fullAVL.delete(7))
        newResult = '(None)<-6(BF:-1)->(4,93)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-93(BF:1)->(30,97)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(93)<-30(BF:-1)->(12,62)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:0)->(None,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Delete requires rotations
        self.assertTrue(self.fullAVL.delete(2))
        newResult = '(None)<-30(BF:0)->(6,93)\n'\
                 '(30)<-6(BF:1)->(4,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(6)<-4(BF:0)->(3,5)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(4)<-3(BF:0)->(None,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Delete does not require rotations
        self.assertTrue(self.fullAVL.delete(5))
        newResult = '(None)<-30(BF:0)->(6,93)\n'\
                 '(30)<-6(BF:1)->(4,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(6)<-4(BF:1)->(3,None)\n'\
                 '(6)<-12(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(4)<-3(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Delete requires rotations
        self.assertTrue(self.fullAVL.delete(12))
        newResult = '(None)<-30(BF:-1)->(4,93)\n'\
                 '(30)<-4(BF:0)->(3,6)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(4)<-3(BF:0)->(None,None)\n'\
                 '(4)<-6(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        print("\ntestDeleteLeaf PASSED")
        
    def testDeleteFail(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #FAIL DELETES (keys not present)
        failDeletes = [x for x in range(0,101)]
        for item in self.insertList:
            if item in failDeletes:
                failDeletes.remove(item)
        for item in failDeletes:
            self.assertFalse(self.fullAVL.delete(item))
            
        #Check to make sure tree was not changed
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #Successfully delete 99
        #Delete requires rotations
        self.assertTrue(self.fullAVL.delete(99))
        newResult = '(None)<-6(BF:-1)->(4,93)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-93(BF:1)->(30,97)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(93)<-30(BF:0)->(12,62)\n'\
                 '(93)<-97(BF:0)->(95,98)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Try to delete 99 again
        self.assertFalse(self.fullAVL.delete(99))
        #Check to make sure tree was not changed
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        print("\ntestDeleteFail PASSED")
    
    def testDeleteInternal(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        #No rotations necessary
        self.assertTrue(self.fullAVL.delete(3))
        newResult = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:-1)->(4,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:0)->(2,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-2(BF:0)->(None,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        #No rotations necessary
        self.assertTrue(self.fullAVL.delete(4))
        newResult = '(None)<-93(BF:1)->(6,97)\n'\
                 '(93)<-6(BF:-1)->(2,30)\n'\
                 '(93)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-2(BF:-1)->(None,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(2)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        #Rotations Necessary
        self.assertTrue(self.fullAVL.delete(98))
        newResult = '(None)<-30(BF:0)->(6,93)\n'\
                 '(30)<-6(BF:0)->(2,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(6)<-2(BF:-1)->(None,5)\n'\
                 '(6)<-12(BF:1)->(7,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,99)\n'\
                 '(2)<-5(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        #No Rotations Necessary
        self.assertTrue(self.fullAVL.delete(6))
        newResult = '(None)<-30(BF:0)->(5,93)\n'\
                 '(30)<-5(BF:-1)->(2,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(5)<-2(BF:0)->(None,None)\n'\
                 '(5)<-12(BF:1)->(7,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,99)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Rotations Necessary
        self.assertTrue(self.fullAVL.delete(5))
        newResult = '(None)<-30(BF:-1)->(7,93)\n'\
                 '(30)<-7(BF:0)->(2,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(7)<-2(BF:0)->(None,None)\n'\
                 '(7)<-12(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,99)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Rotations Necessary
        self.assertTrue(self.fullAVL.delete(7))
        newResult = '(None)<-30(BF:-1)->(2,93)\n'\
                 '(30)<-2(BF:-1)->(None,12)\n'\
                 '(30)<-93(BF:0)->(62,97)\n'\
                 '(2)<-12(BF:0)->(None,None)\n'\
                 '(93)<-62(BF:0)->(47,64)\n'\
                 '(93)<-97(BF:0)->(95,99)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        #1 Rotation Necessary
        self.assertTrue(self.fullAVL.delete(2))
        newResult = '(None)<-93(BF:1)->(30,97)\n'\
                 '(93)<-30(BF:-1)->(12,62)\n'\
                 '(93)<-97(BF:0)->(95,99)\n'\
                 '(30)<-12(BF:0)->(None,None)\n'\
                 '(30)<-62(BF:0)->(47,64)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-99(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'\
                 '(62)<-64(BF:0)->(None,None)\n'
                 
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        print("\ntestDeleteInternal PASSED")
        
    def testDeleteRoot(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        self.assertTrue(self.fullAVL.delete(93))
        newResult = '(None)<-64(BF:1)->(6,97)\n'\
                 '(64)<-6(BF:0)->(4,30)\n'\
                 '(64)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-30(BF:0)->(12,62)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-62(BF:1)->(47,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(62)<-47(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(64))
        newResult = '(None)<-62(BF:1)->(6,97)\n'\
                 '(62)<-6(BF:0)->(4,30)\n'\
                 '(62)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-30(BF:1)->(12,47)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(30)<-12(BF:1)->(7,None)\n'\
                 '(30)<-47(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Requires Rotation
        self.assertTrue(self.fullAVL.delete(62))
        newResult = '(None)<-47(BF:1)->(6,97)\n'\
                 '(47)<-6(BF:1)->(4,12)\n'\
                 '(47)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-12(BF:0)->(7,30)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(12)<-30(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(47))
        newResult = '(None)<-30(BF:1)->(6,97)\n'\
                 '(30)<-6(BF:1)->(4,12)\n'\
                 '(30)<-97(BF:-1)->(95,98)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-12(BF:1)->(7,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(12)<-7(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        #Requires Rotation
        self.assertTrue(self.fullAVL.delete(30))
        newResult = '(None)<-12(BF:0)->(4,97)\n'\
                 '(12)<-4(BF:0)->(3,6)\n'\
                 '(12)<-97(BF:-1)->(95,98)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-6(BF:0)->(5,7)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(6)<-5(BF:0)->(None,None)\n'\
                 '(6)<-7(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(12))
        newResult = '(None)<-7(BF:0)->(4,97)\n'\
                 '(7)<-4(BF:0)->(3,6)\n'\
                 '(7)<-97(BF:-1)->(95,98)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-6(BF:1)->(5,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(6)<-5(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(7))
        newResult = '(None)<-6(BF:0)->(4,97)\n'\
                 '(6)<-4(BF:1)->(3,5)\n'\
                 '(6)<-97(BF:-1)->(95,98)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-5(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(6))
        newResult = '(None)<-5(BF:-1)->(3,97)\n'\
                 '(5)<-3(BF:0)->(2,4)\n'\
                 '(5)<-97(BF:-1)->(95,98)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(3)<-4(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(5))
        newResult = '(None)<-4(BF:-1)->(3,97)\n'\
                 '(4)<-3(BF:1)->(2,None)\n'\
                 '(4)<-97(BF:-1)->(95,98)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(97)<-95(BF:0)->(None,None)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(4))
        newResult = '(None)<-97(BF:0)->(3,98)\n'\
                 '(97)<-3(BF:0)->(2,95)\n'\
                 '(97)<-98(BF:-1)->(None,99)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(3)<-95(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.delete(97))
        newResult = '(None)<-95(BF:0)->(3,98)\n'\
                 '(95)<-3(BF:1)->(2,None)\n'\
                 '(95)<-98(BF:-1)->(None,99)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        self.assertTrue(self.fullAVL.delete(95))
        newResult = '(None)<-3(BF:-1)->(2,98)\n'\
                 '(3)<-2(BF:0)->(None,None)\n'\
                 '(3)<-98(BF:-1)->(None,99)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        self.assertTrue(self.fullAVL.delete(3))
        newResult = '(None)<-98(BF:0)->(2,99)\n'\
                 '(98)<-2(BF:0)->(None,None)\n'\
                 '(98)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        self.assertTrue(self.fullAVL.delete(98))
        newResult = '(None)<-2(BF:-1)->(None,99)\n'\
                 '(2)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        self.assertTrue(self.fullAVL.delete(2))
        newResult = '(None)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        self.assertTrue(self.fullAVL.delete(99))
        newResult = '(Empty)'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        for item in range(0,101):
            self.assertFalse(self.fullAVL.delete(item))
            self.assertFalse(self.fullAVL.find(item))
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        print("\ntestDeleteRoot PASSED")
    
    def testDeleteTree(self):
        self.assertEqual(self.fullAVL.outputTesting(),self.result)
        
        self.fullAVL.deleteTree()
        newResult = '(Empty)'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)

        for item in range(0,101):
            self.assertFalse(self.fullAVL.delete(item))
            self.assertFalse(self.fullAVL.find(item))
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        self.assertTrue(self.fullAVL.insert(99))
        newResult = '(None)<-99(BF:0)->(None,None)\n'
        self.assertEqual(self.fullAVL.outputTesting(),newResult)
        
        print("\ntestDeleteTree PASSED")
    
    def testListSort(self):
        listToSort = [x for x in range(0,101,1)]
        
        for item in listToSort:
            random.shuffle(listToSort)
            for value in listToSort:
                self.avl.insert(value)
                
            sortedList = self.avl.traverseDFSinorder()
            self.assertEqual(sortedList,[x for x in range(0,101,1)])
            self.avl.deleteTree()

        print("\ntestListSort PASSED")