bool Sync(TestUniNode uniTree, TestUniNode uniNode, byte uniDepth, int uniIt, UFTree ufTree, Int64 ufNode, object userData)
        {
            Assert.AreEqual(uniDepth, ufTree.GetDepth(ufNode), String.Format("ufNode: {0}", ufNode));
            TestUfTree tufTree = (TestUfTree)ufTree;

            Assert.AreEqual(uniDepth == 0 ? 0 : uniNode.ChildIndex + 1, uniIt);
            Assert.AreEqual(uniNode.Id, tufTree.Nodes[ufNode].Id);
            Assert.AreEqual("bla", userData);
            return(true);
        }
 unsafe void CreateTestUfTree(TestUfTree tree, ref int nodeIdx, int curDepth, int depthLimit, int childCount)
 {
     if (curDepth > depthLimit)
     {
         return;
     }
     tree.SetDepth(nodeIdx, (byte)curDepth);
     tree.Nodes[nodeIdx].Id = nodeIdx++;
     for (int c = 0; c < childCount; ++c)
     {
         CreateTestUfTree(tree, ref nodeIdx, curDepth + 1, depthLimit, childCount);
     }
 }
        public void Test_Sync()
        {
            int        nodesCount = 1 + 4 + 4 * 4 + 4 * 4 * 4;
            int        idx;
            TestUfTree ufTree = new TestUfTree(nodesCount);

            idx = 0;
            CreateTestUfTree(ufTree, ref idx, 0, 3, 4);


            TestUniNode uniRoot = new TestUniNode();

            idx = 0;
            CreateTestUniTree(uniRoot, ref idx, 0, 3, 4);

            string userData = "bla";

            SyncUniAndUF <int> .Sync(uniRoot, ufTree, Sync, userData);
        }