public void Dequeue_Concurrently_Works() { // Arrange var bucket = new BucketQueue <string>(2); var count = 10000; var range = Enumerable.Range(0, count).ToList(); range.ForEach(i => bucket.Enqueue(i, i.ToString())); var dequeuedItems = new ConcurrentBag <string>(); // Act Enumerable.Range(0, 2 * count).AsParallel().ForAll(i => { string value; if (bucket.TryDequeue(out value)) { dequeuedItems.Add(value); } }); // Assert var rangeAsString = range.Select(x => x.ToString()).ToList(); Assert.True(new HashSet <string>(dequeuedItems).SetEquals(rangeAsString)); }
public void Dequeue_MultipleItems_Works() { // Arrange var bucket = new BucketQueue <string>(2); bucket.Enqueue(0, "0"); bucket.Enqueue(1, "1"); bucket.Enqueue(2, "2"); // Act / Assert string value; Assert.That(bucket.TryDequeue(out value), Is.True); Assert.That(value, Is.EqualTo("1")); Assert.That(bucket.TryDequeue(out value), Is.True); Assert.That(value, Is.EqualTo("0")); Assert.That(bucket.TryDequeue(out value), Is.True); Assert.That(value, Is.EqualTo("2")); Assert.That(bucket.TryDequeue(out value), Is.False); }
public void Dequeue_NonExistingItem_Works() { // Arrange var bucket = new BucketQueue <string>(1); // Act string value; var result = bucket.TryDequeue(out value); // Assert Assert.That(result, Is.False); Assert.That(value, Is.Null); }
public void Dequeue_SingleItem_Works() { // Arrange var bucket = new BucketQueue <string>(1); bucket.Enqueue(0, "test"); // Act string value; var result = bucket.TryDequeue(out value); // Assert Assert.That(result, Is.True); Assert.That(value, Is.EqualTo("test")); }
public void Benchmark(int buckets) { var count = 2000000; var bucket = new BucketQueue <string>(buckets); var range = Enumerable.Range(0, count).ToList(); range.ForEach(i => bucket.Enqueue(i, i.ToString())); var sw = Stopwatch.StartNew(); for (var i = 0; i < count; i++) { string value; bucket.TryDequeue(out value); } ; sw.Stop(); Assert.Inconclusive("{0} ops/sec", count / sw.Elapsed.Add(TimeSpan.FromTicks(1)).TotalSeconds); }