PriorityQueueTest.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System.Reactive;
  2. using Xunit;
  3. namespace ReactiveTests.Tests
  4. {
  5. public class PriorityQueueTest
  6. {
  7. [Fact]
  8. public void Enqueue_dequeue()
  9. {
  10. var q = new PriorityQueue<int>();
  11. for (var i = 0; i < 16; i++)
  12. {
  13. Assert.Equal(0, q.Count);
  14. q.Enqueue(i);
  15. Assert.Equal(1, q.Count);
  16. Assert.Equal(i, q.Peek());
  17. Assert.Equal(1, q.Count);
  18. Assert.Equal(i, q.Dequeue());
  19. Assert.Equal(0, q.Count);
  20. }
  21. }
  22. [Fact]
  23. public void Enqueue_all_dequeue_all()
  24. {
  25. var q = new PriorityQueue<int>();
  26. for (var i = 0; i < 33; i++)
  27. {
  28. q.Enqueue(i);
  29. Assert.Equal(i + 1, q.Count);
  30. }
  31. Assert.Equal(33, q.Count);
  32. for (var i = 0; i < 33; i++)
  33. {
  34. Assert.Equal(33 - i, q.Count);
  35. Assert.Equal(i, q.Peek());
  36. Assert.Equal(i, q.Dequeue());
  37. }
  38. Assert.Equal(0, q.Count);
  39. }
  40. [Fact]
  41. public void Reverse_Enqueue_all_dequeue_all()
  42. {
  43. var q = new PriorityQueue<int>();
  44. for (var i = 32; i >= 0; i--)
  45. {
  46. q.Enqueue(i);
  47. Assert.Equal(33 - i, q.Count);
  48. }
  49. Assert.Equal(33, q.Count);
  50. for (var i = 0; i < 33; i++)
  51. {
  52. Assert.Equal(33 - i, q.Count);
  53. Assert.Equal(i, q.Peek());
  54. Assert.Equal(i, q.Dequeue());
  55. }
  56. Assert.Equal(0, q.Count);
  57. }
  58. [Fact]
  59. public void Remove_from_middle()
  60. {
  61. var q = new PriorityQueue<int>();
  62. for (var i = 0; i < 33; i++)
  63. {
  64. q.Enqueue(i);
  65. }
  66. q.Remove(16);
  67. for (var i = 0; i < 16; i++)
  68. {
  69. Assert.Equal(i, q.Dequeue());
  70. }
  71. for (var i = 16; i < 32; i++)
  72. {
  73. Assert.Equal(i + 1, q.Dequeue());
  74. }
  75. }
  76. [Fact]
  77. public void Repro_329()
  78. {
  79. var queue = new PriorityQueue<int>();
  80. queue.Enqueue(2);
  81. queue.Enqueue(1);
  82. queue.Enqueue(5);
  83. queue.Enqueue(2);
  84. Assert.Equal(1, queue.Dequeue());
  85. Assert.Equal(2, queue.Dequeue());
  86. Assert.Equal(2, queue.Dequeue());
  87. Assert.Equal(5, queue.Dequeue());
  88. }
  89. }
  90. }