def test_enter_smaller_value(self):
     t = bst.push(None, 5)
     t = bst.push(t, 3)
     left = node.make_node(None, 3, None)
     expected = node.make_node(left, 5, None)
     self.assertEqual(t, expected)
     self.assertEqual(node.count(t), 2)
 def test_enter_larger_value(self):
     t = bst.push(None, 3)
     t = bst.push(t, 5)
     right = node.make_node(None, 5, None)
     expected = node.make_node(None, 3, right)
     self.assertEqual(t, expected)
     self.assertEqual(node.count(t), 2)
    def test_contains(self):
        values = [10, 5, 15, 3, 7, 13, 17, 20, 1]
        not_values = [2, 4, 6, 8, 11, 18, 21]
        t = None
        for val in values:
            t = bst.push(t, val)

        for val in values:
            self.assertTrue(bst.contains(t, val))
        for val in not_values:
            self.assertFalse(bst.contains(t, val))
 def test_pop_max(self):
     values = [10, 5, 15, 3, 7, 13, 17, 20, 1]
     t = None
     for val in values:
         t = bst.push(t, val)
     # pop back all values
     sorted_values = sorted(values, reverse=True)
     for expected_val in sorted_values:
         t, max_val = bst.pop_max(t)
         self.assertEqual(max_val, expected_val)
     # make sure that whole tree is empty
     self.assertIs(t, None)
     # check if we pop from empty tree result is None
     self.assertEqual(bst.pop_max(None), (None, None))
    def test_pop(self):
        values = [10, 5, 15, 3, 7, 13, 17, 20, 1]
        not_values = [2, 4, 6, 8, 11, 18, 21]
        t = None

        for val in values:
            t = bst.push(t, val)

        for val in not_values:
            self.assertEqual(bst.pop(t, val), (t, None))

        # pop back all values
        shuffled_values = values[:]
        random.shuffle(shuffled_values)
        for expected_val in shuffled_values:
            t, new_val = bst.pop(t, expected_val)
            self.assertEqual(new_val, expected_val)
        # make sure that whole tree is empty
        self.assertIs(t, None)
        # check if we pop from empty tree result is None
        self.assertEqual(bst.pop(None, 5), (None, None))