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