| 167 | } |
| 168 | |
| 169 | void ConsumerThread(InternalQueue<IntNode>* queue, int num_consumes, int delta, |
| 170 | vector<int>* results, bool* failed) { |
| 171 | // Dequeued nodes should be strictly increasing. |
| 172 | int previous_value = -1; |
| 173 | for (int i = 0; i < num_consumes && !*failed;) { |
| 174 | IntNode* node = queue->Dequeue(); |
| 175 | if (node == nullptr) continue; |
| 176 | ++i; |
| 177 | if (delta > 0) { |
| 178 | if (node->value != previous_value + delta) *failed = true; |
| 179 | } else if (delta == 0) { |
| 180 | if (node->value <= previous_value) *failed = true; |
| 181 | } |
| 182 | results->push_back(node->value); |
| 183 | previous_value = node->value; |
| 184 | if (i % VALIDATE_INTERVAL == 0) { |
| 185 | if (!queue->Validate()) *failed = true; |
| 186 | } |
| 187 | } |
| 188 | } |
| 189 | |
| 190 | TEST(InternalQueue, TestClear) { |
| 191 | vector<IntNode> nodes; |