1 /* Test that all loop iterations are touched. This doesn't verify
2 scheduling order, merely coverage. */
11 static int S
, E
, INCR
, CHUNK
, NTHR
;
14 static void clean_data (void)
16 memset (data
, -1, sizeof (data
));
19 static void test_data (void)
23 for (i
= 0; i
< S
; ++i
)
24 assert (data
[i
] == -1);
26 for (j
= 0; i
< E
; ++i
, j
= (j
+ 1) % INCR
)
28 assert (data
[i
] != -1);
30 assert (data
[i
] == -1);
33 assert (data
[i
] == -1);
36 static void set_data (long i
, int val
)
39 assert (i
>= 0 && i
< N
);
40 old
= __sync_lock_test_and_set (data
+i
, val
);
45 #define TMPL_1(sched) \
46 static void f_##sched##_1 (void *dummy) \
48 int iam = omp_get_thread_num (); \
50 if (GOMP_loop_##sched##_start (S, E, INCR, CHUNK, &s0, &e0)) \
53 for (i = s0; i < e0; i += INCR) \
56 while (GOMP_loop_##sched##_next (&s0, &e0)); \
59 static void t_##sched##_1 (void) \
62 GOMP_parallel_start (f_##sched##_1, NULL, NTHR); \
63 f_##sched##_1 (NULL); \
64 GOMP_parallel_end (); \
72 #define TMPL_2(sched) \
73 static void f_##sched##_2 (void *dummy) \
75 int iam = omp_get_thread_num (); \
77 while (GOMP_loop_##sched##_next (&s0, &e0)) \
79 for (i = s0; i < e0; i += INCR) \
82 GOMP_loop_end_nowait (); \
84 static void t_##sched##_2 (void) \
87 GOMP_parallel_loop_##sched##_start \
88 (f_##sched##_2, NULL, NTHR, S, E, INCR, CHUNK); \
89 f_##sched##_2 (NULL); \
90 GOMP_parallel_end (); \
98 static void test (void)
114 S
= 0, E
= N
, INCR
= 1, CHUNK
= 4;
117 S
= 0, E
= N
, INCR
= 2, CHUNK
= 4;
120 S
= 1, E
= N
-1, INCR
= 1, CHUNK
= 5;
123 S
= 1, E
= N
-1, INCR
= 2, CHUNK
= 5;
126 S
= 2, E
= 4, INCR
= 1, CHUNK
= 1;
129 S
= 0, E
= N
, INCR
= 1, CHUNK
= 0;
133 S
= 1, E
= N
-1, INCR
= 1, CHUNK
= 0;