using LLama.Common; namespace LLama.Unittest; public class FixedSizeQueueTests { [Fact] public void Create() { var q = new FixedSizeQueue(7); Assert.Equal(7, q.Capacity); Assert.Empty(q); } [Fact] public void CreateFromItems() { var q = new FixedSizeQueue(7, new [] { 1, 2, 3 }); Assert.Equal(7, q.Capacity); Assert.Equal(3, q.Count); Assert.True(q.ToArray().SequenceEqual(new[] { 1, 2, 3 })); } [Fact] public void Indexing() { var q = new FixedSizeQueue(7, new[] { 1, 2, 3 }); Assert.Equal(1, q[0]); Assert.Equal(2, q[1]); Assert.Equal(3, q[2]); Assert.Throws(() => q[3]); } [Fact] public void CreateFromFullItems() { var q = new FixedSizeQueue(3, new[] { 1, 2, 3 }); Assert.Equal(3, q.Capacity); Assert.Equal(3, q.Count); Assert.True(q.ToArray().SequenceEqual(new[] { 1, 2, 3 })); } [Fact] public void CreateFromTooManyItems() { Assert.Throws(() => new FixedSizeQueue(2, new[] { 1, 2, 3 })); } [Fact] public void CreateFromTooManyItemsNonCountable() { Assert.Throws(() => new FixedSizeQueue(2, Items())); return; static IEnumerable Items() { yield return 1; yield return 2; yield return 3; } } [Fact] public void Enqueue() { var q = new FixedSizeQueue(7, new[] { 1, 2, 3 }); q.Enqueue(4); q.Enqueue(5); Assert.Equal(7, q.Capacity); Assert.Equal(5, q.Count); Assert.True(q.ToArray().SequenceEqual(new[] { 1, 2, 3, 4, 5 })); } [Fact] public void EnqueueOverflow() { var q = new FixedSizeQueue(5, new[] { 1, 2, 3 }); q.Enqueue(4); q.Enqueue(5); q.Enqueue(6); q.Enqueue(7); Assert.Equal(5, q.Capacity); Assert.Equal(5, q.Count); Assert.True(q.ToArray().SequenceEqual(new[] { 3, 4, 5, 6, 7 })); } }