public void EnqueueDequeueTest(IPersistentQueue <int> empty) { int count = 100; IEnumerable <int> items = Enumerable.Range(0, count); IPersistentQueue <int> queue = empty; foreach (int item in items) { int countBefore = queue.Count; queue = queue.Enqueue(item); Assert.Equal(countBefore + 1, queue.Count); (int head, IPersistentQueue <int> tail) = queue.Dequeue(); Assert.Equal(items.First(), head); Assert.Equal(countBefore, tail.Count); } foreach (int item in items) { int countBefore = queue.Count; int head; (head, queue) = queue.Dequeue(); Assert.Equal(item, head); } CheckEmptyBehaviour(queue); }
public void CreateQueueTest() { int count = 100; IEnumerable <int> items = Enumerable.Range(0, count); IPersistentQueue <int> queue = PersistentQueue <int> .Of(items); int itemsLeft = count; foreach (int expectedItem in items) { Assert.Equal(itemsLeft, queue.Count); int head; (head, queue) = queue.Dequeue(); itemsLeft--; Assert.Equal(expectedItem, head); } CheckEmptyBehaviour(queue); }
private static void CheckEmptyBehaviour <T>(IPersistentQueue <T> queue) { Assert.Equal(0, queue.Count); Assert.False(queue.GetEnumerator().MoveNext()); Assert.Throws <InvalidOperationException>(() => queue.Dequeue()); }