public void Visit3NodeTree()
        {
            var tree         = new BinaryNode(predicateBuilder("Col1", "Cell1", PredicateType.LessThan), predicateBuilder("Col1", "Cell1", PredicateType.LessThan));
            var returnedTree = TreeDuplicateRemoval.RemoveDuplicates(tree);

            Assert.AreEqual(tree, returnedTree);
        }
        public void VisitSingleNode()
        {
            var tree   = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var repair = TreeDuplicateRemoval.RemoveDuplicates(tree);

            Assert.AreEqual(tree, repair);
        }
        public void Visit7NodeTree()
        {
            var rightRight   = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var left         = new BinaryNode(predicateBuilder("Col1", "Cell1", PredicateType.LessThan), predicateBuilder("Col1", "Cell1", PredicateType.LessThan), BinaryNodeType.AND);
            var right        = new BinaryNode(predicateBuilder("Col1", "Cell1", PredicateType.LessThan), rightRight, BinaryNodeType.AND);
            var testTree     = new BinaryNode(left, right, BinaryNodeType.AND);
            var correctTree  = new BinaryNode(left, rightRight, BinaryNodeType.AND);
            var returnedTree = TreeDuplicateRemoval.RemoveDuplicates(testTree);

            //TODO override reference equality
            Assert.AreEqual(correctTree.Left, ((BinaryNode)returnedTree).Left);
            Assert.AreEqual(correctTree.BranchSize, returnedTree.BranchSize);
            Assert.AreEqual(correctTree.NodeType, ((BinaryNode)returnedTree).NodeType);

            Assert.AreEqual(((PredicateNode)correctTree.Right).Condition, ((PredicateNode)((BinaryNode)returnedTree).Right).Condition);
            Assert.AreEqual(((PredicateNode)correctTree.Right).Left, ((PredicateNode)((BinaryNode)returnedTree).Right).Left);
            Assert.AreEqual(((PredicateNode)correctTree.Right).Right, ((PredicateNode)((BinaryNode)returnedTree).Right).Right);
            Assert.AreEqual(((PredicateNode)correctTree.Right).BranchSize, ((PredicateNode)((BinaryNode)returnedTree).Right).BranchSize);
        }
        public void VisitMultiNodeTree()
        {
            var right  = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var node7  = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var node8  = predicateBuilder("Col2", "Cell2", PredicateType.Equal);
            var node6  = new BinaryNode(node7, node8, BinaryNodeType.AND);
            var node9  = predicateBuilder("Col2", "Cell2", PredicateType.Equal);
            var node5  = new BinaryNode(node6, node9);
            var node10 = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var node4  = new BinaryNode(node5, node10, BinaryNodeType.AND);
            var node11 = predicateBuilder("Col2", "Cell2", PredicateType.Equal);
            var node3  = new BinaryNode(node4, node11);
            var node13 = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var node14 = predicateBuilder("Col2", "Cell2", PredicateType.Equal);
            var node12 = new BinaryNode(node13, node14);
            var node2  = new BinaryNode(node3, node12);
            var node15 = predicateBuilder("Col1", "Cell1", PredicateType.LessThan);
            var node1  = new BinaryNode(node2, node15);

            //Node 1 will be the original tree


            var correctTree = new BinaryNode(node3, node13, BinaryNodeType.AND);
            var resultTree  = TreeDuplicateRemoval.RemoveDuplicates(node1);



            //var correctTreeXMIND = correctTree.ToXMindTree(nameof(correctTree));
            //var resultTreeXMIND = resultTree.ToXMindTree(nameof(resultTree));
            //var node1XMIND = node1.ToXMindTree(nameof(node1));


            var XmindTest = new TestCaseXMindVisualiser(node1, correctTree, resultTree).CreateJoinedXMindGraph();

            Assert.AreEqual(correctTree.BranchSize, resultTree.BranchSize);
        }