public void Add_4_2_1_3_Delete_1()
            {
                bool deleteResult = false;
                GenericBinaryTree<TestObject_Integer> testTree = new GenericBinaryTree<TestObject_Integer>();
                testTree.Add(new TestObject_Integer(4));
                testTree.Add(new TestObject_Integer(2));
                testTree.Add(new TestObject_Integer(1));
                testTree.Add(new TestObject_Integer(3));
                deleteResult = testTree.Delete(new TestObject_Integer(1));

                Assert.IsTrue(deleteResult, "DeleteResult");
                Assert.IsFalse(testTree.HasErrors, "HasErrors");

                Assert.IsNotNull(testTree.ParentNode, "ParentNode");
                Assert.IsNull(testTree.CurrentNode, "CurrentNode");
                Assert.IsNull(testTree.LeftGrandChild, "LeftGrandChild");
                Assert.IsNull(testTree.RightGrandChild, "RightGrandChild");

                Assert.AreEqual(2, testTree.ParentNode.Item.Value, "ParentNode");
            }
            public void GenericBinaryTree_AddRandomElementsAndDeleteThem()
            {
                TestObject_Integer[] testObjectArray_01 = new TestObject_Integer[100000];
                TestObject_Integer[] testObjectArray_02 = new TestObject_Integer[100000];

                for (int i = 0; i < testObjectArray_01.Length; i++)
                {
                    testObjectArray_01[i] = new TestObject_Integer(i);
                    testObjectArray_02[i] = new TestObject_Integer(i);
                }

                testObjectArray_01 = CollectionManipulation.RandomizeGenericArray<TestObject_Integer>(testObjectArray_01);
                System.Threading.Thread.Sleep(100);
                testObjectArray_02 = CollectionManipulation.RandomizeGenericArray<TestObject_Integer>(testObjectArray_02);

                GenericBinaryTree<TestObject_Integer> testTree = new GenericBinaryTree<TestObject_Integer>();

                bool addResult = true;
                for (int i = 0; i < testObjectArray_01.Length; i++)
                {
                    if (!testTree.Add(testObjectArray_01[i]))
                    {
                        addResult = false;
                    }
                }

                Assert.IsTrue(addResult, "addResult");
                Assert.IsFalse(testTree.HasErrors, "HasErrors");

                bool deleteResult = true;
                for (int i = 0; i < testObjectArray_02.Length; i++)
                {
                    if (!testTree.Delete(testObjectArray_02[i]))
                    {
                        deleteResult = false;
                    }
                }

                Assert.IsTrue(deleteResult, "deleteResult");
                Assert.IsFalse(testTree.HasErrors, "HasErrors");
                Assert.IsNull(testTree.RootNode, "RootNode");
            }
            public void Add_4_Delete_4()
            {
                GenericBinaryTree<TestObject_Integer> testTree = new GenericBinaryTree<TestObject_Integer>();
                bool deleteResult = false;
                testTree.Add(new TestObject_Integer(4));
                deleteResult = testTree.Delete(new TestObject_Integer(4));

                Assert.IsTrue(deleteResult, "DeleteResult");
                Assert.IsFalse(testTree.HasErrors, "HasErrors");

                Assert.IsNull(testTree.RootNode, "RootNode");
                Assert.IsNull(testTree.ParentNode, "ParentNode");
                Assert.IsNull(testTree.CurrentNode, "CurrentNode");
                Assert.IsNull(testTree.LeftGrandChild, "LeftGrandChild");
                Assert.IsNull(testTree.RightGrandChild, "RightGrandChild");
            }