22 #include <glog/logging.h> 79 constexpr
size_t numThreadsPerStage = 6;
82 std::vector<std::thread>
threads;
83 threads.reserve(numThreadsPerStage * 2 + 1);
84 for (
size_t i = 0;
i < numThreadsPerStage; ++
i) {
85 threads.emplace_back([&a] {
99 for (
size_t i = 0;
i < numThreadsPerStage; ++
i) {
100 threads.emplace_back([&a] {
114 std::vector<std::string> results;
115 threads.emplace_back([&a, &results]() {
122 results.push_back(val);
126 constexpr
size_t numValues = 1000;
127 for (
size_t i = 0;
i < numValues; ++
i) {
130 for (
size_t i = 0;
i < numThreadsPerStage; ++
i) {
134 for (
auto&
t : threads) {
141 for (
size_t i = 0;
i < numThreadsPerStage - 1; ++
i) {
153 for (
size_t i = 0;
i < results.size(); ++
i) {
154 EXPECT_EQ(folly::to<std::string>(
i,
" hello world"), results[
i]);
163 gflags::ParseCommandLineFlags(&argc, &argv,
true);
ssize_t sizeGuess() const noexcept
void blockingWrite(Args &&...args)
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
#define EXPECT_EQ(val1, val2)
—— Concurrent Priority Queue Implementation ——
void blockingRead(typename std::tuple_element< sizeof...(Stages), StageTuple >::type::value_type &elem)
static constexpr StringPiece ticket
std::vector< std::thread::id > threads
TEST(ProgramOptionsTest, Errors)
#define EXPECT_TRUE(condition)
bool read(typename std::tuple_element< sizeof...(Stages), StageTuple >::type::value_type &elem)
Ticket< Stage > blockingReadStage(typename std::tuple_element< Stage, StageTuple >::type::value_type &elem)
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
#define EXPECT_FALSE(condition)
void blockingWriteStage(Ticket< Stage > &ticket, Args &&...args)
int main(int argc, char *argv[])