ConcurrentLimitedQueueTests.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Masuit.Tools.Systems;
  4. using Xunit;
  5. namespace Masuit.Tools.Abstractions.Test.Systems;
  6. public class ConcurrentLimitedQueueTests
  7. {
  8. [Fact]
  9. public void Constructor_WithLimit_SetsLimit()
  10. {
  11. // Arrange
  12. int limit = 5;
  13. // Act
  14. var queue = new ConcurrentLimitedQueue<int>(limit);
  15. // Assert
  16. Assert.Equal(limit, queue.Limit);
  17. }
  18. [Fact]
  19. public void Constructor_WithList_SetsLimitAndInitialItems()
  20. {
  21. // Arrange
  22. var list = new List<int> { 1, 2, 3 };
  23. // Act
  24. var queue = new ConcurrentLimitedQueue<int>(list);
  25. // Assert
  26. Assert.Equal(list.Count, queue.Limit);
  27. Assert.Equal(list, queue.ToList());
  28. }
  29. [Fact]
  30. public void ImplicitOperator_ConvertsListToQueue()
  31. {
  32. // Arrange
  33. var list = new List<int> { 1, 2, 3 };
  34. // Act
  35. ConcurrentLimitedQueue<int> queue = list;
  36. // Assert
  37. Assert.Equal(list.Count, queue.Limit);
  38. Assert.Equal(list, queue.ToList());
  39. }
  40. [Fact]
  41. public void Enqueue_AddsItemToQueue()
  42. {
  43. // Arrange
  44. var queue = new ConcurrentLimitedQueue<int>(3);
  45. // Act
  46. queue.Enqueue(1);
  47. // Assert
  48. Assert.Single(queue);
  49. Assert.Equal(1, queue.ToList()[0]);
  50. }
  51. [Fact]
  52. public void Enqueue_RemovesOldestItemWhenLimitExceeded()
  53. {
  54. // Arrange
  55. var queue = new ConcurrentLimitedQueue<int>(3);
  56. queue.Enqueue(1);
  57. queue.Enqueue(2);
  58. queue.Enqueue(3);
  59. // Act
  60. queue.Enqueue(4);
  61. // Assert
  62. Assert.Equal(3, queue.Count);
  63. Assert.DoesNotContain(1, queue);
  64. Assert.Equal(new List<int> { 2, 3, 4 }, queue.ToList());
  65. }
  66. }