1 #include <stdlib.h>
2 #include <omp.h>
3 
4 int
main(void)5 main (void)
6 {
7   double d, e;
8   int l;
9   omp_lock_t lck;
10   omp_nest_lock_t nlck;
11 
12   d = omp_get_wtime ();
13 
14   omp_init_lock (&lck);
15   omp_set_lock (&lck);
16   if (omp_test_lock (&lck))
17     abort ();
18   omp_unset_lock (&lck);
19   if (! omp_test_lock (&lck))
20     abort ();
21   if (omp_test_lock (&lck))
22     abort ();
23   omp_unset_lock (&lck);
24   omp_destroy_lock (&lck);
25 
26   omp_init_nest_lock (&nlck);
27   if (omp_test_nest_lock (&nlck) != 1)
28     abort ();
29   omp_set_nest_lock (&nlck);
30   if (omp_test_nest_lock (&nlck) != 3)
31     abort ();
32   omp_unset_nest_lock (&nlck);
33   omp_unset_nest_lock (&nlck);
34   if (omp_test_nest_lock (&nlck) != 2)
35     abort ();
36   omp_unset_nest_lock (&nlck);
37   omp_unset_nest_lock (&nlck);
38   omp_destroy_nest_lock (&nlck);
39 
40   omp_set_dynamic (1);
41   if (! omp_get_dynamic ())
42     abort ();
43   omp_set_dynamic (0);
44   if (omp_get_dynamic ())
45     abort ();
46 
47   omp_set_nested (1);
48   if (! omp_get_nested ())
49     abort ();
50   omp_set_nested (0);
51   if (omp_get_nested ())
52     abort ();
53 
54   omp_set_num_threads (5);
55   if (omp_get_num_threads () != 1)
56     abort ();
57   if (omp_get_max_threads () != 5)
58     abort ();
59   if (omp_get_thread_num () != 0)
60     abort ();
61   omp_set_num_threads (3);
62   if (omp_get_num_threads () != 1)
63     abort ();
64   if (omp_get_max_threads () != 3)
65     abort ();
66   if (omp_get_thread_num () != 0)
67     abort ();
68   l = 0;
69 #pragma omp parallel reduction (|:l)
70   {
71     l = omp_get_num_threads () != 3;
72     l |= omp_get_thread_num () < 0;
73     l |= omp_get_thread_num () >= 3;
74 #pragma omp master
75     l |= omp_get_thread_num () != 0;
76   }
77   if (l)
78     abort ();
79 
80   if (omp_get_num_procs () <= 0)
81     abort ();
82   if (omp_in_parallel ())
83     abort ();
84 #pragma omp parallel reduction (|:l)
85   l = ! omp_in_parallel ();
86 #pragma omp parallel reduction (|:l) if (1)
87   l = ! omp_in_parallel ();
88   if (l)
89     abort ();
90 
91   e = omp_get_wtime ();
92   if (d > e)
93     abort ();
94   d = omp_get_wtick ();
95   /* Negative precision is definitely wrong,
96      bigger than 1s clock resolution is also strange.  */
97   if (d <= 0 || d > 1)
98     abort ();
99 
100   return 0;
101 }
102