Dead
[official-gcc.git] / gomp-20050608-branch / libgomp / testsuite / libgomp.c / sections-1.c
blob6785941be6cfbfe154a374b0f87d499897bf0e99
1 /* Test that all sections are touched. */
3 #include <omp.h>
4 #include <string.h>
5 #include <assert.h>
6 #include "libgomp_g.h"
9 #define N 100
10 static int data[N];
11 static int NTHR;
13 static void clean_data (void)
15 memset (data, -1, sizeof (data));
18 static void test_data (void)
20 int i;
22 for (i = 0; i < N; ++i)
23 assert (data[i] != -1);
26 static void set_data (unsigned i, int val)
28 int old;
29 assert (i >= 1 && i <= N);
30 old = __sync_lock_test_and_set (data+i-1, val);
31 assert (old == -1);
35 static void f_1 (void *dummy)
37 int iam = omp_get_thread_num ();
38 unsigned long s;
40 for (s = GOMP_sections_start (N); s ; s = GOMP_sections_next ())
41 set_data (s, iam);
42 GOMP_sections_end ();
45 static void test_1 (void)
47 clean_data ();
48 GOMP_parallel_start (f_1, NULL, NTHR);
49 f_1 (NULL);
50 GOMP_parallel_end ();
51 test_data ();
54 static void f_2 (void *dummy)
56 int iam = omp_get_thread_num ();
57 unsigned s;
59 while ((s = GOMP_sections_next ()))
60 set_data (s, iam);
61 GOMP_sections_end_nowait ();
64 static void test_2 (void)
66 clean_data ();
67 GOMP_parallel_sections_start (f_2, NULL, NTHR, N);
68 f_2 (NULL);
69 GOMP_parallel_end ();
70 test_data ();
73 int main()
75 omp_set_dynamic (0);
77 NTHR = 4;
79 test_1 ();
80 test_2 ();
82 return 0;