Ejemplo n.º 1
0
        public void SegmentDiscoveryTest()
        {
            var segmentFactory = new MemorySegmentFactory <int>(10);

            using (var queue = new DiskQueue <int>("dummy", segmentFactory, -1, false))
            {
                Assert.AreEqual(1, queue.SegmentCount);

                for (int i = 0; i < segmentFactory.Capacity * 2; i++)
                {
                    queue.Add(i);
                }

                Assert.AreEqual(2, queue.SegmentCount);
            }

            using (var queue = new DiskQueue <int>("dummy", segmentFactory, -1, false))
            {
                Assert.AreEqual(3, queue.SegmentCount);
                Assert.AreEqual(3, segmentFactory.AllocatedSegments.Count);

                for (int i = 0; i < segmentFactory.Capacity * 2; i++)
                {
                    Assert.AreEqual(i, queue.Take());
                }

                Assert.AreEqual(2, queue.SegmentCount);
            }
        }
Ejemplo n.º 2
0
        public void SegmentBackgroundCompactionTest()
        {
            var segmentFactory = new MemorySegmentFactory <int>(10);

            using (var queue = new DiskQueue <int>("dummy", segmentFactory, -1, true, 100))
            {
                Assert.AreEqual(1, queue.SegmentCount);

                for (int i = 0; i < segmentFactory.Capacity; i++)
                {
                    queue.Add(i);
                }

                Assert.AreEqual(1, queue.SegmentCount);

                queue.Add(-1);
                Assert.AreEqual(2, queue.SegmentCount);
                Assert.AreEqual(2, segmentFactory.AllocatedSegments.Count);

                for (int i = 0; i < segmentFactory.Capacity; i++)
                {
                    queue.Take();
                }

                Assert.IsTrue(segmentFactory.AllocatedSegments[0].IsCompleted);

                TimingAssert.AreEqual(10000, 1, () => { Interlocked.MemoryBarrier(); return(queue.SegmentCount); });
                Assert.AreEqual(2, segmentFactory.AllocatedSegments.Count);
            }
        }
Ejemplo n.º 3
0
        public void TestConstruction()
        {
            var factory = new MemorySegmentFactory <int>(100);

            using (var queue = new DiskQueue <int>("dummy", factory, 10, true, 500))
            {
                Assert.AreEqual("dummy", queue.Path);
                Assert.AreEqual(0, queue.Count);
                Assert.IsTrue(queue.IsEmpty);
                Assert.IsTrue(queue.IsBackgroundCompactionEnabled);
                Assert.AreEqual(1, queue.SegmentCount);
                Assert.AreEqual(1, factory.AllocatedSegments.Count);
                Assert.AreEqual(factory.Capacity * 10, queue.BoundedCapacity);

                for (int i = 0; i < factory.Capacity + 1; i++)
                {
                    queue.Add(1);
                }

                Assert.AreEqual(factory.Capacity + 1, queue.Count);
                Assert.IsFalse(queue.IsEmpty);
                Assert.AreEqual(2, queue.SegmentCount);
                Assert.AreEqual(2, factory.AllocatedSegments.Count);
            }
        }
Ejemplo n.º 4
0
        public void SegmentAllocationCompactionTest()
        {
            var segmentFactory = new MemorySegmentFactory <int>(10);

            using (var queue = new DiskQueue <int>("dummy", segmentFactory, -1, false))
            {
                Assert.AreEqual(1, queue.SegmentCount);

                for (int i = 0; i < segmentFactory.Capacity; i++)
                {
                    queue.Add(i);
                }

                Assert.AreEqual(1, queue.SegmentCount);

                queue.Add(-1);
                Assert.AreEqual(2, queue.SegmentCount);
                Assert.AreEqual(2, segmentFactory.AllocatedSegments.Count);

                for (int i = 0; i < segmentFactory.Capacity; i++)
                {
                    queue.Take();
                }

                Assert.IsTrue(segmentFactory.AllocatedSegments[0].IsCompleted);

                // should trigger compaction
                queue.Take();

                Assert.AreEqual(1, queue.SegmentCount);
                Assert.AreEqual(2, segmentFactory.AllocatedSegments.Count);
            }
        }
Ejemplo n.º 5
0
        private static void RunMemTest(int segmentCapacity, int segmentCount, bool backComp, Action <DiskQueue <int>, MemorySegmentFactory <int> > testRunner)
        {
            var factory = new MemorySegmentFactory <int>(segmentCapacity);

            using (var q = new DiskQueue <int>("dummy", factory, segmentCount, backComp, 500))
                testRunner(q, factory);
        }