const RETURN_VALUE NetworkQueueTS::pushBack(const queueData& netData) { RETURN_VALUE ret = RETURN_OK; EnterCriticalSection(&this->m_critSec); { doPushBack(netData); } LeaveCriticalSection(&this->m_critSec); return ret; }
void testRandom(size_t numSteps = 10000) { describePlatform(); auto target = folly::make_unique<T>(); std::vector<bool> valid; for (size_t step = 0; step < numSteps; ++step) { auto pct = folly::Random::rand32(100); auto v = folly::Random::rand32(uint32_t{3} << folly::Random::rand32(14)); if (pct < 5) { doClear(*target, valid); } else if (pct < 30) { T copy; folly::resizeWithoutInitialization(copy, target->size()); for (size_t i = 0; i < copy.size(); ++i) { if (valid[i]) { copy[i] = target->at(i); } } if (pct < 10) { std::swap(copy, *target); } else if (pct < 15) { *target = std::move(copy); } else if (pct < 20) { *target = copy; } else if (pct < 25) { target = folly::make_unique<T>(std::move(copy)); } else { target = folly::make_unique<T>(copy); } } else if (pct < 35) { target->reserve(v); } else if (pct < 40) { target->shrink_to_fit(); } else if (pct < 45) { doResize(*target, valid, v); } else if (pct < 50) { doInsert(*target, valid, v % (target->size() + 1)); } else if (pct < 55) { if (!target->empty()) { doErase(*target, valid, v % target->size()); } } else if (pct < 60) { doPushBack(*target, valid); } else if (pct < 65) { target = folly::make_unique<T>(); valid.clear(); } else if (pct < 80) { auto v2 = folly::Random::rand32(uint32_t{3} << folly::Random::rand32(14)); doOverwrite(*target, valid, std::min(v, v2), std::max(v, v2)); } else { doResizeWithoutInit(*target, valid, v); } // don't check every time in implementation does lazy work if (folly::Random::rand32(100) < 50) { check(*target); } } }
const RETURN_VALUE NetworkQueue::pushBack(const queueData& netData) { doPushBack(netData); return RETURN_OK; }