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;