コード例 #1
0
 def test_student_eq(self):
     """Tests to see if the student has a eq method implemented"""
     student1 = Student(10, "student")
     student2 = Student(10, "another_student")
     self.assertEqual(student1, student2)
     student1 = Student(10, "student")
     student2 = Student(15, "student")
     self.assertNotEqual(student1, student2)
コード例 #2
0
 def test_student_str(self):
     """Tests to see if the student has a str method implemented"""
     str_method = getattr(Student, "__str__", None)
     # check that it exists
     self.assertIsNotNone(str_method)
     # check that it's callable
     self.assertTrue(callable(str_method))
     # check that it's different from default behavior
     test_student = Student(10, "test_student")
     self.assertNotEqual(str(test_student), repr(test_student))
コード例 #3
0
    def test_get_first(self):
        """Tests the get_first method"""
        # test_values = [15, 0, -5, 5, 20, 25, 17]
        test_values = [Student(15, "Root"), Student(0, "Root->L"), Student(-5, "Root->L->L"),
                       Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                       Student(17, "Root->R->L")]
        new_tree = build_BST(test_values)
        # Starting Tree:
        #                     15
        #                 0       20
        #              -5   5  17    25
        #

        # Test 1
        # get root value of tree
        self.assertEqual(new_tree.get_first(), Student(15, "Root"))
コード例 #4
0
    def test_add_node_student(self):
        """Tests that nodes containing student data are added to the binary tree in the correct position"""
        test_students = [Student(15, "Root"), Student(0, "Root->Left"), Student(-5, "Root->L->L"),
                         Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                         Student(17, "Root->R->L")]
        # Expected Tree (Grades):
        #                     15
        #                 0       20
        #              -5   5  17    25

        student_tree = build_BST(test_students)
        self.assertEqual(student_tree.root.val, test_students[0])
        self.assertEqual(student_tree.root.left.val, test_students[1])
        self.assertEqual(student_tree.root.right.val, test_students[4])
        self.assertEqual(student_tree.root.left.left.val, test_students[2])
        self.assertEqual(student_tree.root.left.right.val, test_students[3])
        self.assertEqual(student_tree.root.right.right.val, test_students[5])
        self.assertEqual(student_tree.root.right.left.val, test_students[6])
コード例 #5
0
 def test_student_gt(self):
     """Tests to see if the student has a gt method implemented"""
     student1 = Student(10, "lesser_student")
     student2 = Student(12, "greater_student")
     self.assertGreater(student2, student1)
コード例 #6
0
 def test_student_lt(self):
     """Tests to see if the student has a lt method implemented"""
     student1 = Student(10, "lesser_student")
     student2 = Student(12, "greater_student")
     self.assertLess(student1, student2)
コード例 #7
0
    def test_remove_first(self):
        """Tests the remove_first method"""
        # test_values = [15, 0, -5, 5, 20, 25, 17]
        test_values = [Student(15, "Root"), Student(0, "Root->L"), Student(-5, "Root->L->L"),
                       Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                       Student(17, "Root->R->L")]
        new_tree = build_BST(test_values)
        # Starting Tree:
        #                     15
        #                 0       20
        #              -5   5  17    25
        #

        # Test 1
        # delete root, replace with left-most node of right child
        new_tree.remove_first()
        test_values.remove(Student(15, "Root"))
        # Expected Tree:
        #                     17
        #                 0       20
        #              -5   5        25
        self.assertEqual(new_tree.root.val.grade, 17)
        self.assertEqual(new_tree.root.right.val.grade, 20)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 2
        # delete root, replace with left-most node of right child
        new_tree.remove_first()
        test_values.remove(Student(17, "Root->R->L"))
        # Expected Tree:
        #                     20
        #                 0       25
        #              -5   5
        self.assertEqual(new_tree.root.val.grade, 20)
        self.assertEqual(new_tree.root.right.val.grade, 25)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 3
        # delete root, replace with left-most node of right child
        new_tree.remove_first()
        test_values.remove(Student(20, "Root->R"))
        # Expected Tree:
        #                     25
        #                 0
        #              -5   5
        self.assertEqual(new_tree.root.val.grade, 25)
        self.assertIsNone(new_tree.root.right)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 4
        # Continue removing until tree is empty
        # remove 25
        new_tree.remove_first()
        # Expected Tree:
        #                 0
        #              -5   5

        # Test 5
        # remove 0
        new_tree.remove_first()
        # Expected Tree:
        #                 5
        #              -5

        # Test 6
        # remove 5
        new_tree.remove_first()
        # Expected Tree:
        #              -5

        # Test 7
        # remove -5
        new_tree.remove_first()
        # Expected Tree:
        #              new_tree.root = None
        self.assertIsNone(new_tree.root)
コード例 #8
0
    def test_remove(self):
        """Tests that nodes can be removed from the binary search tree"""
        # test_values = [15, 0, -5, 5, 20, 25, 17]
        test_values = [Student(15, "Root"), Student(0, "Root->L"), Student(-5, "Root->L->L"),
                       Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                       Student(17, "Root->R->L")]
        new_tree = build_BST(test_values)
        # Starting Tree:
        #                     15
        #                 0       20
        #              -5   5  17    25
        #

        # Test 1
        # delete root, replace with left-most node of right child
        new_tree.remove(Student(15, "Root"))
        test_values.remove(Student(15, "Root"))
        # Expected Tree:
        #                     17
        #                 0       20
        #              -5   5        25
        self.assertEqual(new_tree.root.val.grade, 17)
        self.assertEqual(new_tree.root.right.val.grade, 20)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 2
        # delete root, replace with left-most node of right child
        new_tree.remove(Student(17, "Root->R->L"))
        test_values.remove(Student(17, "Root->R->L"))
        # Expected Tree:
        #                     20
        #                 0       25
        #              -5   5
        self.assertEqual(new_tree.root.val.grade, 20)
        self.assertEqual(new_tree.root.right.val.grade, 25)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 3
        # delete root, replace with left-most node of right child
        new_tree.remove(Student(20, "Root->R"))
        test_values.remove(Student(20, "Root->R"))
        # Expected Tree:
        #                     25
        #                 0
        #              -5   5
        self.assertEqual(new_tree.root.val.grade, 25)
        self.assertIsNone(new_tree.root.right)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 4
        # delete 5
        new_tree.remove(Student(5, "Root->L->R"))
        test_values.remove(Student(5, "Root->L->R"))
        # Expected Tree:
        #                    25
        #                 0
        #              -5
        self.assertEqual(new_tree.root.val.grade, 25)
        self.assertIsNone(new_tree.root.right)
        self.assertEqual(new_tree.root.left.val.grade, 0)
        self.assertIsNone(new_tree.root.left.right)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 5
        # delete single child node
        new_tree.remove(Student(0, "Root->L"))
        test_values.remove(Student(0, "Root->L"))
        # Expected Tree:
        #                 25
        #              -5
        self.assertEqual(new_tree.root.val.grade, 25)
        self.assertIsNone(new_tree.root.right)
        self.assertEqual(new_tree.root.left.val.grade, -5)
        self.assertIsNone(new_tree.root.left.right)
        self.assertIsNone(new_tree.root.left.left)
        # ensure the remaining values are in the tree
        self.assertEqual(test_contains(new_tree, test_values), True)

        # Test 6
        # delete root when replaced with node that has right child
        test_values = [Student(15, "Root"), Student(0, "Root->L"), Student(-5, "Root->L->L"),
                       Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                       Student(17, "Root->R->L"), Student(19, "Root->R->L->R")]
        new_tree = build_BST(test_values)
        # Starting Tree:
        #                     15
        #                 0       20
        #              -5   5  17    25
        #                        19
        new_tree.remove(Student(15, "Root"))
        test_values.remove(Student(15, "Root"))
        # Expected Tree:
        #                     17
        #                 0       20
        #              -5   5  19    25
        #
        self.assertEqual(new_tree.root.val.grade, 17)
        self.assertEqual(new_tree.root.right.val.grade, 20)
        self.assertEqual(new_tree.root.right.left.val.grade, 19)
        self.assertEqual(test_contains(new_tree, test_values), True)
コード例 #9
0
 def test_left_child(self):
     """Tests the left_child implementation of the student tree"""
     test_students = [Student(15, "Root"), Student(0, "Root->Left"), Student(-5, "Root->L->L"),
                      Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                      Student(17, "Root->R->L")]
     # Expected Tree (Grades):
     #                     15
     #                 0       20
     #              -5   5  17    25
     student_tree = build_BST(test_students)
     # start node = root
     self.assertEqual(Student(-5, "Root->L->L"), student_tree.left_child(student_tree.root).val)
     # start node = root.left
     self.assertEqual(Student(-5, "Root->L->L"), student_tree.left_child(student_tree.root.left).val)
     # start node = root.right
     self.assertEqual(Student(17, "Root->R->L"), student_tree.left_child(student_tree.root.right).val)
     # start node = root.right.right
     self.assertEqual(Student(25, "Root->R->R"), student_tree.left_child(student_tree.root.right.right).val)
コード例 #10
0
    def test_post_order_traversal(self):
        """Tests student post-order-traversal implementation"""
        test_students = [Student(15, "Root"), Student(0, "Root->Left"), Student(-5, "Root->L->L"),
                         Student(5, "Root->L->R"), Student(20, "Root->R"), Student(25, "Root->R->R"),
                         Student(17, "Root->R->L")]
        # Expected Tree (Grades):
        #                     15
        #                 0       20
        #              -5   5  17    25
        student_tree = build_BST(test_students)

        # -5 -> 5 -> 0 -> 17 -> 25 -> 20 -> 15
        validated_traversal = [Student(-5, "Root->L->L"), Student(5, "Root->L->R"), Student(0, "Root->Left"),
                               Student(17, "Root->R->L"), Student(25, "Root->R->R"), Student(20, "Root->R"),
                               Student(15, "Root")]

        student_traversal = student_tree.post_order_traversal()
        for i in range(0, len(validated_traversal)):
            self.assertEqual(validated_traversal[i], student_traversal[i])
コード例 #11
0
ファイル: bst_test.py プロジェクト: benrprince/cs-261-bst
from bst import Student, BST

if __name__ == '__main__':
    bst1 = BST()
    bst1.add(5)
    bst1.add(9)
    bst1.add(1)
    print(bst1.in_order_traversal())

    bst2 = BST()
    bst2.add(Student(88, "Sasha"))
    bst2.add(Student(94, "Rachel"))
    bst2.add(Student(93, "Phil"))
    bst2.add(Student(85, "Mike"))

    in_order = bst2.in_order_traversal()
    for i in in_order:
        print(i)