Код: Выделить всё
from dataclasses import dataclass
from enum import Enum
from typing import Optional, Generic, TypeVar
T = TypeVar('T')
class Color(Enum):
RED = 0
BLACK = 1
@dataclass
class Node(Generic[T]):
color: Color
value: T
parent: Optional['Node[T]'] = None
left: Optional['Node[T]'] = None
right: Optional['Node[T]'] = None
@dataclass
class RedBlackTree(Generic[T]):
root: Node
def rotate_left(self, x: Node[T]):
y = x.right
x.right = y.left
if y.left != None:
y.left.parent = x
y.parent = x.parent
if x.parent == None:
self.root = y
elif x == x.parent.left:
x.parent.left = y
else:
x.parent.right = y
y.left = x
x.parent = y
Код: Выделить всё
import pprint
import unittest
from src.red_black_tree import RedBlackTree, Node, Color
class TestRedBlackTreeMethods(unittest.TestCase):
def test_left_rotation(self):
node4 = Node(Color.BLACK, value=15, left=None, right=None)
node2 = Node(Color.BLACK, value=2, left=None, right=None)
node3 = Node(Color.RED, value=12, left=None, right=node4)
node1 = Node(color=Color.RED, parent=None, left=node2, right=node3, value=10)
node4.parent = node3
node3.parent = node1
node2.parent = node1
tree = RedBlackTree(root=node1)
tree.rotate_left(node1)
expected_node4 = Node(Color.BLACK, value=2, left=None, right=None)
expected_node3 = Node(color=Color.RED, left=node2, value=10)
expected_node2 = Node(Color.BLACK, value=15, left=None, right=None)
expected_node1 = Node(Color.RED, value= 12, parent=None, right=expected_node2, left=expected_node3)
expected_node2.parent = expected_node1
expected_node3.parent = expected_node1
expected_node4.parent = expected_node3
expected_tree = RedBlackTree(root=expected_node1)
self.assertEqual(tree.root.value, expected_tree.root.value)
self.assertEqual(tree.root.left.value, expected_tree.root.left.value)
self.assertEqual(tree.root.right.value, expected_tree.root.right.value)
self.assertEqual(tree.root.left.left.value, expected_tree.root.left.left.value)
self.assertEqual(tree, expected_tree)
if __name__ == '__main__':
unittest.main()
Подробнее здесь: https://stackoverflow.com/questions/783 ... h-unittest