Dead
[official-gcc.git] / gomp-20050608-branch / libgomp / testsuite / libgomp.c / ordered-1.c
blob23ec12547b9bb71036b7aab8eea3e55d0e928d48
1 /* Test that all loop iterations are touched. This doesn't verify
2 scheduling order, merely coverage. */
3 /* Note that we never call GOMP_ordered_start in here. AFAICS, this is
4 valid; the only requirement is "not more than once per iteration". */
6 #include <omp.h>
7 #include <string.h>
8 #include <assert.h>
9 #include "libgomp_g.h"
12 #define N 1000
13 static int S, E, INCR, CHUNK, NTHR;
14 static int data[N];
16 static void clean_data (void)
18 memset (data, -1, sizeof (data));
21 static void test_data (void)
23 int i, j;
25 for (i = 0; i < S; ++i)
26 assert (data[i] == -1);
28 for (j = 0; i < E; ++i, j = (j + 1) % INCR)
29 if (j == 0)
30 assert (data[i] != -1);
31 else
32 assert (data[i] == -1);
34 for (; i < N; ++i)
35 assert (data[i] == -1);
38 static void set_data (long i, int val)
40 int old;
41 assert (i >= 0 && i < N);
42 old = __sync_lock_test_and_set (data+i, val);
43 assert (old == -1);
47 #define TMPL_1(sched) \
48 static void f_##sched##_1 (void *dummy) \
49 { \
50 int iam = omp_get_thread_num (); \
51 long s0, e0, i; \
52 if (GOMP_loop_ordered_##sched##_start (S, E, INCR, CHUNK, &s0, &e0)) \
53 do \
54 { \
55 for (i = s0; i < e0; i += INCR) \
56 set_data (i, iam); \
57 } \
58 while (GOMP_loop_ordered_##sched##_next (&s0, &e0)); \
59 GOMP_loop_end (); \
60 } \
61 static void t_##sched##_1 (void) \
62 { \
63 clean_data (); \
64 GOMP_parallel_start (f_##sched##_1, NULL, NTHR); \
65 f_##sched##_1 (NULL); \
66 GOMP_parallel_end (); \
67 test_data (); \
70 TMPL_1(static)
71 TMPL_1(dynamic)
72 TMPL_1(guided)
74 static void test (void)
76 t_static_1 ();
77 t_dynamic_1 ();
78 t_guided_1 ();
81 int main()
83 omp_set_dynamic (0);
85 NTHR = 4;
87 S = 0, E = N, INCR = 1, CHUNK = 4;
88 test ();
90 S = 0, E = N, INCR = 2, CHUNK = 4;
91 test ();
93 S = 1, E = N-1, INCR = 1, CHUNK = 5;
94 test ();
96 S = 1, E = N-1, INCR = 2, CHUNK = 5;
97 test ();
99 S = 2, E = 4, INCR = 1, CHUNK = 1;
100 test ();
102 S = 0, E = N, INCR = 1, CHUNK = 0;
103 t_static_1 ();
105 S = 1, E = N-1, INCR = 1, CHUNK = 0;
106 t_static_1 ();
108 NTHR = 10;
109 S = 1, E = 9, INCR = 1, CHUNK = 0;
110 t_static_1 ();
112 return 0;