StackExtensionsTests.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using UnitTests;
  2. namespace UnitTests_Parallelizable.ApplicationTests;
  3. public class StackExtensionsTests : FakeDriverBase
  4. {
  5. [Fact]
  6. public void Stack_topLevels_Contains ()
  7. {
  8. Stack<Toplevel> topLevels = CreatetopLevels ();
  9. var comparer = new ToplevelEqualityComparer ();
  10. Assert.True (topLevels.Contains (new Window { Id = "w2" }, comparer));
  11. Assert.False (topLevels.Contains (new Toplevel { Id = "top2" }, comparer));
  12. }
  13. [Fact]
  14. public void Stack_topLevels_CreatetopLevels ()
  15. {
  16. Stack<Toplevel> topLevels = CreatetopLevels ();
  17. int index = topLevels.Count - 1;
  18. foreach (Toplevel top in topLevels)
  19. {
  20. if (top.GetType () == typeof (Toplevel))
  21. {
  22. Assert.Equal ("Top", top.Id);
  23. }
  24. else
  25. {
  26. Assert.Equal ($"w{index}", top.Id);
  27. }
  28. index--;
  29. }
  30. Toplevel [] tops = topLevels.ToArray ();
  31. Assert.Equal ("w4", tops [0].Id);
  32. Assert.Equal ("w3", tops [1].Id);
  33. Assert.Equal ("w2", tops [2].Id);
  34. Assert.Equal ("w1", tops [3].Id);
  35. Assert.Equal ("Top", tops [^1].Id);
  36. }
  37. [Fact]
  38. public void Stack_topLevels_FindDuplicates ()
  39. {
  40. Stack<Toplevel> topLevels = CreatetopLevels ();
  41. var comparer = new ToplevelEqualityComparer ();
  42. topLevels.Push (new Toplevel { Id = "w4" });
  43. topLevels.Push (new Toplevel { Id = "w1" });
  44. Toplevel [] dup = topLevels.FindDuplicates (comparer).ToArray ();
  45. Assert.Equal ("w4", dup [0].Id);
  46. Assert.Equal ("w1", dup [^1].Id);
  47. }
  48. [Fact]
  49. public void Stack_topLevels_MoveNext ()
  50. {
  51. Stack<Toplevel> topLevels = CreatetopLevels ();
  52. topLevels.MoveNext ();
  53. Toplevel [] tops = topLevels.ToArray ();
  54. Assert.Equal ("w3", tops [0].Id);
  55. Assert.Equal ("w2", tops [1].Id);
  56. Assert.Equal ("w1", tops [2].Id);
  57. Assert.Equal ("Top", tops [3].Id);
  58. Assert.Equal ("w4", tops [^1].Id);
  59. }
  60. [Fact]
  61. public void Stack_topLevels_MovePrevious ()
  62. {
  63. Stack<Toplevel> topLevels = CreatetopLevels ();
  64. topLevels.MovePrevious ();
  65. Toplevel [] tops = topLevels.ToArray ();
  66. Assert.Equal ("Top", tops [0].Id);
  67. Assert.Equal ("w4", tops [1].Id);
  68. Assert.Equal ("w3", tops [2].Id);
  69. Assert.Equal ("w2", tops [3].Id);
  70. Assert.Equal ("w1", tops [^1].Id);
  71. }
  72. [Fact]
  73. public void Stack_topLevels_MoveTo ()
  74. {
  75. Stack<Toplevel> topLevels = CreatetopLevels ();
  76. var valueToMove = new Window { Id = "w1" };
  77. var comparer = new ToplevelEqualityComparer ();
  78. topLevels.MoveTo (valueToMove, 1, comparer);
  79. Toplevel [] tops = topLevels.ToArray ();
  80. Assert.Equal ("w4", tops [0].Id);
  81. Assert.Equal ("w1", tops [1].Id);
  82. Assert.Equal ("w3", tops [2].Id);
  83. Assert.Equal ("w2", tops [3].Id);
  84. Assert.Equal ("Top", tops [^1].Id);
  85. }
  86. [Fact]
  87. public void Stack_topLevels_MoveTo_From_Last_To_Top ()
  88. {
  89. Stack<Toplevel> topLevels = CreatetopLevels ();
  90. var valueToMove = new Window { Id = "Top" };
  91. var comparer = new ToplevelEqualityComparer ();
  92. topLevels.MoveTo (valueToMove, 0, comparer);
  93. Toplevel [] tops = topLevels.ToArray ();
  94. Assert.Equal ("Top", tops [0].Id);
  95. Assert.Equal ("w4", tops [1].Id);
  96. Assert.Equal ("w3", tops [2].Id);
  97. Assert.Equal ("w2", tops [3].Id);
  98. Assert.Equal ("w1", tops [^1].Id);
  99. }
  100. [Fact]
  101. public void Stack_topLevels_Replace ()
  102. {
  103. Stack<Toplevel> topLevels = CreatetopLevels ();
  104. var valueToReplace = new Window { Id = "w1" };
  105. var valueToReplaceWith = new Window { Id = "new" };
  106. var comparer = new ToplevelEqualityComparer ();
  107. topLevels.Replace (valueToReplace, valueToReplaceWith, comparer);
  108. Toplevel [] tops = topLevels.ToArray ();
  109. Assert.Equal ("w4", tops [0].Id);
  110. Assert.Equal ("w3", tops [1].Id);
  111. Assert.Equal ("w2", tops [2].Id);
  112. Assert.Equal ("new", tops [3].Id);
  113. Assert.Equal ("Top", tops [^1].Id);
  114. }
  115. [Fact]
  116. public void Stack_topLevels_Swap ()
  117. {
  118. Stack<Toplevel> topLevels = CreatetopLevels ();
  119. var valueToSwapFrom = new Window { Id = "w3" };
  120. var valueToSwapTo = new Window { Id = "w1" };
  121. var comparer = new ToplevelEqualityComparer ();
  122. topLevels.Swap (valueToSwapFrom, valueToSwapTo, comparer);
  123. Toplevel [] tops = topLevels.ToArray ();
  124. Assert.Equal ("w4", tops [0].Id);
  125. Assert.Equal ("w1", tops [1].Id);
  126. Assert.Equal ("w2", tops [2].Id);
  127. Assert.Equal ("w3", tops [3].Id);
  128. Assert.Equal ("Top", tops [^1].Id);
  129. }
  130. [Fact]
  131. public void ToplevelEqualityComparer_GetHashCode ()
  132. {
  133. Stack<Toplevel> topLevels = CreatetopLevels ();
  134. // Only allows unique keys
  135. HashSet<int> hCodes = new ();
  136. foreach (Toplevel top in topLevels)
  137. {
  138. Assert.True (hCodes.Add (top.GetHashCode ()));
  139. }
  140. }
  141. private Stack<Toplevel> CreatetopLevels ()
  142. {
  143. Stack<Toplevel> topLevels = new ();
  144. topLevels.Push (new Toplevel { Id = "Top" });
  145. topLevels.Push (new Window { Id = "w1" });
  146. topLevels.Push (new Window { Id = "w2" });
  147. topLevels.Push (new Window { Id = "w3" });
  148. topLevels.Push (new Window { Id = "w4" });
  149. return topLevels;
  150. }
  151. }