LayoutQueueTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Xunit;
  4. namespace Avalonia.Layout.UnitTests
  5. {
  6. public class LayoutQueueTests
  7. {
  8. [Fact]
  9. public void Should_Enqueue()
  10. {
  11. var target = new LayoutQueue<string>(_ => true);
  12. var refQueue = new Queue<string>();
  13. var items = new[] { "1", "2", "3" };
  14. foreach (var item in items)
  15. {
  16. target.Enqueue(item);
  17. refQueue.Enqueue(item);
  18. }
  19. Assert.Equal(refQueue, target);
  20. }
  21. [Fact]
  22. public void Should_Dequeue()
  23. {
  24. var target = new LayoutQueue<string>(_ => true);
  25. var refQueue = new Queue<string>();
  26. var items = new[] { "1", "2", "3" };
  27. foreach (var item in items)
  28. {
  29. target.Enqueue(item);
  30. refQueue.Enqueue(item);
  31. }
  32. while (refQueue.Count > 0)
  33. {
  34. Assert.Equal(refQueue.Dequeue(), target.Dequeue());
  35. }
  36. }
  37. [Fact]
  38. public void Should_Enqueue_UniqueElements()
  39. {
  40. var target = new LayoutQueue<string>(_ => true);
  41. var items = new[] { "1", "2", "3", "1" };
  42. foreach (var item in items)
  43. {
  44. target.Enqueue(item);
  45. }
  46. Assert.Equal(3, target.Count);
  47. Assert.Equal(items.Take(3), target);
  48. }
  49. [Fact]
  50. public void Shouldnt_Enqueue_More_Than_Limit_In_Loop()
  51. {
  52. var target = new LayoutQueue<string>(_ => true);
  53. //1
  54. target.Enqueue("Foo");
  55. Assert.Equal(1, target.Count);
  56. target.BeginLoop(3);
  57. target.Dequeue();
  58. //2
  59. target.Enqueue("Foo");
  60. target.Dequeue();
  61. //3
  62. target.Enqueue("Foo");
  63. Assert.Equal(1, target.Count);
  64. target.Dequeue();
  65. //4 more than limit shouldn't be added
  66. target.Enqueue("Foo");
  67. Assert.Equal(0, target.Count);
  68. }
  69. [Fact]
  70. public void Shouldnt_Count_Unique_Enqueue_For_Limit_In_Loop()
  71. {
  72. var target = new LayoutQueue<string>(_ => true);
  73. //1
  74. target.Enqueue("Foo");
  75. Assert.Equal(1, target.Count);
  76. target.BeginLoop(3);
  77. target.Dequeue();
  78. //2
  79. target.Enqueue("Foo");
  80. target.Enqueue("Foo");
  81. target.Dequeue();
  82. //3
  83. target.Enqueue("Foo");
  84. target.Enqueue("Foo");
  85. Assert.Equal(1, target.Count);
  86. target.Dequeue();
  87. //4 more than limit shouldn't be added
  88. target.Enqueue("Foo");
  89. Assert.Equal(0, target.Count);
  90. }
  91. [Fact]
  92. public void Should_Enqueue_When_Condition_True_After_Loop_When_Limit_Met()
  93. {
  94. var target = new LayoutQueue<string>(_ => true);
  95. //1
  96. target.Enqueue("Foo");
  97. Assert.Equal(1, target.Count);
  98. target.BeginLoop(3);
  99. target.Dequeue();
  100. //2
  101. target.Enqueue("Foo");
  102. target.Dequeue();
  103. //3
  104. target.Enqueue("Foo");
  105. Assert.Equal(1, target.Count);
  106. target.Dequeue();
  107. //4 more than limit shouldn't be added to queue
  108. target.Enqueue("Foo");
  109. Assert.Equal(0, target.Count);
  110. target.EndLoop();
  111. //after loop should be added once
  112. Assert.Equal(1, target.Count);
  113. Assert.Equal("Foo", target.First());
  114. }
  115. [Fact]
  116. public void Shouldnt_Enqueue_When_Condition_False_After_Loop_When_Limit_Met()
  117. {
  118. var target = new LayoutQueue<string>(_ => false);
  119. //1
  120. target.Enqueue("Foo");
  121. Assert.Equal(1, target.Count);
  122. target.BeginLoop(3);
  123. target.Dequeue();
  124. //2
  125. target.Enqueue("Foo");
  126. target.Dequeue();
  127. //3
  128. target.Enqueue("Foo");
  129. Assert.Equal(1, target.Count);
  130. target.Dequeue();
  131. //4 more than limit shouldn't be added
  132. target.Enqueue("Foo");
  133. Assert.Equal(0, target.Count);
  134. target.EndLoop();
  135. Assert.Equal(0, target.Count);
  136. }
  137. }
  138. }