Loading...
Searching...
No Matches
batch_queue_test.cpp
Go to the documentation of this file.
1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
21
22#include <glog/logging.h>
23#include <gmock/gmock.h>
24#include <gtest/gtest.h>
25
26#include <thread>
27
29
30namespace resdb {
31namespace {
32
33struct TestItem {
34 std::string data;
35};
36
37TEST(BatchQueueTest, NoBatch) {
38 BatchQueue<std::unique_ptr<TestItem>> queue("test", 100);
39 auto item = std::make_unique<TestItem>();
40 item->data = "test";
41 queue.Push(std::move(item));
42
43 auto out = queue.Pop(100);
44 EXPECT_EQ(out.size(), 1);
45 EXPECT_EQ(out[0]->data, "test");
46}
47
48TEST(BatchQueueTest, Batch) {
49 int tot = 100;
50 BatchQueue<std::unique_ptr<TestItem>> queue("test", 100);
51 auto th = std::thread([&]() {
52 int count = 0;
53 while (count != tot) {
54 auto out = queue.Pop(100);
55 count += out.size();
56 }
57 });
58
59 for (int i = 0; i < tot; ++i) {
60 auto item = std::make_unique<TestItem>();
61 item->data = "test";
62 queue.Push(std::move(item));
63 }
64 th.join();
65}
66
67TEST(BatchQueueTest, BatchPerformance) {
68 int tot = 5000000;
69 BatchQueue<std::unique_ptr<TestItem>> queue("test", 100);
70 auto th = std::thread([&]() {
71 auto start_time = std::chrono::system_clock::now();
72 int count = 0;
73 int num = 0;
74 while (count != tot) {
75 auto out = queue.Pop(100);
76 count += out.size();
77 num++;
78 }
79 auto current_time = std::chrono::system_clock::now();
80 std::chrono::duration<double> diff = (current_time - start_time);
81 printf("pop time: %lf num = %d\n", diff.count(), num);
82 });
83 auto start_time = std::chrono::system_clock::now();
84 for (int i = 0; i < tot; ++i) {
85 auto item = std::make_unique<TestItem>();
86 item->data = "test";
87 queue.Push(std::move(item));
88 }
89 auto current_time = std::chrono::system_clock::now();
90 std::chrono::duration<double> diff = (current_time - start_time);
91 printf("push time: %lf\n", diff.count());
92 printf("queue size %zu\n", queue.Size());
93 th.join();
94}
95
96} // namespace
97
98} // namespace resdb
std::string data
TEST(NetworkUtilsTest, GetDNSName)