utcqueue.pp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. unit utcQueue;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, contnrs, punit;
  6. procedure RegisterTests;
  7. implementation
  8. Function TQueue_TestCreate : TTestString;
  9. var
  10. Q: TQueue;
  11. begin
  12. Result:='';
  13. Q := TQueue.Create;
  14. try
  15. AssertNotNull('Queue should be created', Q);
  16. AssertEquals('Count should be 0 on creation', 0, Q.Count);
  17. finally
  18. Q.Free;
  19. end;
  20. end;
  21. Function TQueue_TestPush : TTestString;
  22. var
  23. Q: TQueue;
  24. P1, P2, Res: Pointer;
  25. begin
  26. Result:='';
  27. Q := TQueue.Create;
  28. try
  29. P1 := Pointer(1);
  30. P2 := Pointer(2);
  31. Res := Q.Push(P1);
  32. AssertEquals('Push should return the pushed item', P1, Res);
  33. AssertEquals('Count should be 1', 1, Q.Count);
  34. AssertEquals('Peek should return the pushed item', P1, Q.Peek);
  35. Res := Q.Push(P2);
  36. AssertEquals('Push should return the pushed item', P2, Res);
  37. AssertEquals('Count should be 2', 2, Q.Count);
  38. AssertEquals('Peek should return the first pushed item', P1, Q.Peek);
  39. finally
  40. Q.Free;
  41. end;
  42. end;
  43. Function TQueue_TestPop : TTestString;
  44. var
  45. Q: TQueue;
  46. P1, P2, Res: Pointer;
  47. begin
  48. Result:='';
  49. Q := TQueue.Create;
  50. try
  51. P1 := Pointer(1);
  52. P2 := Pointer(2);
  53. Q.Push(P1);
  54. Q.Push(P2);
  55. Res := Q.Pop;
  56. AssertEquals('Pop should return the first pushed item (FIFO)', P1, Res);
  57. AssertEquals('Count should be 1', 1, Q.Count);
  58. Res := Q.Pop;
  59. AssertEquals('Pop should return the second pushed item', P2, Res);
  60. AssertEquals('Count should be 0', 0, Q.Count);
  61. Res := Q.Pop;
  62. AssertEquals('Pop on an empty queue should return nil', nil, Res);
  63. finally
  64. Q.Free;
  65. end;
  66. end;
  67. Function TQueue_TestPeek : TTestString;
  68. var
  69. Q: TQueue;
  70. P1, P2: Pointer;
  71. begin
  72. Result:='';
  73. Q := TQueue.Create;
  74. try
  75. P1 := Pointer(1);
  76. P2 := Pointer(2);
  77. Q.Push(P1);
  78. AssertEquals('Peek should return the pushed item', P1, Q.Peek);
  79. AssertEquals('Count should still be 1 after Peek', 1, Q.Count);
  80. Q.Push(P2);
  81. AssertEquals('Peek should return the first pushed item', P1, Q.Peek);
  82. AssertEquals('Count should still be 2 after Peek', 2, Q.Count);
  83. Q.Pop;
  84. AssertEquals('Peek should return the remaining item', P2, Q.Peek);
  85. Q.Pop;
  86. AssertEquals('Peek on an empty queue should return nil', nil, Q.Peek);
  87. finally
  88. Q.Free;
  89. end;
  90. end;
  91. procedure RegisterTests;
  92. begin
  93. AddSuite('TQueueTests');
  94. AddTest('TestCreate', @TQueue_TestCreate, 'TQueueTests');
  95. AddTest('TestPush', @TQueue_TestPush, 'TQueueTests');
  96. AddTest('TestPop', @TQueue_TestPop, 'TQueueTests');
  97. AddTest('TestPeek', @TQueue_TestPeek, 'TQueueTests');
  98. end;
  99. end.