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