blob: d2e28aad1a8844148d0a56b41c3b44934b1ecdeb [file] [log] [blame]
Jonathan Peyton614c7ef2015-09-21 20:41:31 +00001// RUN: %libomp-compile-and-run
2#include <stdio.h>
3#include <math.h>
4#include "omp_testsuite.h"
5#include "omp_my_sleep.h"
6
7int test_omp_task()
8{
9 int tids[NUM_TASKS];
10 int i;
11
12 #pragma omp parallel
13 {
14 #pragma omp single
15 {
16 for (i = 0; i < NUM_TASKS; i++) {
17 /* First we have to store the value of the loop index in a new variable
18 * which will be private for each task because otherwise it will be overwritten
19 * if the execution of the task takes longer than the time which is needed to
20 * enter the next step of the loop!
21 */
22 int myi;
23 myi = i;
24 #pragma omp task
25 {
26 my_sleep (SLEEPTIME);
27 tids[myi] = omp_get_thread_num();
28 } /* end of omp task */
29 } /* end of for */
30 } /* end of single */
31 } /*end of parallel */
32
33 /* Now we ckeck if more than one thread executed the tasks. */
34 for (i = 1; i < NUM_TASKS; i++) {
35 if (tids[0] != tids[i])
36 return 1;
37 }
38 return 0;
39} /* end of check_parallel_for_private */
40
41int main()
42{
43 int i;
44 int num_failed=0;
45
46 for(i = 0; i < REPETITIONS; i++) {
47 if(!test_omp_task()) {
48 num_failed++;
49 }
50 }
51 return num_failed;
52}