示例#1
0
 public void Initialize()
 {
     _session      = new Session(new TestPlatform(), "");
     _mockTree     = new MockBTree <object>();
     _mockProvider = new MockBTreeDataProvider <object>();
     _index        = new RecordIndex <object>(_session, _mockTree, _mockProvider);
 }
示例#2
0
        public void BTreeTravelTest()
        {
            List <BTreeNode> travelNodes   = new List <BTreeNode>();
            BTreeNode        rootBTreeNode = MockBTree.CreateFakeBTree();

            #region 二叉树广度优先遍历

            //递归算法
            //travelNodes.Clear();
            //new BTree(EnumTravelOrder.PreOrder).BreadthFirstTravel(ref travelNodes, rootBTreeNode);
            //MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Breadth, EnumTravelOrder.None, EnumArithmeticType.Recursion);

            //非递归算法
            travelNodes.Clear();
            travelNodes = new BTree(EnumTravelOrder.PreOrder).BreadthFirstTravel(rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Breadth, EnumTravelOrder.None, EnumArithmeticType.UnRecursion);

            #endregion

            #region 二叉树深度优先遍历

            #region 递归算法
            //前序
            travelNodes.Clear();
            new BTree(EnumTravelOrder.PreOrder).DepthFirstTravel(ref travelNodes, rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Depth, EnumTravelOrder.PreOrder, EnumArithmeticType.Recursion);

            //中序
            travelNodes.Clear();
            new BTree(EnumTravelOrder.InOrder).DepthFirstTravel(ref travelNodes, rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Depth, EnumTravelOrder.InOrder, EnumArithmeticType.Recursion);

            //后序
            travelNodes.Clear();
            new BTree(EnumTravelOrder.PostOrder).DepthFirstTravel(ref travelNodes, rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Depth, EnumTravelOrder.PostOrder, EnumArithmeticType.Recursion);
            #endregion

            #region 非递归算法
            //前序
            travelNodes.Clear();
            travelNodes = new BTree(EnumTravelOrder.PreOrder).DepthFirstTravel(rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Depth, EnumTravelOrder.PreOrder, EnumArithmeticType.UnRecursion);

            //中序
            travelNodes.Clear();
            travelNodes = new BTree(EnumTravelOrder.InOrder).DepthFirstTravel(rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Depth, EnumTravelOrder.InOrder, EnumArithmeticType.UnRecursion);

            //后序
            travelNodes.Clear();
            travelNodes = new BTree(EnumTravelOrder.PostOrder).DepthFirstTravel(rootBTreeNode);
            MockBTree.PrintTravelNodeNames(travelNodes, EnumTravelType.Depth, EnumTravelOrder.PostOrder, EnumArithmeticType.UnRecursion);
            #endregion

            #endregion
        }
示例#3
0
        public void ConstructorThrowsWhenArgIsNotReadOnly()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                using (MockStream stream = new MockStream(ms, true, true, true))
                {
                    long pageSize = BTreeNode <long, string> .GetRequiredPageSize(MockLongSerializer.CDataSize, MockStringSerializer.CDataSize, BTreeNode <long, string> .VeryMinKeyValuePairCapacity);

                    using (StreamingPageStorage storage = StreamingPageStorage.Create(stream, pageSize, 1, null, new CancellationToken(false), true))
                    {
                        MockBTree tree = new MockBTree(storage, new MockLongSerializer(), new MockStringSerializer());

                        Assert.ThrowsException <ArgumentException>(() => {
                            var reader = new BTreeReader <long, string>(tree);
                        });
                    }
                }
            }
        }
示例#4
0
        public void ConstructorWorks(long count)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                using (MockStream stream = new MockStream(ms, true, true, true))
                {
                    long pageSize = BTreeNode <long, string> .GetRequiredPageSize(MockLongSerializer.CDataSize, MockStringSerializer.CDataSize, BTreeNode <long, string> .VeryMinKeyValuePairCapacity);

                    using (var storage = StreamingPageStorage.Create(stream, pageSize, 1, null, new CancellationToken(false), true))
                    {
                        var tree = new MockBTree(storage, new MockLongSerializer(), new MockStringSerializer());

                        //Initialize some data into the tree
                        for (long i = 0; i < count; i++)
                        {
                            Assert.IsTrue(tree.Insert(i, i.ToString(), false, out _));
                        }
                    }

                    //Load the tree as read-only
                    using (var storage = StreamingPageStorage.Load(stream, true, true, true))
                    {
                        var tree = new MockBTree(storage, new MockLongSerializer(), new MockStringSerializer());

                        BTreeReader <long, string> reader = new BTreeReader <long, string>(tree);
                        Assert.AreSame(tree, reader.BTree);

                        if (tree.Root != null)
                        {
                            Assert.AreEqual(tree.Root.PageIndex, reader.RootNode.PageIndex);
                        }
                        else
                        {
                            Assert.IsNull(reader.RootNode);
                        }
                    }
                }
            }
        }