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); } }
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); } }
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); } }
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); } }
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); }