| 897 | |
| 898 | |
| 899 | def test_tree_validate_with_letters() -> None: |
| 900 | class TestNode(Node): |
| 901 | def __setattr__(self, attr: str, value: Any) -> None: |
| 902 | object.__setattr__(self, attr, value) |
| 903 | |
| 904 | root = Node("A") |
| 905 | root.validate() # Should pass |
| 906 | |
| 907 | root = Node("A") |
| 908 | root.left = Node("B") |
| 909 | root.validate() # Should pass |
| 910 | |
| 911 | root = Node("A") |
| 912 | root.left = Node("B") |
| 913 | root.right = Node(3) |
| 914 | root.validate() # Should pass |
| 915 | |
| 916 | root = Node("A") |
| 917 | root.left = Node("B") |
| 918 | root.right = Node(3) |
| 919 | root.left.left = Node(4) |
| 920 | root.left.right = Node(5) |
| 921 | root.left.right.left = Node(6) |
| 922 | root.validate() # Should pass |
| 923 | |
| 924 | root = TestNode("A") |
| 925 | root.left = "not_a_node" # type: ignore |
| 926 | with pytest.raises(NodeTypeError) as err1: |
| 927 | root.validate() |
| 928 | assert str(err1.value) == "invalid node instance at index 1" |
| 929 | |
| 930 | root = TestNode("A") |
| 931 | root.right = TestNode("B") |
| 932 | root.right.val = EMPTY_LIST |
| 933 | with pytest.raises(NodeValueError) as err2: |
| 934 | root.validate() |
| 935 | assert str(err2.value) == "invalid node value at index 2" |
| 936 | |
| 937 | root = TestNode("A") |
| 938 | root.left = TestNode("B") |
| 939 | root.left.right = root |
| 940 | with pytest.raises(NodeReferenceError) as err3: |
| 941 | root.validate() |
| 942 | assert str(err3.value) == "cyclic reference at Node(A) (level-order index 4)" |
| 943 | |
| 944 | |
| 945 | def test_tree_properties() -> None: |