def test_find_largest_bst(self):
        node, size = b.find_largest_bst(self.class_under_test)
        self.assertTrue(node == None)
        self.assertTrue(size == 0)

        # whole tree is a bst
        #          2 <- bst!
        #        1   4
        #          3   5
        node1 = b.Node(1)
        node2 = b.Node(2)
        node3 = b.Node(3)
        node4 = b.Node(4)
        node5 = b.Node(5)

        node2.left = node1
        node2.right = node4
        node4.left = node3
        node4.right = node5
        self.class_under_test.root = node2

        node, size = b.find_largest_bst(self.class_under_test)
        self.assertTrue(node.data == 2)
        self.assertTrue(size == 5)

        # part of tree is a bst; there's only one bst
        #          2
        #        1   3
        #          6   5 <- bst!
        #            4   7
        #                  8
        node1 = b.Node(1)
        node2 = b.Node(2)
        node3 = b.Node(3)
        node4 = b.Node(4)
        node5 = b.Node(5)
        node6 = b.Node(6)
        node7 = b.Node(7)
        node8 = b.Node(8)

        node2.left = node1
        node2.right = node3
        node3.left = node6
        node3.right = node5
        node5.left = node4
        node5.right = node7
        node7.right = node8
        self.class_under_test.root = node2

        node, size = b.find_largest_bst(self.class_under_test)
        self.assertTrue(node.data == 5)
        self.assertTrue(size == 4)

        # part of tree is a bst; there's more than one bst
        #             2
        # bst! -> 1       3
        #       0  1.5  6   5 <- largest bst!
        #                 4   7
        #                       8
        node0 = b.Node(0)
        node1 = b.Node(1)
        node15 = b.Node(1.5)
        node2 = b.Node(2)
        node3 = b.Node(3)
        node4 = b.Node(4)
        node5 = b.Node(5)
        node6 = b.Node(6)
        node7 = b.Node(7)
        node8 = b.Node(8)

        node1.left = node0
        node1.right = node15
        node2.left = node1
        node2.right = node3
        node3.left = node6
        node3.right = node5
        node5.left = node4
        node5.right = node7
        node7.right = node8
        self.class_under_test.root = node2

        node, size = b.find_largest_bst(self.class_under_test)
        self.assertTrue(node.data == 5)
        self.assertTrue(size == 4)