3 #include "quickpool.hpp"
10 std::cout <<
"- Running contents from README: ";
23 auto result = f.get();
29 auto work = [](
const std::string& title,
int i) {
47 std::vector<double> x(2);
51 auto job_prod = [&](
int i,
double val) {
55 auto job_cons = [&](
int i) {
67 std::cout <<
"OK" << std::endl;
71 std::cout <<
"- unit tests: \t\r";
73 for (
auto run = 0; run < runs; run++) {
74 std::cout <<
"- unit tests: run " << run + 1 <<
"/" << runs <<
"\t\r"
80 std::vector<size_t> x(10000, 1);
82 for (
size_t i = 0; i < x.size(); i++)
86 size_t count_wrong = 0;
87 for (
size_t i = 0; i < x.size(); i++) {
88 if (count_wrong += (x[i] != 2))
91 if (count_wrong > 0) {
92 throw std::runtime_error(
"static push gives wrong result");
96 x = std::vector<size_t>(10000, 1);
97 for (
size_t i = 0; i < x.size(); i++)
98 pool.
push([&](
size_t i) ->
void { x[i] = 2 * x[i]; }, i);
102 for (
size_t i = 0; i < x.size(); i++)
103 count_wrong += (x[i] != 2);
105 throw std::runtime_error(
"push gives wrong result");
112 std::vector<size_t> x(10000, 1);
113 auto dummy = [&](
size_t i) {
return 2 * x[i]; };
115 std::vector<std::future<size_t>> fut(x.size());
116 for (
size_t i = 0; i < x.size(); i++)
118 for (
size_t i = 0; i < x.size(); i++)
122 size_t count_wrong = 0;
123 for (
size_t i = 0; i < x.size(); i++)
124 count_wrong += (x[i] != 2);
126 throw std::runtime_error(
"static async gives wrong result");
129 x = std::vector<size_t>(10000, 1);
130 std::vector<std::future<size_t>> fut2(x.size());
131 for (
size_t i = 0; i < x.size(); i++)
132 fut2[i] = pool.
async(dummy, i);
133 for (
size_t i = 0; i < x.size(); i++)
134 x[i] = fut2[i].get();
138 for (
size_t i = 0; i < x.size(); i++)
139 count_wrong += (x[i] != 2);
141 throw std::runtime_error(
"async gives wrong result");
149 std::vector<size_t> x(1000, 1);
150 auto dummy = [&](
size_t i) ->
void { x[i] = 2 * x[i]; };
152 for (
size_t i = 0; i < x.size(); i++) {
157 size_t count_wrong = 0;
158 for (
size_t i = 0; i < x.size(); i++)
159 count_wrong += (x[i] != 2);
161 throw std::runtime_error(
"single threaded gives wrong result");
169 pool.
push([] {
throw std::runtime_error(
"test"); });
170 for (
size_t i = 0; i < 200; i++) {
172 std::this_thread::sleep_for(std::chrono::milliseconds(20));
178 }
catch (
const std::exception& e) {
179 if (e.what() == std::string(
"test")) {
182 throw std::runtime_error(
"exception not rethrown");
188 std::cout <<
"- unit tests: OK " << std::endl;