43 lines
1 KiB
Python
43 lines
1 KiB
Python
from rbt import RBTree
|
|
|
|
import logging
|
|
import pytest
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"values, delete_order",
|
|
[
|
|
([0, 1, -1], [0, -1, 1]),
|
|
([0, 1, 2, 3, 4, 5], [4, 2, 1, 0, 5, 3]),
|
|
(
|
|
[32, 1, 2, 3, 4, 5, 0, -2, -4, -3, -1],
|
|
[-4, -3, 1, 2, 5, 3, -2, 4, 32, -1, 0],
|
|
),
|
|
([0, 1, 2, -2, -3, -1], [-3, 2, 1, 0, -1, -2]),
|
|
([0, 1, 2, 3, 4, 5, -1], [4, 2, 1, 0, 5, 3, -1]),
|
|
],
|
|
)
|
|
def test_delete_minimal(values, delete_order):
|
|
tree = RBTree()
|
|
|
|
for value in values:
|
|
tree.insert(value)
|
|
|
|
for value in delete_order:
|
|
logger.info("Deleting %s", value)
|
|
|
|
before = str(tree)
|
|
tree.delete(value)
|
|
after = str(tree)
|
|
|
|
try:
|
|
assert tree.is_correct
|
|
except AssertionError:
|
|
logger.info(
|
|
f"[FAIL] Delete {value} from {values} in order {delete_order}"
|
|
)
|
|
logger.info(f"Before:\n{before}")
|
|
logger.info(f"After:\n{after}")
|
|
raise
|