ring_buffer_ut.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include <library/cpp/testing/unittest/registar.h>
  2. #include "ring_buffer.h"
  3. #include <util/random/random.h>
  4. Y_UNIT_TEST_SUITE(RingBuffer) {
  5. struct TRingBufferTester {
  6. TRingBuffer<unsigned> RingBuffer;
  7. unsigned NextPush;
  8. unsigned NextPop;
  9. TRingBufferTester()
  10. : NextPush()
  11. , NextPop()
  12. {
  13. }
  14. void Push() {
  15. //Cerr << "push " << NextPush << "\n";
  16. RingBuffer.Push(NextPush);
  17. NextPush += 1;
  18. }
  19. void Pop() {
  20. //Cerr << "pop " << NextPop << "\n";
  21. unsigned popped = RingBuffer.Pop();
  22. UNIT_ASSERT_VALUES_EQUAL(NextPop, popped);
  23. NextPop += 1;
  24. }
  25. bool Empty() const {
  26. UNIT_ASSERT_VALUES_EQUAL(RingBuffer.Size(), NextPush - NextPop);
  27. UNIT_ASSERT_VALUES_EQUAL(RingBuffer.Empty(), RingBuffer.Size() == 0);
  28. return RingBuffer.Empty();
  29. }
  30. };
  31. void Iter() {
  32. TRingBufferTester rb;
  33. while (rb.NextPush < 1000) {
  34. rb.Push();
  35. while (!rb.Empty() && RandomNumber<bool>()) {
  36. rb.Pop();
  37. }
  38. }
  39. while (!rb.Empty()) {
  40. rb.Pop();
  41. }
  42. }
  43. Y_UNIT_TEST(Random) {
  44. for (unsigned i = 0; i < 100; ++i) {
  45. Iter();
  46. }
  47. }
  48. }