1 // RUN: %libomp-cxx-compile-and-run
2 
3 #include <omp.h>
4 
5 #include <algorithm>
6 #include <cassert>
7 #include <limits>
8 #include <vector>
9 
main(int argc,char * argv[])10 int main(int argc, char *argv[]) {
11   const int N = std::min(std::max(std::max(32, 4 * omp_get_max_threads()),
12                                   4 * omp_get_num_procs()),
13                          std::numeric_limits<int>::max());
14 
15   std::vector<int> data(N);
16 
17 #pragma omp parallel for num_threads(N)
18   for (unsigned i = 0; i < N; ++i) {
19     data[i] = i;
20   }
21 
22 #pragma omp parallel for num_threads(N + 1)
23   for (unsigned i = 0; i < N; ++i) {
24     data[i] += i;
25   }
26 
27   for (unsigned i = 0; i < N; ++i) {
28     assert(data[i] == 2 * i);
29   }
30 
31   return 0;
32 }
33