36 std::unique_lock<std::mutex> lock(global_test_mutex_);
39 auto operation = [](std::vector<int>& chunk) {
40 for (
int& val : chunk) {
49 EXPECT_EQ(chunks[0], (std::vector<int>{2, 4, 6}));
50 EXPECT_EQ(chunks[1], (std::vector<int>{8, 10, 12}));
51 EXPECT_EQ(chunks[2], (std::vector<int>{14, 16, 18}));
82 std::vector<std::vector<int>> chunked_data = {test_data};
84 for (
int& x : chunk) {
88 EXPECT_EQ(chunked_data[0].size(), test_data.size());
89 for (
size_t i = 0; i < test_data.size(); ++i) {
90 EXPECT_EQ(chunked_data[0][i], test_data[i] * 2);
139 auto double_it = [](
const int& x) {
return x * 2; };
140 auto multiply = [](
const int& a,
const int& b) {
return a * b; };
146 std::vector<int> flattened;
147 for (
const auto& chunk : doubled) {
148 flattened.insert(flattened.end(), chunk.begin(), chunk.end());
152 int result = std::accumulate(flattened.begin(), flattened.end(), 1, multiply);
156 for (
const auto& chunk : chunks) {
157 for (
int x : chunk) {
161 EXPECT_EQ(result, expected);
165 std::vector<std::vector<int>> data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
167 std::atomic<int> counter{0};
169 for (
int& x : chunk) {
175 EXPECT_EQ(counter, 9);
176 for (
size_t i = 0; i < data.size(); i++) {
177 for (
size_t j = 0; j < data[i].size(); j++) {
178 EXPECT_EQ(data[i][j], (i * 3 + j + 1) * 2);
184 std::vector<std::vector<int>> data = {{1}, {2}, {3}, {4}, {5}};
185 int exception_threshold = 2;
190 data, [exception_threshold](std::vector<int>& chunk) {
191 if (chunk[0] > exception_threshold) {
192 throw std::runtime_error(
"Value too large");
194 std::cout <<
"chunk[0] before increment: " << chunk[0] << std::endl;
201 bool found_modified =
false;
202 bool found_unmodified =
false;
203 for (
const auto& chunk : data) {
204 if (chunk[0] <= exception_threshold * 2 && chunk[0] % 2 == 0) {
205 found_modified =
true;
207 if (chunk[0] > exception_threshold && chunk[0] == chunk[0] / 2 * 2) {
208 found_unmodified =
true;
211 EXPECT_TRUE(found_modified || found_unmodified);