MCPcopy Create free account
hub / github.com/cameron314/concurrentqueue / run_test

Function run_test

tests/fuzztests/fuzztests.cpp:107–630  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

105
106
107bool run_test(uint64_t seed, int iterations, test_type& out_type, const char*& out_failReason)
108{
109 bool result = true;
110 RNG_t baseRng((unsigned int)seed);
111
112 std::uniform_int_distribution<int> randTest(0, TEST_TYPE_COUNT - 1);
113 std::uniform_int_distribution<int> randInitialSize(0, 70);
114
115 auto type = static_cast<test_type>(randTest(baseRng));
116 out_type = type;
117 for (int iteration = 0; iteration != iterations; ++iteration) {
118 RNG_t rng(baseRng);
119
120 std::atomic<bool> failed(false);
121 std::atomic<const char*> failReason;
122 failReason = nullptr;
123 SystemTime startTime = getSystemTime();
124
125 switch (type) {
126 case multithread_produce:
127 {
128 const int countIncrement = std::uniform_int_distribution<int>(1, 1000)(rng);
129 int count = std::uniform_int_distribution<int>(0, 500)(rng) * countIncrement;
130 int prodCount = std::uniform_int_distribution<int>(0, 6)(rng);
131 bool useConsumerToken = static_cast<bool>(std::uniform_int_distribution<int>(0, 1)(rng));
132
133 ConcurrentQueue<int, FuzzTraits> q(randInitialSize(rng));
134
135 std::vector<SimpleThread> producers(prodCount);
136 std::vector<bool> useProducerToken(prodCount);
137 for (int i = 0; i != prodCount; ++i) {
138 useProducerToken[i] = static_cast<bool>(std::uniform_int_distribution<int>(0, 1)(rng));
139 producers[i] = SimpleThread([&](int i) {
140 ProducerToken t(q);
141 for (int j = 0; j != count && !failed.load(std::memory_order_relaxed); j += countIncrement) {
142 if (useProducerToken[i]) {
143 for (int k = 0; k != countIncrement; ++k) {
144 ASSERT_OR_FAIL_THREAD(q.enqueue(t, (i << 24) | (k + j)));
145 }
146 }
147 else {
148 for (int k = 0; k != countIncrement; ++k) {
149 ASSERT_OR_FAIL_THREAD(q.enqueue((i << 24) | (k + j)));
150 }
151 }
152 FAIL_IF_THREAD_TIMEOUT();
153 }
154 }, i);
155 }
156
157 SimpleThread consumer([&]() {
158 int item;
159 std::vector<int> lastItems(prodCount);
160 ConsumerToken t(q);
161
162 for (int i = 0; i != prodCount; ++i) {
163 lastItems[i] = -1;
164 }

Callers 1

mainFunction · 0.70

Calls 15

getSystemTimeFunction · 0.85
SimpleThreadClass · 0.85
minFunction · 0.85
assertClass · 0.85
tailMethod · 0.80
get_or_createMethod · 0.80
loadMethod · 0.45
enqueueMethod · 0.45
try_dequeueMethod · 0.45
joinMethod · 0.45
storeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected