MCPcopy Create free account
hub / github.com/apache/brpc / TEST

Function TEST

test/bthread_work_stealing_queue_unittest.cpp:87–132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

85
86
87TEST(WSQTest, sanity) {
88 bthread::WorkStealingQueue<value_type> q;
89 ASSERT_EQ(0, q.init(CAP));
90 pthread_t rth[8];
91 pthread_t wth, pop_th;
92 for (size_t i = 0; i < ARRAY_SIZE(rth); ++i) {
93 ASSERT_EQ(0, pthread_create(&rth[i], NULL, steal_thread, &q));
94 }
95 ASSERT_EQ(0, pthread_create(&wth, NULL, push_thread, &q));
96 ASSERT_EQ(0, pthread_create(&pop_th, NULL, pop_thread, &q));
97
98 std::vector<value_type> values;
99 values.reserve(N);
100 size_t nstolen = 0, npopped = 0;
101 for (size_t i = 0; i < ARRAY_SIZE(rth); ++i) {
102 std::vector<value_type>* res = NULL;
103 pthread_join(rth[i], (void**)&res);
104 for (size_t j = 0; j < res->size(); ++j, ++nstolen) {
105 values.push_back((*res)[j]);
106 }
107 delete res;
108 }
109 pthread_join(wth, NULL);
110 std::vector<value_type>* res = NULL;
111 pthread_join(pop_th, (void**)&res);
112 for (size_t j = 0; j < res->size(); ++j, ++npopped) {
113 values.push_back((*res)[j]);
114 }
115 delete res;
116
117 value_type val;
118 while (q.pop(&val)) {
119 values.push_back(val);
120 }
121
122 std::sort(values.begin(), values.end());
123 values.resize(std::unique(values.begin(), values.end()) - values.begin());
124
125 ASSERT_EQ(N, values.size());
126 for (size_t i = 0; i < N; ++i) {
127 ASSERT_EQ(i, values[i]);
128 }
129 std::cout << "stolen=" << nstolen
130 << " popped=" << npopped
131 << " left=" << (N - nstolen - npopped) << std::endl;
132}
133} // namespace

Callers

nothing calls this directly

Calls 8

initMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
popMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected