xref: /llvm-project/openmp/libompd/gdb-plugin/ompdAPITests.c (revision d2a6e165e8980ed35fb4e5c7d468bfdc797b28c3)
1*d2a6e165SVignesh Balasubramanian #include <Python.h>
2*d2a6e165SVignesh Balasubramanian #include <dlfcn.h>
3*d2a6e165SVignesh Balasubramanian #include <errno.h>
4*d2a6e165SVignesh Balasubramanian #include <omp-tools.h>
5*d2a6e165SVignesh Balasubramanian #include <pthread.h>
6*d2a6e165SVignesh Balasubramanian #include <stdio.h>
7*d2a6e165SVignesh Balasubramanian #include <stdlib.h>
8*d2a6e165SVignesh Balasubramanian #include <string.h>
9*d2a6e165SVignesh Balasubramanian 
10*d2a6e165SVignesh Balasubramanian extern void *ompd_library;
11*d2a6e165SVignesh Balasubramanian 
12*d2a6e165SVignesh Balasubramanian struct _ompd_aspace_cont {
13*d2a6e165SVignesh Balasubramanian   int id;
14*d2a6e165SVignesh Balasubramanian };
15*d2a6e165SVignesh Balasubramanian struct _ompd_thread_cont {
16*d2a6e165SVignesh Balasubramanian   int id;
17*d2a6e165SVignesh Balasubramanian };
18*d2a6e165SVignesh Balasubramanian ompd_address_space_context_t context = {42};
19*d2a6e165SVignesh Balasubramanian ompd_address_space_context_t invalidcontext = {99};
20*d2a6e165SVignesh Balasubramanian 
21*d2a6e165SVignesh Balasubramanian // call back functions for ompd_initialize
22*d2a6e165SVignesh Balasubramanian ompd_rc_t _alloc(ompd_size_t bytes, void **ptr);
23*d2a6e165SVignesh Balasubramanian ompd_rc_t _free(void *ptr);
24*d2a6e165SVignesh Balasubramanian ompd_rc_t _sizes(ompd_address_space_context_t *_acontext,
25*d2a6e165SVignesh Balasubramanian                  ompd_device_type_sizes_t *sizes);
26*d2a6e165SVignesh Balasubramanian ompd_rc_t _sym_addr(ompd_address_space_context_t *context,
27*d2a6e165SVignesh Balasubramanian                     ompd_thread_context_t *tcontext, const char *symbol_name,
28*d2a6e165SVignesh Balasubramanian                     ompd_address_t *symbol_addr, const char *file_name);
29*d2a6e165SVignesh Balasubramanian ompd_rc_t _read(ompd_address_space_context_t *context,
30*d2a6e165SVignesh Balasubramanian                 ompd_thread_context_t *tcontext, const ompd_address_t *addr,
31*d2a6e165SVignesh Balasubramanian                 ompd_size_t nbytes, void *buffer);
32*d2a6e165SVignesh Balasubramanian ompd_rc_t _read_string(ompd_address_space_context_t *context,
33*d2a6e165SVignesh Balasubramanian                        ompd_thread_context_t *tcontext,
34*d2a6e165SVignesh Balasubramanian                        const ompd_address_t *addr, ompd_size_t nbytes,
35*d2a6e165SVignesh Balasubramanian                        void *buffer);
36*d2a6e165SVignesh Balasubramanian ompd_rc_t _endianess(ompd_address_space_context_t *address_space_context,
37*d2a6e165SVignesh Balasubramanian                      const void *input, ompd_size_t unit_size,
38*d2a6e165SVignesh Balasubramanian                      ompd_size_t count, void *output);
39*d2a6e165SVignesh Balasubramanian ompd_rc_t _thread_context(ompd_address_space_context_t *context,
40*d2a6e165SVignesh Balasubramanian                           ompd_thread_id_t kind, ompd_size_t sizeof_thread_id,
41*d2a6e165SVignesh Balasubramanian                           const void *thread_id,
42*d2a6e165SVignesh Balasubramanian                           ompd_thread_context_t **thread_context);
43*d2a6e165SVignesh Balasubramanian ompd_rc_t _print(const char *str, int category);
44*d2a6e165SVignesh Balasubramanian 
45*d2a6e165SVignesh Balasubramanian /*
46*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_thread_handle
47*d2a6e165SVignesh Balasubramanian 
48*d2a6e165SVignesh Balasubramanian   ompdtestapi threadandparallel
49*d2a6e165SVignesh Balasubramanian 
50*d2a6e165SVignesh Balasubramanian   Program:
51*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
52*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
53*d2a6e165SVignesh Balasubramanian     3.    int main () {
54*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
55*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
56*d2a6e165SVignesh Balasubramanian     6.        {
57*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
58*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
59*d2a6e165SVignesh Balasubramanian     8.        }
60*d2a6e165SVignesh Balasubramanian     9.        return 0;
61*d2a6e165SVignesh Balasubramanian     10.   }
62*d2a6e165SVignesh Balasubramanian 
63*d2a6e165SVignesh Balasubramanian   GDB Commands:
64*d2a6e165SVignesh Balasubramanian     ompd init
65*d2a6e165SVignesh Balasubramanian     b 7
66*d2a6e165SVignesh Balasubramanian     c
67*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_thread_handle
68*d2a6e165SVignesh Balasubramanian 
69*d2a6e165SVignesh Balasubramanian   for ompd_rc_unavailable:
70*d2a6e165SVignesh Balasubramanian     ompd init
71*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_thread_handle
72*d2a6e165SVignesh Balasubramanian */
73*d2a6e165SVignesh Balasubramanian 
test_ompd_get_thread_handle(PyObject * self,PyObject * args)74*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_thread_handle(PyObject *self, PyObject *args) {
75*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_thread_handle\"...\n");
76*d2a6e165SVignesh Balasubramanian 
77*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
78*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
79*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
80*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
81*d2a6e165SVignesh Balasubramanian 
82*d2a6e165SVignesh Balasubramanian   PyObject *threadIdTup = PyTuple_GetItem(args, 1);
83*d2a6e165SVignesh Balasubramanian   uint64_t threadID = (uint64_t)PyLong_AsLong(threadIdTup);
84*d2a6e165SVignesh Balasubramanian 
85*d2a6e165SVignesh Balasubramanian   ompd_size_t sizeof_thread_id = sizeof(threadID);
86*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle;
87*d2a6e165SVignesh Balasubramanian 
88*d2a6e165SVignesh Balasubramanian   // should be successful
89*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
90*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_thread_handle(
91*d2a6e165SVignesh Balasubramanian       addr_handle, 1 /*lwp*/, sizeof_thread_id, &threadID, &thread_handle);
92*d2a6e165SVignesh Balasubramanian 
93*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_unavailable) {
94*d2a6e165SVignesh Balasubramanian     // ompd_rc_unavailable if the thread is not an OpenMP thread.
95*d2a6e165SVignesh Balasubramanian     printf("Success. ompd_rc_unavailable, OpenMP is disabled.\n");
96*d2a6e165SVignesh Balasubramanian     printf("This is not a Parallel Region, No more testing is possible.\n");
97*d2a6e165SVignesh Balasubramanian     return Py_None;
98*d2a6e165SVignesh Balasubramanian   } else if (rc != ompd_rc_ok)
99*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
100*d2a6e165SVignesh Balasubramanian   else
101*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
102*d2a6e165SVignesh Balasubramanian 
103*d2a6e165SVignesh Balasubramanian   // as in ompd-types.h, only 0-3 are valid for thread kind
104*d2a6e165SVignesh Balasubramanian   // ompd_rc_unsupported if thread kind is not supported.
105*d2a6e165SVignesh Balasubramanian   printf("Test: Unsupported thread kind.\n");
106*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_handle(addr_handle, 4, sizeof_thread_id, &threadID,
107*d2a6e165SVignesh Balasubramanian                               &thread_handle);
108*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_unsupported)
109*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
110*d2a6e165SVignesh Balasubramanian   else
111*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
112*d2a6e165SVignesh Balasubramanian 
113*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input: if a different value in sizeof_thread_id is expected for
114*d2a6e165SVignesh Balasubramanian   // a thread kind.
115*d2a6e165SVignesh Balasubramanian   // sizeof_thread_id is validated at thread_context which is call back function
116*d2a6e165SVignesh Balasubramanian   // "_thread_context" where we expect size to be sizeof(long int)
117*d2a6e165SVignesh Balasubramanian   printf("Test: Wrong value for sizeof threadID.\n");
118*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_handle(addr_handle, 1 /*lwp*/, sizeof_thread_id - 1,
119*d2a6e165SVignesh Balasubramanian                               &threadID, &thread_handle);
120*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
121*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
122*d2a6e165SVignesh Balasubramanian   else
123*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
124*d2a6e165SVignesh Balasubramanian 
125*d2a6e165SVignesh Balasubramanian   // Random checks with null and invalid args.
126*d2a6e165SVignesh Balasubramanian   /*
127*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
128*d2a6e165SVignesh Balasubramanian      longer valid;
129*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
130*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
131*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
132*d2a6e165SVignesh Balasubramanian   */
133*d2a6e165SVignesh Balasubramanian 
134*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL thread_handle.\n");
135*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_handle(addr_handle, 1 /*lwp*/, sizeof_thread_id,
136*d2a6e165SVignesh Balasubramanian                               &threadID, NULL);
137*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
138*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
139*d2a6e165SVignesh Balasubramanian   else
140*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
141*d2a6e165SVignesh Balasubramanian 
142*d2a6e165SVignesh Balasubramanian   printf(
143*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale_handle for NULL addr_handle.\n");
144*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_handle(NULL, 1 /*lwp*/, sizeof_thread_id, &threadID,
145*d2a6e165SVignesh Balasubramanian                               &thread_handle);
146*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
147*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
148*d2a6e165SVignesh Balasubramanian   else
149*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
150*d2a6e165SVignesh Balasubramanian 
151*d2a6e165SVignesh Balasubramanian   return Py_None;
152*d2a6e165SVignesh Balasubramanian }
153*d2a6e165SVignesh Balasubramanian 
154*d2a6e165SVignesh Balasubramanian /*
155*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_curr_parallel_handle.
156*d2a6e165SVignesh Balasubramanian 
157*d2a6e165SVignesh Balasubramanian   Program:
158*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
159*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
160*d2a6e165SVignesh Balasubramanian     3.    int main () {
161*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
162*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
163*d2a6e165SVignesh Balasubramanian     6.        {
164*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
165*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
166*d2a6e165SVignesh Balasubramanian     8.        }
167*d2a6e165SVignesh Balasubramanian     9.        return 0;
168*d2a6e165SVignesh Balasubramanian     10.   }
169*d2a6e165SVignesh Balasubramanian 
170*d2a6e165SVignesh Balasubramanian   GDB Commands:
171*d2a6e165SVignesh Balasubramanian     ompd init
172*d2a6e165SVignesh Balasubramanian     b 7
173*d2a6e165SVignesh Balasubramanian     omptestapi ompd_get_curr_parallel_handle
174*d2a6e165SVignesh Balasubramanian 
175*d2a6e165SVignesh Balasubramanian     for ompd_rc_unavailable
176*d2a6e165SVignesh Balasubramanian     ompd init
177*d2a6e165SVignesh Balasubramanian     omptestapi ompd_get_curr_parallel_handle (or break at line 4
178*d2a6e165SVignesh Balasubramanian     before this)
179*d2a6e165SVignesh Balasubramanian */
180*d2a6e165SVignesh Balasubramanian 
test_ompd_get_curr_parallel_handle(PyObject * self,PyObject * args)181*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_curr_parallel_handle(PyObject *self, PyObject *args) {
182*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_curr_parallel_handle\"...\n");
183*d2a6e165SVignesh Balasubramanian 
184*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy = PyTuple_GetItem(args, 0);
185*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle =
186*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy,
187*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
188*d2a6e165SVignesh Balasubramanian 
189*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle;
190*d2a6e165SVignesh Balasubramanian 
191*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
192*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_curr_parallel_handle(thread_handle, &parallel_handle);
193*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_unavailable) {
194*d2a6e165SVignesh Balasubramanian     // ompd_rc_unavailable if the thread is not currently part of a team
195*d2a6e165SVignesh Balasubramanian 
196*d2a6e165SVignesh Balasubramanian     // ToCheck: Even in non parallel region, error code is stale_handle
197*d2a6e165SVignesh Balasubramanian     // Need to find a test case for ompd_rc_unavailable ?????
198*d2a6e165SVignesh Balasubramanian     printf("Success. ompd_rc_unavailable, Not in parallel region\n");
199*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
200*d2a6e165SVignesh Balasubramanian     return Py_None;
201*d2a6e165SVignesh Balasubramanian   } else if (rc == ompd_rc_stale_handle) {
202*d2a6e165SVignesh Balasubramanian     printf("Return code is stale_handle, may be in non-parallel region.\n");
203*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
204*d2a6e165SVignesh Balasubramanian     return Py_None;
205*d2a6e165SVignesh Balasubramanian   } else if (rc != ompd_rc_ok)
206*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
207*d2a6e165SVignesh Balasubramanian   else
208*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
209*d2a6e165SVignesh Balasubramanian 
210*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
211*d2a6e165SVignesh Balasubramanian   /*
212*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
213*d2a6e165SVignesh Balasubramanian      longer valid;
214*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
215*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
216*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
217*d2a6e165SVignesh Balasubramanian   */
218*d2a6e165SVignesh Balasubramanian 
219*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL parallel_handle.\n");
220*d2a6e165SVignesh Balasubramanian   rc = ompd_get_curr_parallel_handle(thread_handle, NULL);
221*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
222*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
223*d2a6e165SVignesh Balasubramanian   else
224*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
225*d2a6e165SVignesh Balasubramanian 
226*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
227*d2a6e165SVignesh Balasubramanian          "thread_handle.\n");
228*d2a6e165SVignesh Balasubramanian   rc = ompd_get_curr_parallel_handle(NULL, &parallel_handle);
229*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
230*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
231*d2a6e165SVignesh Balasubramanian   else
232*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
233*d2a6e165SVignesh Balasubramanian 
234*d2a6e165SVignesh Balasubramanian   return Py_None;
235*d2a6e165SVignesh Balasubramanian }
236*d2a6e165SVignesh Balasubramanian 
237*d2a6e165SVignesh Balasubramanian /*
238*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_thread_in_parallel.
239*d2a6e165SVignesh Balasubramanian 
240*d2a6e165SVignesh Balasubramanian   Program:
241*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
242*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
243*d2a6e165SVignesh Balasubramanian     3.    int main () {
244*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(3);
245*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
246*d2a6e165SVignesh Balasubramanian     6.        {
247*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
248*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
249*d2a6e165SVignesh Balasubramanian     8.        }
250*d2a6e165SVignesh Balasubramanian     9.        return 0;
251*d2a6e165SVignesh Balasubramanian     10.   }
252*d2a6e165SVignesh Balasubramanian 
253*d2a6e165SVignesh Balasubramanian   GDB Commands:
254*d2a6e165SVignesh Balasubramanian     ompd init
255*d2a6e165SVignesh Balasubramanian     b 7
256*d2a6e165SVignesh Balasubramanian     omptestapi ompd_get_thread_in_parallel
257*d2a6e165SVignesh Balasubramanian */
test_ompd_get_thread_in_parallel(PyObject * self,PyObject * args)258*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_thread_in_parallel(PyObject *self, PyObject *args) {
259*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_thread_in_parallel\"...\n");
260*d2a6e165SVignesh Balasubramanian 
261*d2a6e165SVignesh Balasubramanian   PyObject *parallelHandlePy = PyTuple_GetItem(args, 0);
262*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle =
263*d2a6e165SVignesh Balasubramanian       (ompd_parallel_handle_t *)(PyCapsule_GetPointer(parallelHandlePy,
264*d2a6e165SVignesh Balasubramanian                                                       "ParallelHandle"));
265*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle;
266*d2a6e165SVignesh Balasubramanian 
267*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
268*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_thread_in_parallel(
269*d2a6e165SVignesh Balasubramanian       parallel_handle, 1 /* lesser than team-size-var*/, &thread_handle);
270*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
271*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
272*d2a6e165SVignesh Balasubramanian     return Py_None;
273*d2a6e165SVignesh Balasubramanian   } else
274*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
275*d2a6e165SVignesh Balasubramanian 
276*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input: if the thread_num argument is greater than or equal to
277*d2a6e165SVignesh Balasubramanian   // the team-size-var ICV or negative
278*d2a6e165SVignesh Balasubramanian   printf("Test: Invalid thread num (199).\n");
279*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_in_parallel(parallel_handle, 199, &thread_handle);
280*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
281*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
282*d2a6e165SVignesh Balasubramanian   else
283*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
284*d2a6e165SVignesh Balasubramanian 
285*d2a6e165SVignesh Balasubramanian   printf("Test: Invalid thread num (-5).\n");
286*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_in_parallel(parallel_handle, -5, &thread_handle);
287*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
288*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
289*d2a6e165SVignesh Balasubramanian   else
290*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
291*d2a6e165SVignesh Balasubramanian 
292*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
293*d2a6e165SVignesh Balasubramanian   /*
294*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
295*d2a6e165SVignesh Balasubramanian      longer valid;
296*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
297*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
298*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
299*d2a6e165SVignesh Balasubramanian   */
300*d2a6e165SVignesh Balasubramanian 
301*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL thread_handle.\n");
302*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_in_parallel(parallel_handle, 1, NULL);
303*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
304*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
305*d2a6e165SVignesh Balasubramanian   else
306*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
307*d2a6e165SVignesh Balasubramanian 
308*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
309*d2a6e165SVignesh Balasubramanian          "parallel_handle.\n");
310*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_in_parallel(NULL, 1, &thread_handle);
311*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
312*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
313*d2a6e165SVignesh Balasubramanian   else
314*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
315*d2a6e165SVignesh Balasubramanian 
316*d2a6e165SVignesh Balasubramanian   return Py_None;
317*d2a6e165SVignesh Balasubramanian }
318*d2a6e165SVignesh Balasubramanian 
319*d2a6e165SVignesh Balasubramanian /*
320*d2a6e165SVignesh Balasubramanian   Test API: ompd_thread_handle_compare.
321*d2a6e165SVignesh Balasubramanian 
322*d2a6e165SVignesh Balasubramanian   Program:
323*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
324*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
325*d2a6e165SVignesh Balasubramanian     3.    int main () {
326*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(4);
327*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
328*d2a6e165SVignesh Balasubramanian     6.        {
329*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
330*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
331*d2a6e165SVignesh Balasubramanian     8.        }
332*d2a6e165SVignesh Balasubramanian     9.        return 0;
333*d2a6e165SVignesh Balasubramanian     10.   }
334*d2a6e165SVignesh Balasubramanian 
335*d2a6e165SVignesh Balasubramanian   GDB Commands:
336*d2a6e165SVignesh Balasubramanian     ompd init
337*d2a6e165SVignesh Balasubramanian     b 7
338*d2a6e165SVignesh Balasubramanian     omptestapi ompd_thread_handle_compare
339*d2a6e165SVignesh Balasubramanian */
340*d2a6e165SVignesh Balasubramanian 
test_ompd_thread_handle_compare(PyObject * self,PyObject * args)341*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_thread_handle_compare(PyObject *self, PyObject *args) {
342*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_thread_handle_compare\"...\n");
343*d2a6e165SVignesh Balasubramanian 
344*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy1 = PyTuple_GetItem(args, 0);
345*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle1 =
346*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy1,
347*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
348*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy2 = PyTuple_GetItem(args, 1);
349*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle2 =
350*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy2,
351*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
352*d2a6e165SVignesh Balasubramanian 
353*d2a6e165SVignesh Balasubramanian   int cmp_value;
354*d2a6e165SVignesh Balasubramanian 
355*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
356*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc =
357*d2a6e165SVignesh Balasubramanian       ompd_thread_handle_compare(thread_handle1, thread_handle2, &cmp_value);
358*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
359*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
360*d2a6e165SVignesh Balasubramanian     return Py_None;
361*d2a6e165SVignesh Balasubramanian   } else
362*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
363*d2a6e165SVignesh Balasubramanian 
364*d2a6e165SVignesh Balasubramanian   if (cmp_value == 0) {
365*d2a6e165SVignesh Balasubramanian     printf("Threads are Equal.\n");
366*d2a6e165SVignesh Balasubramanian   } else {
367*d2a6e165SVignesh Balasubramanian     // a value less than, equal to, or greater than 0 indicates that the thread
368*d2a6e165SVignesh Balasubramanian     // corresponding to thread_handle_1 is, respectively, less than, equal to,
369*d2a6e165SVignesh Balasubramanian     // or greater than that corresponding to thread_handle_2.
370*d2a6e165SVignesh Balasubramanian     if (cmp_value <= 0) {
371*d2a6e165SVignesh Balasubramanian       printf("Thread 1 is lesser than thread 2, cmp_val = %d\n", cmp_value);
372*d2a6e165SVignesh Balasubramanian       printf("Test: Changing the order.\n");
373*d2a6e165SVignesh Balasubramanian       rc = ompd_thread_handle_compare(thread_handle2, thread_handle1,
374*d2a6e165SVignesh Balasubramanian                                       &cmp_value);
375*d2a6e165SVignesh Balasubramanian       if (rc != ompd_rc_ok) {
376*d2a6e165SVignesh Balasubramanian         printf("Failed, with return code = %d\n", rc);
377*d2a6e165SVignesh Balasubramanian         return Py_None;
378*d2a6e165SVignesh Balasubramanian       }
379*d2a6e165SVignesh Balasubramanian       if (cmp_value >= 0)
380*d2a6e165SVignesh Balasubramanian         printf("Success now cmp_value is greater, %d.\n", cmp_value);
381*d2a6e165SVignesh Balasubramanian       else
382*d2a6e165SVignesh Balasubramanian         printf("Failed.\n");
383*d2a6e165SVignesh Balasubramanian     } else {
384*d2a6e165SVignesh Balasubramanian       printf("Thread 1 is greater than thread 2.\n");
385*d2a6e165SVignesh Balasubramanian       printf("Test: Changing the order.\n");
386*d2a6e165SVignesh Balasubramanian       rc = ompd_thread_handle_compare(thread_handle2, thread_handle1,
387*d2a6e165SVignesh Balasubramanian                                       &cmp_value);
388*d2a6e165SVignesh Balasubramanian       if (rc != ompd_rc_ok) {
389*d2a6e165SVignesh Balasubramanian         printf("Failed, with return code = %d\n", rc);
390*d2a6e165SVignesh Balasubramanian         return Py_None;
391*d2a6e165SVignesh Balasubramanian       }
392*d2a6e165SVignesh Balasubramanian       if (cmp_value <= 0)
393*d2a6e165SVignesh Balasubramanian         printf("Success now cmp_value is lesser, %d.\n", cmp_value);
394*d2a6e165SVignesh Balasubramanian       else
395*d2a6e165SVignesh Balasubramanian         printf("Failed.\n");
396*d2a6e165SVignesh Balasubramanian     }
397*d2a6e165SVignesh Balasubramanian 
398*d2a6e165SVignesh Balasubramanian     // Random checks with  null and invalid args.
399*d2a6e165SVignesh Balasubramanian     /*
400*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
401*d2a6e165SVignesh Balasubramanian      longer valid;
402*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
403*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
404*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
405*d2a6e165SVignesh Balasubramanian     */
406*d2a6e165SVignesh Balasubramanian 
407*d2a6e165SVignesh Balasubramanian     printf("Test: Expecting ompd_rc_bad_input for NULL cmp_value.\n");
408*d2a6e165SVignesh Balasubramanian     rc = ompd_thread_handle_compare(thread_handle2, thread_handle1, NULL);
409*d2a6e165SVignesh Balasubramanian     if (rc != ompd_rc_bad_input)
410*d2a6e165SVignesh Balasubramanian       printf("Failed, with return code = %d\n", rc);
411*d2a6e165SVignesh Balasubramanian     else
412*d2a6e165SVignesh Balasubramanian       printf("Success.\n");
413*d2a6e165SVignesh Balasubramanian 
414*d2a6e165SVignesh Balasubramanian     printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
415*d2a6e165SVignesh Balasubramanian            "thread_handle.\n");
416*d2a6e165SVignesh Balasubramanian     rc = ompd_thread_handle_compare(NULL, thread_handle1, &cmp_value);
417*d2a6e165SVignesh Balasubramanian     if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
418*d2a6e165SVignesh Balasubramanian       printf("Failed, with return code = %d\n", rc);
419*d2a6e165SVignesh Balasubramanian     else
420*d2a6e165SVignesh Balasubramanian       printf("Success.\n");
421*d2a6e165SVignesh Balasubramanian   }
422*d2a6e165SVignesh Balasubramanian 
423*d2a6e165SVignesh Balasubramanian   return Py_None;
424*d2a6e165SVignesh Balasubramanian }
425*d2a6e165SVignesh Balasubramanian 
426*d2a6e165SVignesh Balasubramanian /*
427*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_thread_id.
428*d2a6e165SVignesh Balasubramanian 
429*d2a6e165SVignesh Balasubramanian   Program:
430*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
431*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
432*d2a6e165SVignesh Balasubramanian     3.    int main () {
433*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
434*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
435*d2a6e165SVignesh Balasubramanian     6.        {
436*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
437*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
438*d2a6e165SVignesh Balasubramanian     8.        }
439*d2a6e165SVignesh Balasubramanian     9.        return 0;
440*d2a6e165SVignesh Balasubramanian     10.   }
441*d2a6e165SVignesh Balasubramanian 
442*d2a6e165SVignesh Balasubramanian   GDB Commands:
443*d2a6e165SVignesh Balasubramanian     ompd init
444*d2a6e165SVignesh Balasubramanian     b 7
445*d2a6e165SVignesh Balasubramanian     omptestapi ompd_get_thread_id
446*d2a6e165SVignesh Balasubramanian */
447*d2a6e165SVignesh Balasubramanian 
test_ompd_get_thread_id(PyObject * self,PyObject * args)448*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_thread_id(PyObject *self, PyObject *args) {
449*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_thread_id\"...\n");
450*d2a6e165SVignesh Balasubramanian 
451*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy = PyTuple_GetItem(args, 0);
452*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle =
453*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy,
454*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
455*d2a6e165SVignesh Balasubramanian 
456*d2a6e165SVignesh Balasubramanian   uint64_t threadID;
457*d2a6e165SVignesh Balasubramanian   ompd_size_t sizeof_thread_id = sizeof(threadID);
458*d2a6e165SVignesh Balasubramanian 
459*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
460*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_thread_id(thread_handle, 0 /*OMPD_THREAD_ID_PTHREAD*/,
461*d2a6e165SVignesh Balasubramanian                                     sizeof_thread_id, &threadID);
462*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
463*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
464*d2a6e165SVignesh Balasubramanian     return Py_None;
465*d2a6e165SVignesh Balasubramanian   } else
466*d2a6e165SVignesh Balasubramanian     printf("Success. Thread id = %ld\n", threadID);
467*d2a6e165SVignesh Balasubramanian 
468*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input: if a different value in sizeof_thread_id is expected for
469*d2a6e165SVignesh Balasubramanian   // a thread kind of kind
470*d2a6e165SVignesh Balasubramanian   printf("Test: Wrong sizeof_thread_id.\n");
471*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_id(thread_handle, 0 /*OMPD_THREAD_ID_PTHREAD*/,
472*d2a6e165SVignesh Balasubramanian                           sizeof_thread_id - 1, &threadID);
473*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
474*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
475*d2a6e165SVignesh Balasubramanian   else
476*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
477*d2a6e165SVignesh Balasubramanian 
478*d2a6e165SVignesh Balasubramanian   // ompd_rc_unsupported: if the kind of thread is not supported
479*d2a6e165SVignesh Balasubramanian   printf("Test: Unsupported thread kind.\n");
480*d2a6e165SVignesh Balasubramanian   // thread kind currently support from 0-3, refer in ompd-types.h
481*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_id(thread_handle, 4, sizeof_thread_id - 1, &threadID);
482*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_unsupported)
483*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
484*d2a6e165SVignesh Balasubramanian   else
485*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
486*d2a6e165SVignesh Balasubramanian 
487*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
488*d2a6e165SVignesh Balasubramanian   /*
489*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
490*d2a6e165SVignesh Balasubramanian      longer valid;
491*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
492*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
493*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
494*d2a6e165SVignesh Balasubramanian   */
495*d2a6e165SVignesh Balasubramanian 
496*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL threadID.\n");
497*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_id(thread_handle, 0 /*OMPD_THREAD_ID_PTHREAD*/,
498*d2a6e165SVignesh Balasubramanian                           sizeof_thread_id, NULL);
499*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
500*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
501*d2a6e165SVignesh Balasubramanian   else
502*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
503*d2a6e165SVignesh Balasubramanian 
504*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error for NULL thread_handle.\n");
505*d2a6e165SVignesh Balasubramanian   rc = ompd_get_thread_id(NULL, 0 /*OMPD_THREAD_ID_PTHREAD*/, sizeof_thread_id,
506*d2a6e165SVignesh Balasubramanian                           &threadID);
507*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
508*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
509*d2a6e165SVignesh Balasubramanian   else
510*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
511*d2a6e165SVignesh Balasubramanian 
512*d2a6e165SVignesh Balasubramanian   return Py_None;
513*d2a6e165SVignesh Balasubramanian }
514*d2a6e165SVignesh Balasubramanian 
515*d2a6e165SVignesh Balasubramanian /*
516*d2a6e165SVignesh Balasubramanian   Test API: ompd_rel_thread_handle
517*d2a6e165SVignesh Balasubramanian 
518*d2a6e165SVignesh Balasubramanian   Program:
519*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
520*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
521*d2a6e165SVignesh Balasubramanian     3.    int main () {
522*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
523*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
524*d2a6e165SVignesh Balasubramanian     6.        {
525*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
526*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
527*d2a6e165SVignesh Balasubramanian     8.        }
528*d2a6e165SVignesh Balasubramanian     9.        return 0;
529*d2a6e165SVignesh Balasubramanian     10.   }
530*d2a6e165SVignesh Balasubramanian 
531*d2a6e165SVignesh Balasubramanian   GDB Commands:
532*d2a6e165SVignesh Balasubramanian     ompd init
533*d2a6e165SVignesh Balasubramanian     b 7
534*d2a6e165SVignesh Balasubramanian     omptestapi ompd_rel_thread_handle
535*d2a6e165SVignesh Balasubramanian */
536*d2a6e165SVignesh Balasubramanian 
537*d2a6e165SVignesh Balasubramanian //  TODO: This might not be the right way to do,as this handle comes from
538*d2a6e165SVignesh Balasubramanian // python not generated by ompd API
539*d2a6e165SVignesh Balasubramanian 
test_ompd_rel_thread_handle(PyObject * self,PyObject * args)540*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_rel_thread_handle(PyObject *self, PyObject *args) {
541*d2a6e165SVignesh Balasubramanian   printf("Testing Not enabled for \"ompd_rel_thread_handle\"...\n");
542*d2a6e165SVignesh Balasubramanian   printf("Disabled.\n");
543*d2a6e165SVignesh Balasubramanian   return Py_None;
544*d2a6e165SVignesh Balasubramanian }
545*d2a6e165SVignesh Balasubramanian 
546*d2a6e165SVignesh Balasubramanian /*
547*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_enclosing_parallel_handle.
548*d2a6e165SVignesh Balasubramanian 
549*d2a6e165SVignesh Balasubramanian   Program:
550*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
551*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
552*d2a6e165SVignesh Balasubramanian     3.    int main () {
553*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
554*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
555*d2a6e165SVignesh Balasubramanian     6.        {
556*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
557*d2a6e165SVignesh Balasubramanian                           omp_get_thread_num());
558*d2a6e165SVignesh Balasubramanian     8.            omp_set_num_threads(3);
559*d2a6e165SVignesh Balasubramanian     9.            #pragma omp parallel
560*d2a6e165SVignesh Balasubramanian     10.           {
561*d2a6e165SVignesh Balasubramanian     11.             printf ("Parallel level 2, thread num = %d",
562*d2a6e165SVignesh Balasubramanian                         omp_get_thread_num());
563*d2a6e165SVignesh Balasubramanian     12.           }
564*d2a6e165SVignesh Balasubramanian     13.       }
565*d2a6e165SVignesh Balasubramanian     14.       return 0;
566*d2a6e165SVignesh Balasubramanian     15.   }
567*d2a6e165SVignesh Balasubramanian 
568*d2a6e165SVignesh Balasubramanian   GDB Commands:
569*d2a6e165SVignesh Balasubramanian     ompd init
570*d2a6e165SVignesh Balasubramanian     b 11
571*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_enclosing_parallel_handle
572*d2a6e165SVignesh Balasubramanian 
573*d2a6e165SVignesh Balasubramanian     for "ompd_rc_unavailable":
574*d2a6e165SVignesh Balasubramanian     ompd init
575*d2a6e165SVignesh Balasubramanian     omptestapi ompd_get_enclosing_parallel_handle
576*d2a6e165SVignesh Balasubramanian                 (or break at line 4 before this)
577*d2a6e165SVignesh Balasubramanian */
578*d2a6e165SVignesh Balasubramanian 
test_ompd_get_enclosing_parallel_handle(PyObject * self,PyObject * args)579*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_enclosing_parallel_handle(PyObject *self,
580*d2a6e165SVignesh Balasubramanian                                                   PyObject *args) {
581*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_enclosing_parallel_handle\"...\n");
582*d2a6e165SVignesh Balasubramanian 
583*d2a6e165SVignesh Balasubramanian   PyObject *parallelHandlePy = PyTuple_GetItem(args, 0);
584*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle =
585*d2a6e165SVignesh Balasubramanian       (ompd_parallel_handle_t *)(PyCapsule_GetPointer(parallelHandlePy,
586*d2a6e165SVignesh Balasubramanian                                                       "ParallelHandle"));
587*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *enclosing_parallel_handle;
588*d2a6e165SVignesh Balasubramanian 
589*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
590*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_enclosing_parallel_handle(parallel_handle,
591*d2a6e165SVignesh Balasubramanian                                                     &enclosing_parallel_handle);
592*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_unavailable) {
593*d2a6e165SVignesh Balasubramanian     // ompd_rc_unavailable: if no enclosing parallel region exists.
594*d2a6e165SVignesh Balasubramanian     printf("Success. return code is ompd_rc_unavailable, Not in parallel "
595*d2a6e165SVignesh Balasubramanian            "region\n");
596*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
597*d2a6e165SVignesh Balasubramanian     return Py_None;
598*d2a6e165SVignesh Balasubramanian   } else if (rc != ompd_rc_ok) {
599*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
600*d2a6e165SVignesh Balasubramanian     return Py_None;
601*d2a6e165SVignesh Balasubramanian   } else
602*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
603*d2a6e165SVignesh Balasubramanian 
604*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
605*d2a6e165SVignesh Balasubramanian   /*
606*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
607*d2a6e165SVignesh Balasubramanian      longer valid;
608*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
609*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
610*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
611*d2a6e165SVignesh Balasubramanian   */
612*d2a6e165SVignesh Balasubramanian 
613*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL "
614*d2a6e165SVignesh Balasubramanian          "enclosing_parallel_handle.\n");
615*d2a6e165SVignesh Balasubramanian   rc = ompd_get_enclosing_parallel_handle(parallel_handle, NULL);
616*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
617*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
618*d2a6e165SVignesh Balasubramanian   else
619*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
620*d2a6e165SVignesh Balasubramanian 
621*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
622*d2a6e165SVignesh Balasubramanian          "parallel_handle.\n");
623*d2a6e165SVignesh Balasubramanian   rc = ompd_get_enclosing_parallel_handle(NULL, &enclosing_parallel_handle);
624*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
625*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
626*d2a6e165SVignesh Balasubramanian   else
627*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
628*d2a6e165SVignesh Balasubramanian 
629*d2a6e165SVignesh Balasubramanian   return Py_None;
630*d2a6e165SVignesh Balasubramanian }
631*d2a6e165SVignesh Balasubramanian 
632*d2a6e165SVignesh Balasubramanian /*
633*d2a6e165SVignesh Balasubramanian   Test API: ompd_parallel_handle_compare.
634*d2a6e165SVignesh Balasubramanian 
635*d2a6e165SVignesh Balasubramanian   Program:
636*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
637*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
638*d2a6e165SVignesh Balasubramanian     3.    int main () {
639*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
640*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
641*d2a6e165SVignesh Balasubramanian     6.        {
642*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
643*d2a6e165SVignesh Balasubramanian                           omp_get_thread_num());
644*d2a6e165SVignesh Balasubramanian     8.            omp_set_num_threads(3);
645*d2a6e165SVignesh Balasubramanian     9.            #pragma omp parallel
646*d2a6e165SVignesh Balasubramanian     10.           {
647*d2a6e165SVignesh Balasubramanian     11.             printf ("Parallel level 2, thread num = %d",
648*d2a6e165SVignesh Balasubramanian                         omp_get_thread_num());
649*d2a6e165SVignesh Balasubramanian     12.           }
650*d2a6e165SVignesh Balasubramanian     13.       }
651*d2a6e165SVignesh Balasubramanian     14.       return 0;
652*d2a6e165SVignesh Balasubramanian     15.   }
653*d2a6e165SVignesh Balasubramanian 
654*d2a6e165SVignesh Balasubramanian   GDB Commands:
655*d2a6e165SVignesh Balasubramanian     ompd init
656*d2a6e165SVignesh Balasubramanian     b 11
657*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_parallel_handle_compare
658*d2a6e165SVignesh Balasubramanian */
659*d2a6e165SVignesh Balasubramanian 
test_ompd_parallel_handle_compare(PyObject * self,PyObject * args)660*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_parallel_handle_compare(PyObject *self, PyObject *args) {
661*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_parallel_handle_compare\"...\n");
662*d2a6e165SVignesh Balasubramanian 
663*d2a6e165SVignesh Balasubramanian   PyObject *parallelHandlePy1 = PyTuple_GetItem(args, 0);
664*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle1 =
665*d2a6e165SVignesh Balasubramanian       (ompd_parallel_handle_t *)(PyCapsule_GetPointer(parallelHandlePy1,
666*d2a6e165SVignesh Balasubramanian                                                       "ParallelHandle"));
667*d2a6e165SVignesh Balasubramanian   PyObject *parallelHandlePy2 = PyTuple_GetItem(args, 1);
668*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle2 =
669*d2a6e165SVignesh Balasubramanian       (ompd_parallel_handle_t *)(PyCapsule_GetPointer(parallelHandlePy2,
670*d2a6e165SVignesh Balasubramanian                                                       "ParallelHandle"));
671*d2a6e165SVignesh Balasubramanian 
672*d2a6e165SVignesh Balasubramanian   int cmp_value;
673*d2a6e165SVignesh Balasubramanian 
674*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
675*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_parallel_handle_compare(parallel_handle1,
676*d2a6e165SVignesh Balasubramanian                                               parallel_handle2, &cmp_value);
677*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
678*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
679*d2a6e165SVignesh Balasubramanian     return Py_None;
680*d2a6e165SVignesh Balasubramanian   } else
681*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
682*d2a6e165SVignesh Balasubramanian 
683*d2a6e165SVignesh Balasubramanian   if (cmp_value == 0) {
684*d2a6e165SVignesh Balasubramanian     printf("Parallel regions are Same.\n");
685*d2a6e165SVignesh Balasubramanian   } else {
686*d2a6e165SVignesh Balasubramanian     // A value less than, equal to, or greater than 0 indicates that the region
687*d2a6e165SVignesh Balasubramanian     // corresponding to parallel_handle_1 is, respectively, less than, equal to,
688*d2a6e165SVignesh Balasubramanian     // or greater than that corresponding to parallel_handle_2
689*d2a6e165SVignesh Balasubramanian     if (cmp_value <= 0) {
690*d2a6e165SVignesh Balasubramanian       printf("Parallel handle 1 is lesser than handle 2, cmp_val = %d\n",
691*d2a6e165SVignesh Balasubramanian              cmp_value);
692*d2a6e165SVignesh Balasubramanian       printf("Test: Changing the order.\n");
693*d2a6e165SVignesh Balasubramanian       rc = ompd_parallel_handle_compare(parallel_handle2, parallel_handle1,
694*d2a6e165SVignesh Balasubramanian                                         &cmp_value);
695*d2a6e165SVignesh Balasubramanian       if (rc != ompd_rc_ok) {
696*d2a6e165SVignesh Balasubramanian         printf("Failed, with return code = %d\n", rc);
697*d2a6e165SVignesh Balasubramanian         return Py_None;
698*d2a6e165SVignesh Balasubramanian       }
699*d2a6e165SVignesh Balasubramanian       if (cmp_value >= 0)
700*d2a6e165SVignesh Balasubramanian         printf("Success now cmp_value is greater, %d.\n", cmp_value);
701*d2a6e165SVignesh Balasubramanian       else
702*d2a6e165SVignesh Balasubramanian         printf("Failed.\n");
703*d2a6e165SVignesh Balasubramanian     } else {
704*d2a6e165SVignesh Balasubramanian       printf("Parallel 1 is greater than handle 2.\n");
705*d2a6e165SVignesh Balasubramanian       printf("Test: Changing the order.\n");
706*d2a6e165SVignesh Balasubramanian       rc = ompd_parallel_handle_compare(parallel_handle2, parallel_handle1,
707*d2a6e165SVignesh Balasubramanian                                         &cmp_value);
708*d2a6e165SVignesh Balasubramanian       if (rc != ompd_rc_ok) {
709*d2a6e165SVignesh Balasubramanian         printf("Failed, with return code = %d\n", rc);
710*d2a6e165SVignesh Balasubramanian         return Py_None;
711*d2a6e165SVignesh Balasubramanian       }
712*d2a6e165SVignesh Balasubramanian       if (cmp_value <= 0)
713*d2a6e165SVignesh Balasubramanian         printf("Success now cmp_value is lesser, %d.\n", cmp_value);
714*d2a6e165SVignesh Balasubramanian       else
715*d2a6e165SVignesh Balasubramanian         printf("Failed.\n");
716*d2a6e165SVignesh Balasubramanian     }
717*d2a6e165SVignesh Balasubramanian 
718*d2a6e165SVignesh Balasubramanian     // Random checks with  null and invalid args.
719*d2a6e165SVignesh Balasubramanian     /*
720*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
721*d2a6e165SVignesh Balasubramanian      longer valid;
722*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
723*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
724*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
725*d2a6e165SVignesh Balasubramanian     */
726*d2a6e165SVignesh Balasubramanian 
727*d2a6e165SVignesh Balasubramanian     printf("Test: Expecting ompd_rc_bad_input for NULL cmp_value.\n");
728*d2a6e165SVignesh Balasubramanian     rc = ompd_parallel_handle_compare(parallel_handle2, parallel_handle1, NULL);
729*d2a6e165SVignesh Balasubramanian     if (rc != ompd_rc_bad_input)
730*d2a6e165SVignesh Balasubramanian       printf("Failed, with return code = %d\n", rc);
731*d2a6e165SVignesh Balasubramanian     else
732*d2a6e165SVignesh Balasubramanian       printf("Success.\n");
733*d2a6e165SVignesh Balasubramanian 
734*d2a6e165SVignesh Balasubramanian     printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
735*d2a6e165SVignesh Balasubramanian            "thread_handle.\n");
736*d2a6e165SVignesh Balasubramanian     rc = ompd_parallel_handle_compare(NULL, parallel_handle1, &cmp_value);
737*d2a6e165SVignesh Balasubramanian     if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
738*d2a6e165SVignesh Balasubramanian       printf("Failed, with return code = %d\n", rc);
739*d2a6e165SVignesh Balasubramanian     else
740*d2a6e165SVignesh Balasubramanian       printf("Success.\n");
741*d2a6e165SVignesh Balasubramanian   }
742*d2a6e165SVignesh Balasubramanian 
743*d2a6e165SVignesh Balasubramanian   return Py_None;
744*d2a6e165SVignesh Balasubramanian }
745*d2a6e165SVignesh Balasubramanian 
746*d2a6e165SVignesh Balasubramanian /*
747*d2a6e165SVignesh Balasubramanian   Test API: ompd_rel_parallel_handle
748*d2a6e165SVignesh Balasubramanian 
749*d2a6e165SVignesh Balasubramanian   Program:
750*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
751*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
752*d2a6e165SVignesh Balasubramanian     3.    int main () {
753*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
754*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
755*d2a6e165SVignesh Balasubramanian     6.        {
756*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
757*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
758*d2a6e165SVignesh Balasubramanian     8.        }
759*d2a6e165SVignesh Balasubramanian     9.        return 0;
760*d2a6e165SVignesh Balasubramanian     10.   }
761*d2a6e165SVignesh Balasubramanian 
762*d2a6e165SVignesh Balasubramanian   GDB Commands:
763*d2a6e165SVignesh Balasubramanian     ompd init
764*d2a6e165SVignesh Balasubramanian     b 7
765*d2a6e165SVignesh Balasubramanian     omptestapi ompd_rel_parallel_handle
766*d2a6e165SVignesh Balasubramanian */
767*d2a6e165SVignesh Balasubramanian 
768*d2a6e165SVignesh Balasubramanian // TODO: Same as thread_rel_handle, might not be a right way to test
769*d2a6e165SVignesh Balasubramanian // What released should be provided by ompd API, this address is actually from
770*d2a6e165SVignesh Balasubramanian // python
test_ompd_rel_parallel_handle(PyObject * self,PyObject * args)771*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_rel_parallel_handle(PyObject *self, PyObject *args) {
772*d2a6e165SVignesh Balasubramanian   printf("Testing NOT enabled for \"ompd_rel_parallel_handle\"...\n");
773*d2a6e165SVignesh Balasubramanian   printf("Disabled.\n");
774*d2a6e165SVignesh Balasubramanian   return Py_None;
775*d2a6e165SVignesh Balasubramanian }
776*d2a6e165SVignesh Balasubramanian 
777*d2a6e165SVignesh Balasubramanian /*
778*d2a6e165SVignesh Balasubramanian   Test API: ompd_initialize
779*d2a6e165SVignesh Balasubramanian 
780*d2a6e165SVignesh Balasubramanian   Program:
781*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
782*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
783*d2a6e165SVignesh Balasubramanian     3.    int main () {
784*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
785*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
786*d2a6e165SVignesh Balasubramanian     6.        {
787*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
788*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
789*d2a6e165SVignesh Balasubramanian     8.        }
790*d2a6e165SVignesh Balasubramanian     9.        return 0;
791*d2a6e165SVignesh Balasubramanian     10.   }
792*d2a6e165SVignesh Balasubramanian 
793*d2a6e165SVignesh Balasubramanian   GDB Commands:
794*d2a6e165SVignesh Balasubramanian     b 4
795*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_initialize\
796*d2a6e165SVignesh Balasubramanian */
test_ompd_initialize(PyObject * self,PyObject * noargs)797*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_initialize(PyObject *self, PyObject *noargs) {
798*d2a6e165SVignesh Balasubramanian   printf("Testing \"test_ompd_initialize\"...\n");
799*d2a6e165SVignesh Balasubramanian 
800*d2a6e165SVignesh Balasubramanian   ompd_word_t version;
801*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_api_version(&version);
802*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
803*d2a6e165SVignesh Balasubramanian     printf("Failed in \"ompd_get_api_version\".\n");
804*d2a6e165SVignesh Balasubramanian     return Py_None;
805*d2a6e165SVignesh Balasubramanian   }
806*d2a6e165SVignesh Balasubramanian 
807*d2a6e165SVignesh Balasubramanian   static ompd_callbacks_t table = {
808*d2a6e165SVignesh Balasubramanian       _alloc, _free,        _print,     _sizes,     _sym_addr,      _read,
809*d2a6e165SVignesh Balasubramanian       NULL,   _read_string, _endianess, _endianess, _thread_context};
810*d2a6e165SVignesh Balasubramanian 
811*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
812*d2a6e165SVignesh Balasubramanian   ompd_rc_t (*my_ompd_init)(ompd_word_t version, ompd_callbacks_t *) =
813*d2a6e165SVignesh Balasubramanian       dlsym(ompd_library, "ompd_initialize");
814*d2a6e165SVignesh Balasubramanian   rc = my_ompd_init(version, &table);
815*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
816*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
817*d2a6e165SVignesh Balasubramanian     return Py_None;
818*d2a6e165SVignesh Balasubramanian   } else
819*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
820*d2a6e165SVignesh Balasubramanian 
821*d2a6e165SVignesh Balasubramanian   static ompd_callbacks_t invalid_table = {
822*d2a6e165SVignesh Balasubramanian       NULL,       /*      _alloc, */
823*d2a6e165SVignesh Balasubramanian       NULL,       /*      _free, */
824*d2a6e165SVignesh Balasubramanian       NULL,       /*      _print,*/
825*d2a6e165SVignesh Balasubramanian       NULL,       /*      _sizes, */
826*d2a6e165SVignesh Balasubramanian       NULL,       /*      _sym_addr, */
827*d2a6e165SVignesh Balasubramanian       NULL,       /*      _read,*/
828*d2a6e165SVignesh Balasubramanian       NULL, NULL, /*      _read_string, */
829*d2a6e165SVignesh Balasubramanian       NULL,       /*      _endianess, */
830*d2a6e165SVignesh Balasubramanian       NULL,       /*      _endianess, */
831*d2a6e165SVignesh Balasubramanian       NULL,       /*      _thread_context */
832*d2a6e165SVignesh Balasubramanian   };
833*d2a6e165SVignesh Balasubramanian 
834*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input: if invalid callbacks are provided
835*d2a6e165SVignesh Balasubramanian   printf("Test: Invalid callbacks.\n");
836*d2a6e165SVignesh Balasubramanian   rc = my_ompd_init(version, &invalid_table);
837*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
838*d2a6e165SVignesh Balasubramanian     printf("Warning, with return code = %d\n", rc);
839*d2a6e165SVignesh Balasubramanian   else
840*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
841*d2a6e165SVignesh Balasubramanian 
842*d2a6e165SVignesh Balasubramanian   // ompd_rc_unsupported: if the requested API version cannot be provided
843*d2a6e165SVignesh Balasubramanian   printf("Test: Wrong API version.\n");
844*d2a6e165SVignesh Balasubramanian   rc = my_ompd_init(150847, &table);
845*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_unsupported)
846*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
847*d2a6e165SVignesh Balasubramanian   else
848*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
849*d2a6e165SVignesh Balasubramanian 
850*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
851*d2a6e165SVignesh Balasubramanian   /*
852*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
853*d2a6e165SVignesh Balasubramanian      longer valid;
854*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
855*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
856*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
857*d2a6e165SVignesh Balasubramanian   */
858*d2a6e165SVignesh Balasubramanian 
859*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL table.\n");
860*d2a6e165SVignesh Balasubramanian   rc = my_ompd_init(version, NULL);
861*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
862*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
863*d2a6e165SVignesh Balasubramanian   else
864*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
865*d2a6e165SVignesh Balasubramanian 
866*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or ompd_rc_bad_input for NULL\n");
867*d2a6e165SVignesh Balasubramanian   rc = my_ompd_init(0, &table);
868*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_unsupported && rc != ompd_rc_bad_input)
869*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
870*d2a6e165SVignesh Balasubramanian   else
871*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
872*d2a6e165SVignesh Balasubramanian 
873*d2a6e165SVignesh Balasubramanian   return Py_None;
874*d2a6e165SVignesh Balasubramanian }
875*d2a6e165SVignesh Balasubramanian 
876*d2a6e165SVignesh Balasubramanian /*
877*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_api_version
878*d2a6e165SVignesh Balasubramanian 
879*d2a6e165SVignesh Balasubramanian   Program:
880*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
881*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
882*d2a6e165SVignesh Balasubramanian     3.    int main () {
883*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
884*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
885*d2a6e165SVignesh Balasubramanian     6.        {
886*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
887*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
888*d2a6e165SVignesh Balasubramanian     8.        }
889*d2a6e165SVignesh Balasubramanian     9.        return 0;
890*d2a6e165SVignesh Balasubramanian     10.   }
891*d2a6e165SVignesh Balasubramanian 
892*d2a6e165SVignesh Balasubramanian   GDB Commands:
893*d2a6e165SVignesh Balasubramanian     ompd init
894*d2a6e165SVignesh Balasubramanian     b 7
895*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_version
896*d2a6e165SVignesh Balasubramanian 
897*d2a6e165SVignesh Balasubramanian */
898*d2a6e165SVignesh Balasubramanian 
test_ompd_get_api_version(PyObject * self,PyObject * noargs)899*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_api_version(PyObject *self, PyObject *noargs) {
900*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_api_version\"...\n");
901*d2a6e165SVignesh Balasubramanian 
902*d2a6e165SVignesh Balasubramanian   ompd_word_t version;
903*d2a6e165SVignesh Balasubramanian 
904*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
905*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_api_version(&version);
906*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
907*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
908*d2a6e165SVignesh Balasubramanian     return Py_None;
909*d2a6e165SVignesh Balasubramanian   } else
910*d2a6e165SVignesh Balasubramanian     printf("Success. API version is %ld\n", version);
911*d2a6e165SVignesh Balasubramanian 
912*d2a6e165SVignesh Balasubramanian   printf(
913*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or ompd_rc_bad_input for NULL version\n");
914*d2a6e165SVignesh Balasubramanian   rc = ompd_get_api_version(NULL);
915*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_bad_input)
916*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
917*d2a6e165SVignesh Balasubramanian   else
918*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
919*d2a6e165SVignesh Balasubramanian 
920*d2a6e165SVignesh Balasubramanian   return Py_None;
921*d2a6e165SVignesh Balasubramanian }
922*d2a6e165SVignesh Balasubramanian 
923*d2a6e165SVignesh Balasubramanian /*
924*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_version_string
925*d2a6e165SVignesh Balasubramanian 
926*d2a6e165SVignesh Balasubramanian   Program:
927*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
928*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
929*d2a6e165SVignesh Balasubramanian     3.    int main () {
930*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
931*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
932*d2a6e165SVignesh Balasubramanian     6.        {
933*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
934*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
935*d2a6e165SVignesh Balasubramanian     8.        }
936*d2a6e165SVignesh Balasubramanian     9.        return 0;
937*d2a6e165SVignesh Balasubramanian     10.   }
938*d2a6e165SVignesh Balasubramanian 
939*d2a6e165SVignesh Balasubramanian   GDB Commands:
940*d2a6e165SVignesh Balasubramanian     ompd init
941*d2a6e165SVignesh Balasubramanian     b 7
942*d2a6e165SVignesh Balasubramanian     omptestapi ompd_get_version_string
943*d2a6e165SVignesh Balasubramanian 
944*d2a6e165SVignesh Balasubramanian */
945*d2a6e165SVignesh Balasubramanian 
test_ompd_get_version_string(PyObject * self,PyObject * noargs)946*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_version_string(PyObject *self, PyObject *noargs) {
947*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_version_string\"...\n");
948*d2a6e165SVignesh Balasubramanian 
949*d2a6e165SVignesh Balasubramanian   const char *string;
950*d2a6e165SVignesh Balasubramanian 
951*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
952*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_version_string(&string);
953*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
954*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
955*d2a6e165SVignesh Balasubramanian     return Py_None;
956*d2a6e165SVignesh Balasubramanian   } else
957*d2a6e165SVignesh Balasubramanian     printf("Success. API version is %s\n", string);
958*d2a6e165SVignesh Balasubramanian 
959*d2a6e165SVignesh Balasubramanian   printf(
960*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or ompd_rc_bad_input for NULL version\n");
961*d2a6e165SVignesh Balasubramanian   rc = ompd_get_version_string(NULL);
962*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_bad_input)
963*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
964*d2a6e165SVignesh Balasubramanian   else
965*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
966*d2a6e165SVignesh Balasubramanian 
967*d2a6e165SVignesh Balasubramanian   return Py_None;
968*d2a6e165SVignesh Balasubramanian }
969*d2a6e165SVignesh Balasubramanian 
970*d2a6e165SVignesh Balasubramanian /*
971*d2a6e165SVignesh Balasubramanian   Test API: ompd_finalize
972*d2a6e165SVignesh Balasubramanian 
973*d2a6e165SVignesh Balasubramanian   Program:
974*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
975*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
976*d2a6e165SVignesh Balasubramanian     3.    int main () {
977*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
978*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
979*d2a6e165SVignesh Balasubramanian     6.        {
980*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
981*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
982*d2a6e165SVignesh Balasubramanian     8.        }
983*d2a6e165SVignesh Balasubramanian     9.        return 0;
984*d2a6e165SVignesh Balasubramanian     10.   }
985*d2a6e165SVignesh Balasubramanian 
986*d2a6e165SVignesh Balasubramanian   GDB Commands:
987*d2a6e165SVignesh Balasubramanian     ompd init
988*d2a6e165SVignesh Balasubramanian     b 7
989*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_finalize
990*d2a6e165SVignesh Balasubramanian 
991*d2a6e165SVignesh Balasubramanian 
992*d2a6e165SVignesh Balasubramanian     b 4
993*d2a6e165SVignesh Balasubramanian     r
994*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_finalize
995*d2a6e165SVignesh Balasubramanian */
996*d2a6e165SVignesh Balasubramanian 
test_ompd_finalize(PyObject * self,PyObject * noargs)997*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_finalize(PyObject *self, PyObject *noargs) {
998*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_finalize\"...\n");
999*d2a6e165SVignesh Balasubramanian 
1000*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1001*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_finalize();
1002*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_ok)
1003*d2a6e165SVignesh Balasubramanian     printf("Ret code: ompd_rc_ok, Success if ompd is initialized.\n");
1004*d2a6e165SVignesh Balasubramanian   // ompd_rc_unsupported: if the OMPD library is not initialized.
1005*d2a6e165SVignesh Balasubramanian   else if (rc == ompd_rc_unsupported)
1006*d2a6e165SVignesh Balasubramanian     printf(
1007*d2a6e165SVignesh Balasubramanian         "Ret code: ompd_rc_unsupported, Success if ompd is NOT initialized.\n");
1008*d2a6e165SVignesh Balasubramanian   else
1009*d2a6e165SVignesh Balasubramanian     printf("Failed: Return code is %d.\n", rc);
1010*d2a6e165SVignesh Balasubramanian 
1011*d2a6e165SVignesh Balasubramanian   return Py_None;
1012*d2a6e165SVignesh Balasubramanian }
1013*d2a6e165SVignesh Balasubramanian 
1014*d2a6e165SVignesh Balasubramanian /*
1015*d2a6e165SVignesh Balasubramanian   Test API: ompd_process_initialize
1016*d2a6e165SVignesh Balasubramanian 
1017*d2a6e165SVignesh Balasubramanian   Program:
1018*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
1019*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
1020*d2a6e165SVignesh Balasubramanian     3.    int main () {
1021*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
1022*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
1023*d2a6e165SVignesh Balasubramanian     6.        {
1024*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
1025*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
1026*d2a6e165SVignesh Balasubramanian     8.        }
1027*d2a6e165SVignesh Balasubramanian     9.        return 0;
1028*d2a6e165SVignesh Balasubramanian     10.   }
1029*d2a6e165SVignesh Balasubramanian 
1030*d2a6e165SVignesh Balasubramanian   GDB Commands:
1031*d2a6e165SVignesh Balasubramanian 
1032*d2a6e165SVignesh Balasubramanian */
1033*d2a6e165SVignesh Balasubramanian 
test_ompd_process_initialize(PyObject * self,PyObject * noargs)1034*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_process_initialize(PyObject *self, PyObject *noargs) {
1035*d2a6e165SVignesh Balasubramanian 
1036*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_process_initialize\"....\n");
1037*d2a6e165SVignesh Balasubramanian 
1038*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle;
1039*d2a6e165SVignesh Balasubramanian 
1040*d2a6e165SVignesh Balasubramanian   //  ompd_address_space_context_t context = {42};
1041*d2a6e165SVignesh Balasubramanian 
1042*d2a6e165SVignesh Balasubramanian   printf("Test: with correct Args.\n");
1043*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_process_initialize(&context, &addr_handle);
1044*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1045*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1046*d2a6e165SVignesh Balasubramanian     return Py_None;
1047*d2a6e165SVignesh Balasubramanian   } else
1048*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1049*d2a6e165SVignesh Balasubramanian 
1050*d2a6e165SVignesh Balasubramanian   printf("Test: With Unsupported library.\n");
1051*d2a6e165SVignesh Balasubramanian   printf("Warning: Have to test manually with 32 and 64 bit combination.\n");
1052*d2a6e165SVignesh Balasubramanian 
1053*d2a6e165SVignesh Balasubramanian   //  ompd_address_space_context_t invalidcontext = {99};
1054*d2a6e165SVignesh Balasubramanian   printf("Test: with wrong context value.\n");
1055*d2a6e165SVignesh Balasubramanian   rc = ompd_process_initialize(&invalidcontext, &addr_handle);
1056*d2a6e165SVignesh Balasubramanian   if ((rc != ompd_rc_bad_input) && (rc != ompd_rc_incompatible) &&
1057*d2a6e165SVignesh Balasubramanian       (rc != ompd_rc_stale_handle))
1058*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1059*d2a6e165SVignesh Balasubramanian   else
1060*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1061*d2a6e165SVignesh Balasubramanian 
1062*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1063*d2a6e165SVignesh Balasubramanian   /*
1064*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1065*d2a6e165SVignesh Balasubramanian      longer valid;
1066*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1067*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1068*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1069*d2a6e165SVignesh Balasubramanian   */
1070*d2a6e165SVignesh Balasubramanian 
1071*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting stale handle or bad_input for NULL addr_handle.\n");
1072*d2a6e165SVignesh Balasubramanian   rc = ompd_process_initialize(&context, NULL);
1073*d2a6e165SVignesh Balasubramanian   if ((rc != ompd_rc_bad_input) && (rc != ompd_rc_stale_handle))
1074*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1075*d2a6e165SVignesh Balasubramanian   else
1076*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1077*d2a6e165SVignesh Balasubramanian 
1078*d2a6e165SVignesh Balasubramanian   return Py_None;
1079*d2a6e165SVignesh Balasubramanian }
1080*d2a6e165SVignesh Balasubramanian 
1081*d2a6e165SVignesh Balasubramanian /*
1082*d2a6e165SVignesh Balasubramanian   Test API: ompd_device_initialize
1083*d2a6e165SVignesh Balasubramanian 
1084*d2a6e165SVignesh Balasubramanian   Program:
1085*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
1086*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
1087*d2a6e165SVignesh Balasubramanian     3.    int main () {
1088*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
1089*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
1090*d2a6e165SVignesh Balasubramanian     6.        {
1091*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
1092*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
1093*d2a6e165SVignesh Balasubramanian     8.        }
1094*d2a6e165SVignesh Balasubramanian     9.        return 0;
1095*d2a6e165SVignesh Balasubramanian     10.   }
1096*d2a6e165SVignesh Balasubramanian 
1097*d2a6e165SVignesh Balasubramanian   GDB Commands:
1098*d2a6e165SVignesh Balasubramanian 
1099*d2a6e165SVignesh Balasubramanian */
1100*d2a6e165SVignesh Balasubramanian 
test_ompd_device_initialize(PyObject * self,PyObject * noargs)1101*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_device_initialize(PyObject *self, PyObject *noargs) {
1102*d2a6e165SVignesh Balasubramanian   printf("Testing Not enabled for \"ompd_device_initialize\".\n");
1103*d2a6e165SVignesh Balasubramanian   printf("Disabled.\n");
1104*d2a6e165SVignesh Balasubramanian 
1105*d2a6e165SVignesh Balasubramanian   return Py_None;
1106*d2a6e165SVignesh Balasubramanian }
1107*d2a6e165SVignesh Balasubramanian 
1108*d2a6e165SVignesh Balasubramanian /*
1109*d2a6e165SVignesh Balasubramanian   Test API: ompd_rel_address_space_handle
1110*d2a6e165SVignesh Balasubramanian 
1111*d2a6e165SVignesh Balasubramanian   Program:
1112*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
1113*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
1114*d2a6e165SVignesh Balasubramanian     3.    int main () {
1115*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
1116*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
1117*d2a6e165SVignesh Balasubramanian     6.        {
1118*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
1119*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
1120*d2a6e165SVignesh Balasubramanian     8.        }
1121*d2a6e165SVignesh Balasubramanian     9.        return 0;
1122*d2a6e165SVignesh Balasubramanian     10.   }
1123*d2a6e165SVignesh Balasubramanian 
1124*d2a6e165SVignesh Balasubramanian   GDB Commands:
1125*d2a6e165SVignesh Balasubramanian 
1126*d2a6e165SVignesh Balasubramanian */
test_ompd_rel_address_space_handle(PyObject * self,PyObject * noargs)1127*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_rel_address_space_handle(PyObject *self, PyObject *noargs) {
1128*d2a6e165SVignesh Balasubramanian   printf("Testing Not enabled for \"ompd_rel_address_space_handle\".\n");
1129*d2a6e165SVignesh Balasubramanian   printf("Disabled.\n");
1130*d2a6e165SVignesh Balasubramanian 
1131*d2a6e165SVignesh Balasubramanian   return Py_None;
1132*d2a6e165SVignesh Balasubramanian }
1133*d2a6e165SVignesh Balasubramanian 
1134*d2a6e165SVignesh Balasubramanian /*
1135*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_omp_version
1136*d2a6e165SVignesh Balasubramanian 
1137*d2a6e165SVignesh Balasubramanian   Program:
1138*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
1139*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
1140*d2a6e165SVignesh Balasubramanian     3.    int main () {
1141*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
1142*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
1143*d2a6e165SVignesh Balasubramanian     6.        {
1144*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
1145*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
1146*d2a6e165SVignesh Balasubramanian     8.        }
1147*d2a6e165SVignesh Balasubramanian     9.        return 0;
1148*d2a6e165SVignesh Balasubramanian     10.   }
1149*d2a6e165SVignesh Balasubramanian 
1150*d2a6e165SVignesh Balasubramanian   GDB Commands:
1151*d2a6e165SVignesh Balasubramanian     ompd init
1152*d2a6e165SVignesh Balasubramanian     b 10
1153*d2a6e165SVignesh Balasubramanian     c
1154*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_omp_version
1155*d2a6e165SVignesh Balasubramanian */
test_ompd_get_omp_version(PyObject * self,PyObject * args)1156*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_omp_version(PyObject *self, PyObject *args) {
1157*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_omp_version\" ...\n");
1158*d2a6e165SVignesh Balasubramanian 
1159*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
1160*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
1161*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
1162*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
1163*d2a6e165SVignesh Balasubramanian 
1164*d2a6e165SVignesh Balasubramanian   ompd_word_t omp_version;
1165*d2a6e165SVignesh Balasubramanian 
1166*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1167*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_omp_version(addr_handle, &omp_version);
1168*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1169*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1170*d2a6e165SVignesh Balasubramanian     return Py_None;
1171*d2a6e165SVignesh Balasubramanian   } else
1172*d2a6e165SVignesh Balasubramanian     printf("Success. API version is %ld\n", omp_version);
1173*d2a6e165SVignesh Balasubramanian 
1174*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1175*d2a6e165SVignesh Balasubramanian   /*
1176*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1177*d2a6e165SVignesh Balasubramanian      longer valid;
1178*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1179*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1180*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1181*d2a6e165SVignesh Balasubramanian   */
1182*d2a6e165SVignesh Balasubramanian 
1183*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting stale handle or bad_input for NULL addr_handle.\n");
1184*d2a6e165SVignesh Balasubramanian   rc = ompd_get_omp_version(NULL, &omp_version);
1185*d2a6e165SVignesh Balasubramanian   if ((rc != ompd_rc_bad_input) && (rc != ompd_rc_stale_handle))
1186*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1187*d2a6e165SVignesh Balasubramanian   else
1188*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1189*d2a6e165SVignesh Balasubramanian 
1190*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or bad_input for NULL omp_version.\n");
1191*d2a6e165SVignesh Balasubramanian   rc = ompd_get_omp_version(addr_handle, NULL);
1192*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_bad_input)
1193*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1194*d2a6e165SVignesh Balasubramanian   else
1195*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1196*d2a6e165SVignesh Balasubramanian 
1197*d2a6e165SVignesh Balasubramanian   return Py_None;
1198*d2a6e165SVignesh Balasubramanian }
1199*d2a6e165SVignesh Balasubramanian 
1200*d2a6e165SVignesh Balasubramanian /*
1201*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_omp_version_string
1202*d2a6e165SVignesh Balasubramanian 
1203*d2a6e165SVignesh Balasubramanian   Program:
1204*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
1205*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
1206*d2a6e165SVignesh Balasubramanian     3.    int main () {
1207*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
1208*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
1209*d2a6e165SVignesh Balasubramanian     6.        {
1210*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
1211*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
1212*d2a6e165SVignesh Balasubramanian     8.        }
1213*d2a6e165SVignesh Balasubramanian     9.        return 0;
1214*d2a6e165SVignesh Balasubramanian     10.   }
1215*d2a6e165SVignesh Balasubramanian 
1216*d2a6e165SVignesh Balasubramanian   GDB Commands:
1217*d2a6e165SVignesh Balasubramanian     ompd init
1218*d2a6e165SVignesh Balasubramanian     b 7
1219*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_omp_version_string
1220*d2a6e165SVignesh Balasubramanian */
test_ompd_get_omp_version_string(PyObject * self,PyObject * args)1221*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_omp_version_string(PyObject *self, PyObject *args) {
1222*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_omp_version_string\" ...\n");
1223*d2a6e165SVignesh Balasubramanian 
1224*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
1225*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
1226*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
1227*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
1228*d2a6e165SVignesh Balasubramanian 
1229*d2a6e165SVignesh Balasubramanian   const char *string;
1230*d2a6e165SVignesh Balasubramanian 
1231*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1232*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_omp_version_string(addr_handle, &string);
1233*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1234*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1235*d2a6e165SVignesh Balasubramanian     return Py_None;
1236*d2a6e165SVignesh Balasubramanian   } else
1237*d2a6e165SVignesh Balasubramanian     printf("Success. API version is %s\n", string);
1238*d2a6e165SVignesh Balasubramanian 
1239*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1240*d2a6e165SVignesh Balasubramanian   /*
1241*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1242*d2a6e165SVignesh Balasubramanian      longer valid;
1243*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1244*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1245*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1246*d2a6e165SVignesh Balasubramanian   */
1247*d2a6e165SVignesh Balasubramanian 
1248*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting stale handle or bad_input for NULL addr_handle.\n");
1249*d2a6e165SVignesh Balasubramanian   rc = ompd_get_omp_version_string(NULL, &string);
1250*d2a6e165SVignesh Balasubramanian   if ((rc != ompd_rc_bad_input) && (rc != ompd_rc_stale_handle))
1251*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1252*d2a6e165SVignesh Balasubramanian   else
1253*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1254*d2a6e165SVignesh Balasubramanian 
1255*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or bad_input for NULL omp_version.\n");
1256*d2a6e165SVignesh Balasubramanian   rc = ompd_get_omp_version_string(addr_handle, NULL);
1257*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_bad_input)
1258*d2a6e165SVignesh Balasubramanian     printf("Failed, with return code = %d\n", rc);
1259*d2a6e165SVignesh Balasubramanian   else
1260*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1261*d2a6e165SVignesh Balasubramanian 
1262*d2a6e165SVignesh Balasubramanian   return Py_None;
1263*d2a6e165SVignesh Balasubramanian }
1264*d2a6e165SVignesh Balasubramanian 
1265*d2a6e165SVignesh Balasubramanian /*
1266*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_curr_task_handle
1267*d2a6e165SVignesh Balasubramanian 
1268*d2a6e165SVignesh Balasubramanian   Program:
1269*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1270*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1271*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1272*d2a6e165SVignesh Balasubramanian     4 {
1273*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1274*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1275*d2a6e165SVignesh Balasubramanian     7     return num;
1276*d2a6e165SVignesh Balasubramanian     8   else {
1277*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1278*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1279*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1280*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1281*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1282*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1283*d2a6e165SVignesh Balasubramanian     15     }
1284*d2a6e165SVignesh Balasubramanian     16 }
1285*d2a6e165SVignesh Balasubramanian     17
1286*d2a6e165SVignesh Balasubramanian     18 int main () {
1287*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1288*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1289*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1290*d2a6e165SVignesh Balasubramanian     22     {
1291*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1292*d2a6e165SVignesh Balasubramanian     24     }
1293*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1294*d2a6e165SVignesh Balasubramanian     26    return 0;
1295*d2a6e165SVignesh Balasubramanian     27 }
1296*d2a6e165SVignesh Balasubramanian 
1297*d2a6e165SVignesh Balasubramanian   GDB Commands:
1298*d2a6e165SVignesh Balasubramanian     ompd init
1299*d2a6e165SVignesh Balasubramanian     b 10
1300*d2a6e165SVignesh Balasubramanian     c
1301*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_curr_task_handle
1302*d2a6e165SVignesh Balasubramanian */
1303*d2a6e165SVignesh Balasubramanian 
test_ompd_get_curr_task_handle(PyObject * self,PyObject * args)1304*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_curr_task_handle(PyObject *self, PyObject *args) {
1305*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_curr_task_handle\"...\n");
1306*d2a6e165SVignesh Balasubramanian 
1307*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy = PyTuple_GetItem(args, 0);
1308*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle =
1309*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy,
1310*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
1311*d2a6e165SVignesh Balasubramanian 
1312*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle;
1313*d2a6e165SVignesh Balasubramanian 
1314*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1315*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_curr_task_handle(thread_handle, &task_handle);
1316*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_unavailable) {
1317*d2a6e165SVignesh Balasubramanian     // ompd_rc_unavailable if the thread is not currently executing a task
1318*d2a6e165SVignesh Balasubramanian 
1319*d2a6e165SVignesh Balasubramanian     printf(
1320*d2a6e165SVignesh Balasubramanian         "Success. Return code is ompd_rc_unavailable, Not executing a task.\n");
1321*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
1322*d2a6e165SVignesh Balasubramanian     return Py_None;
1323*d2a6e165SVignesh Balasubramanian   } else if (rc == ompd_rc_stale_handle) {
1324*d2a6e165SVignesh Balasubramanian     printf("Return code is stale_handle, may be in non parallel region.\n");
1325*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
1326*d2a6e165SVignesh Balasubramanian     return Py_None;
1327*d2a6e165SVignesh Balasubramanian   } else if (rc != ompd_rc_ok)
1328*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1329*d2a6e165SVignesh Balasubramanian   else
1330*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1331*d2a6e165SVignesh Balasubramanian 
1332*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1333*d2a6e165SVignesh Balasubramanian   /*
1334*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1335*d2a6e165SVignesh Balasubramanian      longer valid;
1336*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1337*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1338*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1339*d2a6e165SVignesh Balasubramanian   */
1340*d2a6e165SVignesh Balasubramanian 
1341*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL parallel_handle.\n");
1342*d2a6e165SVignesh Balasubramanian   rc = ompd_get_curr_task_handle(thread_handle, NULL);
1343*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1344*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1345*d2a6e165SVignesh Balasubramanian   else
1346*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1347*d2a6e165SVignesh Balasubramanian 
1348*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
1349*d2a6e165SVignesh Balasubramanian          "thread_handle.\n");
1350*d2a6e165SVignesh Balasubramanian   rc = ompd_get_curr_task_handle(NULL, &task_handle);
1351*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1352*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1353*d2a6e165SVignesh Balasubramanian   else
1354*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1355*d2a6e165SVignesh Balasubramanian 
1356*d2a6e165SVignesh Balasubramanian   return Py_None;
1357*d2a6e165SVignesh Balasubramanian }
1358*d2a6e165SVignesh Balasubramanian 
1359*d2a6e165SVignesh Balasubramanian /*
1360*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_task_parallel_handle
1361*d2a6e165SVignesh Balasubramanian 
1362*d2a6e165SVignesh Balasubramanian   Program:
1363*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1364*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1365*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1366*d2a6e165SVignesh Balasubramanian     4 {
1367*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1368*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1369*d2a6e165SVignesh Balasubramanian     7     return num;
1370*d2a6e165SVignesh Balasubramanian     8   else {
1371*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1372*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1373*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1374*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1375*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1376*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1377*d2a6e165SVignesh Balasubramanian     15     }
1378*d2a6e165SVignesh Balasubramanian     16 }
1379*d2a6e165SVignesh Balasubramanian     17
1380*d2a6e165SVignesh Balasubramanian     18 int main () {
1381*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1382*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1383*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1384*d2a6e165SVignesh Balasubramanian     22     {
1385*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1386*d2a6e165SVignesh Balasubramanian     24     }
1387*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1388*d2a6e165SVignesh Balasubramanian     26    return 0;
1389*d2a6e165SVignesh Balasubramanian     27 }
1390*d2a6e165SVignesh Balasubramanian 
1391*d2a6e165SVignesh Balasubramanian   GDB Commands:
1392*d2a6e165SVignesh Balasubramanian     ompd init
1393*d2a6e165SVignesh Balasubramanian     b 10
1394*d2a6e165SVignesh Balasubramanian     c
1395*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_task_parallel_handle
1396*d2a6e165SVignesh Balasubramanian */
test_ompd_get_task_parallel_handle(PyObject * self,PyObject * args)1397*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_task_parallel_handle(PyObject *self, PyObject *args) {
1398*d2a6e165SVignesh Balasubramanian 
1399*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_task_parallel_handle\"...\n");
1400*d2a6e165SVignesh Balasubramanian 
1401*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy = PyTuple_GetItem(args, 0);
1402*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle =
1403*d2a6e165SVignesh Balasubramanian       PyCapsule_GetPointer(taskHandlePy, "TaskHandle");
1404*d2a6e165SVignesh Balasubramanian 
1405*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *task_parallel_handle;
1406*d2a6e165SVignesh Balasubramanian 
1407*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1408*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc =
1409*d2a6e165SVignesh Balasubramanian       ompd_get_task_parallel_handle(task_handle, &task_parallel_handle);
1410*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1411*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1412*d2a6e165SVignesh Balasubramanian     return Py_None;
1413*d2a6e165SVignesh Balasubramanian   } else
1414*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1415*d2a6e165SVignesh Balasubramanian 
1416*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1417*d2a6e165SVignesh Balasubramanian   /*
1418*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1419*d2a6e165SVignesh Balasubramanian      longer valid;
1420*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1421*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1422*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1423*d2a6e165SVignesh Balasubramanian   */
1424*d2a6e165SVignesh Balasubramanian 
1425*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL task_parallel_handle.\n");
1426*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_parallel_handle(task_handle, NULL);
1427*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1428*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1429*d2a6e165SVignesh Balasubramanian   else
1430*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1431*d2a6e165SVignesh Balasubramanian 
1432*d2a6e165SVignesh Balasubramanian   printf(
1433*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale_handle for NULL task_handle.\n");
1434*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_parallel_handle(NULL, &task_parallel_handle);
1435*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1436*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1437*d2a6e165SVignesh Balasubramanian   else
1438*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1439*d2a6e165SVignesh Balasubramanian 
1440*d2a6e165SVignesh Balasubramanian   return Py_None;
1441*d2a6e165SVignesh Balasubramanian }
1442*d2a6e165SVignesh Balasubramanian 
1443*d2a6e165SVignesh Balasubramanian /*
1444*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_generating_task_handle
1445*d2a6e165SVignesh Balasubramanian 
1446*d2a6e165SVignesh Balasubramanian   Program:
1447*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1448*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1449*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1450*d2a6e165SVignesh Balasubramanian     4 {
1451*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1452*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1453*d2a6e165SVignesh Balasubramanian     7     return num;
1454*d2a6e165SVignesh Balasubramanian     8   else {
1455*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1456*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1457*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1458*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1459*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1460*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1461*d2a6e165SVignesh Balasubramanian     15     }
1462*d2a6e165SVignesh Balasubramanian     16 }
1463*d2a6e165SVignesh Balasubramanian     17
1464*d2a6e165SVignesh Balasubramanian     18 int main () {
1465*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1466*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1467*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1468*d2a6e165SVignesh Balasubramanian     22     {
1469*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1470*d2a6e165SVignesh Balasubramanian     24     }
1471*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1472*d2a6e165SVignesh Balasubramanian     26    return 0;
1473*d2a6e165SVignesh Balasubramanian     27 }
1474*d2a6e165SVignesh Balasubramanian 
1475*d2a6e165SVignesh Balasubramanian   GDB Commands:
1476*d2a6e165SVignesh Balasubramanian     ompd init
1477*d2a6e165SVignesh Balasubramanian     b 10
1478*d2a6e165SVignesh Balasubramanian     c
1479*d2a6e165SVignesh Balasubramanian     c // may or may not be needed
1480*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_generating_task_handle
1481*d2a6e165SVignesh Balasubramanian */
test_ompd_get_generating_task_handle(PyObject * self,PyObject * args)1482*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_generating_task_handle(PyObject *self, PyObject *args) {
1483*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_generating_task_handle\"...\n");
1484*d2a6e165SVignesh Balasubramanian 
1485*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy = PyTuple_GetItem(args, 0);
1486*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle =
1487*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy, "TaskHandle"));
1488*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *generating_task_handle;
1489*d2a6e165SVignesh Balasubramanian 
1490*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1491*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc =
1492*d2a6e165SVignesh Balasubramanian       ompd_get_generating_task_handle(task_handle, &generating_task_handle);
1493*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_unavailable) {
1494*d2a6e165SVignesh Balasubramanian     // ompd_rc_unavailable if no generating task handle exists.
1495*d2a6e165SVignesh Balasubramanian     printf("Success. Return code is ompd_rc_unavailable\n");
1496*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
1497*d2a6e165SVignesh Balasubramanian     return Py_None;
1498*d2a6e165SVignesh Balasubramanian   } else if (rc != ompd_rc_ok) {
1499*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1500*d2a6e165SVignesh Balasubramanian     return Py_None;
1501*d2a6e165SVignesh Balasubramanian   } else
1502*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1503*d2a6e165SVignesh Balasubramanian 
1504*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1505*d2a6e165SVignesh Balasubramanian   /*
1506*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1507*d2a6e165SVignesh Balasubramanian      longer valid;
1508*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1509*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1510*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1511*d2a6e165SVignesh Balasubramanian   */
1512*d2a6e165SVignesh Balasubramanian 
1513*d2a6e165SVignesh Balasubramanian   printf(
1514*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_bad_input for NULL generating_task_handle.\n");
1515*d2a6e165SVignesh Balasubramanian   rc = ompd_get_generating_task_handle(task_handle, NULL);
1516*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1517*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1518*d2a6e165SVignesh Balasubramanian   else
1519*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1520*d2a6e165SVignesh Balasubramanian 
1521*d2a6e165SVignesh Balasubramanian   printf(
1522*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale_handle for NULL task_handle.\n");
1523*d2a6e165SVignesh Balasubramanian   rc = ompd_get_generating_task_handle(NULL, &generating_task_handle);
1524*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1525*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1526*d2a6e165SVignesh Balasubramanian   else
1527*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1528*d2a6e165SVignesh Balasubramanian 
1529*d2a6e165SVignesh Balasubramanian   return Py_None;
1530*d2a6e165SVignesh Balasubramanian }
1531*d2a6e165SVignesh Balasubramanian 
1532*d2a6e165SVignesh Balasubramanian /*
1533*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_scheduling_task_handle
1534*d2a6e165SVignesh Balasubramanian 
1535*d2a6e165SVignesh Balasubramanian   Program:
1536*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1537*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1538*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1539*d2a6e165SVignesh Balasubramanian     4 {
1540*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1541*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1542*d2a6e165SVignesh Balasubramanian     7     return num;
1543*d2a6e165SVignesh Balasubramanian     8   else {
1544*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1545*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1546*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1547*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1548*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1549*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1550*d2a6e165SVignesh Balasubramanian     15     }
1551*d2a6e165SVignesh Balasubramanian     16 }
1552*d2a6e165SVignesh Balasubramanian     17
1553*d2a6e165SVignesh Balasubramanian     18 int main () {
1554*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1555*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1556*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1557*d2a6e165SVignesh Balasubramanian     22     {
1558*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1559*d2a6e165SVignesh Balasubramanian     24     }
1560*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1561*d2a6e165SVignesh Balasubramanian     26    return 0;
1562*d2a6e165SVignesh Balasubramanian     27 }
1563*d2a6e165SVignesh Balasubramanian 
1564*d2a6e165SVignesh Balasubramanian   GDB Commands:
1565*d2a6e165SVignesh Balasubramanian     ompd init
1566*d2a6e165SVignesh Balasubramanian     b 10
1567*d2a6e165SVignesh Balasubramanian     c
1568*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_get_scheduling_task_handle
1569*d2a6e165SVignesh Balasubramanian */
test_ompd_get_scheduling_task_handle(PyObject * self,PyObject * args)1570*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_scheduling_task_handle(PyObject *self, PyObject *args) {
1571*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_scheduling_task_handle\"...\n");
1572*d2a6e165SVignesh Balasubramanian 
1573*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy = PyTuple_GetItem(args, 0);
1574*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle =
1575*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy, "TaskHandle"));
1576*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *scheduling_task_handle;
1577*d2a6e165SVignesh Balasubramanian 
1578*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1579*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc =
1580*d2a6e165SVignesh Balasubramanian       ompd_get_scheduling_task_handle(task_handle, &scheduling_task_handle);
1581*d2a6e165SVignesh Balasubramanian   if (rc == ompd_rc_unavailable) {
1582*d2a6e165SVignesh Balasubramanian     // ompd_rc_unavailable if no generating task handle exists.
1583*d2a6e165SVignesh Balasubramanian     printf(
1584*d2a6e165SVignesh Balasubramanian         "Success. Return code is ompd_rc_unavailable, No scheduling task.\n");
1585*d2a6e165SVignesh Balasubramanian     printf("No more testing is possible.\n");
1586*d2a6e165SVignesh Balasubramanian     return Py_None;
1587*d2a6e165SVignesh Balasubramanian   } else if (rc != ompd_rc_ok) {
1588*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1589*d2a6e165SVignesh Balasubramanian     return Py_None;
1590*d2a6e165SVignesh Balasubramanian   } else
1591*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1592*d2a6e165SVignesh Balasubramanian 
1593*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1594*d2a6e165SVignesh Balasubramanian   /*
1595*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1596*d2a6e165SVignesh Balasubramanian      longer valid;
1597*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1598*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1599*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1600*d2a6e165SVignesh Balasubramanian   */
1601*d2a6e165SVignesh Balasubramanian 
1602*d2a6e165SVignesh Balasubramanian   printf(
1603*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_bad_input for NULL scheduling_task_handle.\n");
1604*d2a6e165SVignesh Balasubramanian   rc = ompd_get_scheduling_task_handle(task_handle, NULL);
1605*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1606*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1607*d2a6e165SVignesh Balasubramanian   else
1608*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1609*d2a6e165SVignesh Balasubramanian 
1610*d2a6e165SVignesh Balasubramanian   printf(
1611*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale_handle for NULL task_handle.\n");
1612*d2a6e165SVignesh Balasubramanian   rc = ompd_get_scheduling_task_handle(NULL, &scheduling_task_handle);
1613*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1614*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1615*d2a6e165SVignesh Balasubramanian   else
1616*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1617*d2a6e165SVignesh Balasubramanian 
1618*d2a6e165SVignesh Balasubramanian   return Py_None;
1619*d2a6e165SVignesh Balasubramanian }
1620*d2a6e165SVignesh Balasubramanian 
1621*d2a6e165SVignesh Balasubramanian /*
1622*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_task_in_parallel
1623*d2a6e165SVignesh Balasubramanian 
1624*d2a6e165SVignesh Balasubramanian   Program:
1625*d2a6e165SVignesh Balasubramanian   Program:
1626*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
1627*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
1628*d2a6e165SVignesh Balasubramanian     3.    int main () {
1629*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(4);
1630*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
1631*d2a6e165SVignesh Balasubramanian     6.        {
1632*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
1633*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
1634*d2a6e165SVignesh Balasubramanian     8.        }
1635*d2a6e165SVignesh Balasubramanian     9.        return 0;
1636*d2a6e165SVignesh Balasubramanian     10.   }
1637*d2a6e165SVignesh Balasubramanian 
1638*d2a6e165SVignesh Balasubramanian   GDB Commands:
1639*d2a6e165SVignesh Balasubramanian     ompd init
1640*d2a6e165SVignesh Balasubramanian     b 7
1641*d2a6e165SVignesh Balasubramanian     c
1642*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_task_in_parallel
1643*d2a6e165SVignesh Balasubramanian */
test_ompd_get_task_in_parallel(PyObject * self,PyObject * args)1644*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_task_in_parallel(PyObject *self, PyObject *args) {
1645*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_task_in_parallel\"...\n");
1646*d2a6e165SVignesh Balasubramanian 
1647*d2a6e165SVignesh Balasubramanian   PyObject *parallelHandlePy = PyTuple_GetItem(args, 0);
1648*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle =
1649*d2a6e165SVignesh Balasubramanian       (ompd_parallel_handle_t *)(PyCapsule_GetPointer(parallelHandlePy,
1650*d2a6e165SVignesh Balasubramanian                                                       "ParallelHandle"));
1651*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle;
1652*d2a6e165SVignesh Balasubramanian 
1653*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1654*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_task_in_parallel(
1655*d2a6e165SVignesh Balasubramanian       parallel_handle, 1 /* lesser than team-size-var*/, &task_handle);
1656*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1657*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1658*d2a6e165SVignesh Balasubramanian     return Py_None;
1659*d2a6e165SVignesh Balasubramanian   } else
1660*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1661*d2a6e165SVignesh Balasubramanian 
1662*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input if the thread_num argument is greater than or equal to
1663*d2a6e165SVignesh Balasubramanian   // the team-size-var ICV or negative
1664*d2a6e165SVignesh Balasubramanian   printf("Test: Invalid thread num (199).\n");
1665*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_in_parallel(parallel_handle, 199, &task_handle);
1666*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1667*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1668*d2a6e165SVignesh Balasubramanian   else
1669*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1670*d2a6e165SVignesh Balasubramanian 
1671*d2a6e165SVignesh Balasubramanian   printf("Test: Invalid thread num (-5).\n");
1672*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_in_parallel(parallel_handle, -5, &task_handle);
1673*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1674*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1675*d2a6e165SVignesh Balasubramanian   else
1676*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1677*d2a6e165SVignesh Balasubramanian 
1678*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1679*d2a6e165SVignesh Balasubramanian   /*
1680*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1681*d2a6e165SVignesh Balasubramanian      longer valid;
1682*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1683*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1684*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1685*d2a6e165SVignesh Balasubramanian   */
1686*d2a6e165SVignesh Balasubramanian 
1687*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL task_handle.\n");
1688*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_in_parallel(parallel_handle, 1, NULL);
1689*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1690*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1691*d2a6e165SVignesh Balasubramanian   else
1692*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1693*d2a6e165SVignesh Balasubramanian 
1694*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
1695*d2a6e165SVignesh Balasubramanian          "parallel_handle.\n");
1696*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_in_parallel(NULL, 1, &task_handle);
1697*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1698*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1699*d2a6e165SVignesh Balasubramanian   else
1700*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1701*d2a6e165SVignesh Balasubramanian 
1702*d2a6e165SVignesh Balasubramanian   return Py_None;
1703*d2a6e165SVignesh Balasubramanian }
1704*d2a6e165SVignesh Balasubramanian 
1705*d2a6e165SVignesh Balasubramanian /*
1706*d2a6e165SVignesh Balasubramanian   Test API: ompd_rel_task_handle
1707*d2a6e165SVignesh Balasubramanian 
1708*d2a6e165SVignesh Balasubramanian   Program:
1709*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1710*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1711*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1712*d2a6e165SVignesh Balasubramanian     4 {
1713*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1714*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1715*d2a6e165SVignesh Balasubramanian     7     return num;
1716*d2a6e165SVignesh Balasubramanian     8   else {
1717*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1718*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1719*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1720*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1721*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1722*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1723*d2a6e165SVignesh Balasubramanian     15     }
1724*d2a6e165SVignesh Balasubramanian     16 }
1725*d2a6e165SVignesh Balasubramanian     17
1726*d2a6e165SVignesh Balasubramanian     18 int main () {
1727*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1728*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1729*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1730*d2a6e165SVignesh Balasubramanian     22     {
1731*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1732*d2a6e165SVignesh Balasubramanian     24     }
1733*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1734*d2a6e165SVignesh Balasubramanian     26    return 0;
1735*d2a6e165SVignesh Balasubramanian     27 }
1736*d2a6e165SVignesh Balasubramanian 
1737*d2a6e165SVignesh Balasubramanian   GDB Commands:
1738*d2a6e165SVignesh Balasubramanian     ompd init
1739*d2a6e165SVignesh Balasubramanian     b 10
1740*d2a6e165SVignesh Balasubramanian     c
1741*d2a6e165SVignesh Balasubramanian     ompdtestapi ompd_rel_task_handle
1742*d2a6e165SVignesh Balasubramanian */
test_ompd_rel_task_handle(PyObject * self,PyObject * noargs)1743*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_rel_task_handle(PyObject *self, PyObject *noargs) {
1744*d2a6e165SVignesh Balasubramanian   printf("Testing Not enabled for \"ompd_rel_task_handle\".\n");
1745*d2a6e165SVignesh Balasubramanian   printf("Disabled.\n");
1746*d2a6e165SVignesh Balasubramanian 
1747*d2a6e165SVignesh Balasubramanian   return Py_None;
1748*d2a6e165SVignesh Balasubramanian }
1749*d2a6e165SVignesh Balasubramanian 
1750*d2a6e165SVignesh Balasubramanian /*
1751*d2a6e165SVignesh Balasubramanian   Test API: ompd_task_handle_compare
1752*d2a6e165SVignesh Balasubramanian 
1753*d2a6e165SVignesh Balasubramanian   Program:
1754*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1755*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1756*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1757*d2a6e165SVignesh Balasubramanian     4 {
1758*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1759*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1760*d2a6e165SVignesh Balasubramanian     7     return num;
1761*d2a6e165SVignesh Balasubramanian     8   else {
1762*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1763*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1764*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1765*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1766*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1767*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1768*d2a6e165SVignesh Balasubramanian     15     }
1769*d2a6e165SVignesh Balasubramanian     16 }
1770*d2a6e165SVignesh Balasubramanian     17
1771*d2a6e165SVignesh Balasubramanian     18 int main () {
1772*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1773*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1774*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1775*d2a6e165SVignesh Balasubramanian     22     {
1776*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1777*d2a6e165SVignesh Balasubramanian     24     }
1778*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1779*d2a6e165SVignesh Balasubramanian     26    return 0;
1780*d2a6e165SVignesh Balasubramanian     27 }
1781*d2a6e165SVignesh Balasubramanian 
1782*d2a6e165SVignesh Balasubramanian   GDB Commands:
1783*d2a6e165SVignesh Balasubramanian     ompd init
1784*d2a6e165SVignesh Balasubramanian     b 10
1785*d2a6e165SVignesh Balasubramanian     c
1786*d2a6e165SVignesh Balasubramanian     c
1787*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_task_handle_compare
1788*d2a6e165SVignesh Balasubramanian */
test_ompd_task_handle_compare(PyObject * self,PyObject * args)1789*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_task_handle_compare(PyObject *self, PyObject *args) {
1790*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_task_handle_compare\"...\n");
1791*d2a6e165SVignesh Balasubramanian 
1792*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy1 = PyTuple_GetItem(args, 0);
1793*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle1 =
1794*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy1, "TaskHandle"));
1795*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy2 = PyTuple_GetItem(args, 1);
1796*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle2 =
1797*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy2, "TaskHandle"));
1798*d2a6e165SVignesh Balasubramanian 
1799*d2a6e165SVignesh Balasubramanian   int cmp_value;
1800*d2a6e165SVignesh Balasubramanian 
1801*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1802*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc =
1803*d2a6e165SVignesh Balasubramanian       ompd_task_handle_compare(task_handle1, task_handle2, &cmp_value);
1804*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1805*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1806*d2a6e165SVignesh Balasubramanian     return Py_None;
1807*d2a6e165SVignesh Balasubramanian   } else
1808*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1809*d2a6e165SVignesh Balasubramanian 
1810*d2a6e165SVignesh Balasubramanian   if (cmp_value == 0) {
1811*d2a6e165SVignesh Balasubramanian     printf("Task Handles are Same.\n");
1812*d2a6e165SVignesh Balasubramanian   } else {
1813*d2a6e165SVignesh Balasubramanian     // a value less than, equal to, or greater than 0 indicates that the task
1814*d2a6e165SVignesh Balasubramanian     // that corresponds to task_handle_1 is, respectively, less than, equal to,
1815*d2a6e165SVignesh Balasubramanian     // or greater than the task that corresponds to task_handle_2.
1816*d2a6e165SVignesh Balasubramanian     if (cmp_value <= 0) {
1817*d2a6e165SVignesh Balasubramanian       printf("Task handle 1 is lesser than handle 2, cmp_val = %d\n",
1818*d2a6e165SVignesh Balasubramanian              cmp_value);
1819*d2a6e165SVignesh Balasubramanian       printf("Test: Changing the order.\n");
1820*d2a6e165SVignesh Balasubramanian       rc = ompd_task_handle_compare(task_handle2, task_handle1, &cmp_value);
1821*d2a6e165SVignesh Balasubramanian       if (rc != ompd_rc_ok) {
1822*d2a6e165SVignesh Balasubramanian         printf("Failed. with return code = %d\n", rc);
1823*d2a6e165SVignesh Balasubramanian         return Py_None;
1824*d2a6e165SVignesh Balasubramanian       }
1825*d2a6e165SVignesh Balasubramanian       if (cmp_value >= 0)
1826*d2a6e165SVignesh Balasubramanian         printf("Success now cmp_value is greater, %d.\n", cmp_value);
1827*d2a6e165SVignesh Balasubramanian       else
1828*d2a6e165SVignesh Balasubramanian         printf("Failed.\n");
1829*d2a6e165SVignesh Balasubramanian     } else {
1830*d2a6e165SVignesh Balasubramanian       printf("Task 1 is greater than handle 2.\n");
1831*d2a6e165SVignesh Balasubramanian       printf("Test: Changing the order.\n");
1832*d2a6e165SVignesh Balasubramanian       rc = ompd_task_handle_compare(task_handle2, task_handle1, &cmp_value);
1833*d2a6e165SVignesh Balasubramanian       if (rc != ompd_rc_ok) {
1834*d2a6e165SVignesh Balasubramanian         printf("Failed. with return code = %d\n", rc);
1835*d2a6e165SVignesh Balasubramanian         return Py_None;
1836*d2a6e165SVignesh Balasubramanian       }
1837*d2a6e165SVignesh Balasubramanian       if (cmp_value <= 0)
1838*d2a6e165SVignesh Balasubramanian         printf("Success now cmp_value is lesser, %d.\n", cmp_value);
1839*d2a6e165SVignesh Balasubramanian       else
1840*d2a6e165SVignesh Balasubramanian         printf("Failed.\n");
1841*d2a6e165SVignesh Balasubramanian     }
1842*d2a6e165SVignesh Balasubramanian 
1843*d2a6e165SVignesh Balasubramanian     // Random checks with  null and invalid args.
1844*d2a6e165SVignesh Balasubramanian     /*
1845*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1846*d2a6e165SVignesh Balasubramanian      longer valid;
1847*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1848*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1849*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1850*d2a6e165SVignesh Balasubramanian     */
1851*d2a6e165SVignesh Balasubramanian 
1852*d2a6e165SVignesh Balasubramanian     printf("Test: Expecting ompd_rc_bad_input for NULL cmp_value.\n");
1853*d2a6e165SVignesh Balasubramanian     rc = ompd_task_handle_compare(task_handle2, task_handle1, NULL);
1854*d2a6e165SVignesh Balasubramanian     if (rc != ompd_rc_bad_input)
1855*d2a6e165SVignesh Balasubramanian       printf("Failed. with return code = %d\n", rc);
1856*d2a6e165SVignesh Balasubramanian     else
1857*d2a6e165SVignesh Balasubramanian       printf("Success.\n");
1858*d2a6e165SVignesh Balasubramanian 
1859*d2a6e165SVignesh Balasubramanian     printf("Test: Expecting ompd_rc_error or stale_handle for NULL "
1860*d2a6e165SVignesh Balasubramanian            "task_handle.\n");
1861*d2a6e165SVignesh Balasubramanian     rc = ompd_task_handle_compare(NULL, task_handle1, &cmp_value);
1862*d2a6e165SVignesh Balasubramanian     if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1863*d2a6e165SVignesh Balasubramanian       printf("Failed. with return code = %d\n", rc);
1864*d2a6e165SVignesh Balasubramanian     else
1865*d2a6e165SVignesh Balasubramanian       printf("Success.\n");
1866*d2a6e165SVignesh Balasubramanian   }
1867*d2a6e165SVignesh Balasubramanian 
1868*d2a6e165SVignesh Balasubramanian   return Py_None;
1869*d2a6e165SVignesh Balasubramanian }
1870*d2a6e165SVignesh Balasubramanian 
1871*d2a6e165SVignesh Balasubramanian /*
1872*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_task_function
1873*d2a6e165SVignesh Balasubramanian 
1874*d2a6e165SVignesh Balasubramanian   Program:
1875*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1876*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1877*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1878*d2a6e165SVignesh Balasubramanian     4 {
1879*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1880*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1881*d2a6e165SVignesh Balasubramanian     7     return num;
1882*d2a6e165SVignesh Balasubramanian     8   else {
1883*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1884*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1885*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1886*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1887*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1888*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1889*d2a6e165SVignesh Balasubramanian     15     }
1890*d2a6e165SVignesh Balasubramanian     16 }
1891*d2a6e165SVignesh Balasubramanian     17
1892*d2a6e165SVignesh Balasubramanian     18 int main () {
1893*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1894*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1895*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1896*d2a6e165SVignesh Balasubramanian     22     {
1897*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1898*d2a6e165SVignesh Balasubramanian     24     }
1899*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1900*d2a6e165SVignesh Balasubramanian     26    return 0;
1901*d2a6e165SVignesh Balasubramanian     27 }
1902*d2a6e165SVignesh Balasubramanian 
1903*d2a6e165SVignesh Balasubramanian   GDB Commands:
1904*d2a6e165SVignesh Balasubramanian     ompd init
1905*d2a6e165SVignesh Balasubramanian     b 10
1906*d2a6e165SVignesh Balasubramanian     c
1907*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_task_function
1908*d2a6e165SVignesh Balasubramanian */
test_ompd_get_task_function(PyObject * self,PyObject * args)1909*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_task_function(PyObject *self, PyObject *args) {
1910*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_task_function\"...\n");
1911*d2a6e165SVignesh Balasubramanian 
1912*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy = PyTuple_GetItem(args, 0);
1913*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle =
1914*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy, "TaskHandle"));
1915*d2a6e165SVignesh Balasubramanian 
1916*d2a6e165SVignesh Balasubramanian   ompd_address_t entry_point;
1917*d2a6e165SVignesh Balasubramanian 
1918*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
1919*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_task_function(task_handle, &entry_point);
1920*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
1921*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1922*d2a6e165SVignesh Balasubramanian     return Py_None;
1923*d2a6e165SVignesh Balasubramanian   } else
1924*d2a6e165SVignesh Balasubramanian     printf("Success. Entry point is %lx.\n", entry_point.address);
1925*d2a6e165SVignesh Balasubramanian 
1926*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
1927*d2a6e165SVignesh Balasubramanian   /*
1928*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
1929*d2a6e165SVignesh Balasubramanian      longer valid;
1930*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
1931*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
1932*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
1933*d2a6e165SVignesh Balasubramanian   */
1934*d2a6e165SVignesh Balasubramanian 
1935*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL entry_point.\n");
1936*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_function(task_handle, NULL);
1937*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
1938*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1939*d2a6e165SVignesh Balasubramanian   else
1940*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1941*d2a6e165SVignesh Balasubramanian 
1942*d2a6e165SVignesh Balasubramanian   printf(
1943*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale_handle for NULL task_handle.\n");
1944*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_function(NULL, &entry_point);
1945*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
1946*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
1947*d2a6e165SVignesh Balasubramanian   else
1948*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
1949*d2a6e165SVignesh Balasubramanian 
1950*d2a6e165SVignesh Balasubramanian   return Py_None;
1951*d2a6e165SVignesh Balasubramanian }
1952*d2a6e165SVignesh Balasubramanian 
1953*d2a6e165SVignesh Balasubramanian /*
1954*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_task_frame
1955*d2a6e165SVignesh Balasubramanian 
1956*d2a6e165SVignesh Balasubramanian   Program:
1957*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
1958*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
1959*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
1960*d2a6e165SVignesh Balasubramanian     4 {
1961*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
1962*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
1963*d2a6e165SVignesh Balasubramanian     7     return num;
1964*d2a6e165SVignesh Balasubramanian     8   else {
1965*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
1966*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
1967*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
1968*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
1969*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
1970*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
1971*d2a6e165SVignesh Balasubramanian     15     }
1972*d2a6e165SVignesh Balasubramanian     16 }
1973*d2a6e165SVignesh Balasubramanian     17
1974*d2a6e165SVignesh Balasubramanian     18 int main () {
1975*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
1976*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
1977*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
1978*d2a6e165SVignesh Balasubramanian     22     {
1979*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
1980*d2a6e165SVignesh Balasubramanian     24     }
1981*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
1982*d2a6e165SVignesh Balasubramanian     26    return 0;
1983*d2a6e165SVignesh Balasubramanian     27 }
1984*d2a6e165SVignesh Balasubramanian 
1985*d2a6e165SVignesh Balasubramanian   GDB Commands:
1986*d2a6e165SVignesh Balasubramanian     ompd init
1987*d2a6e165SVignesh Balasubramanian     b 10
1988*d2a6e165SVignesh Balasubramanian     c
1989*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_task_frame
1990*d2a6e165SVignesh Balasubramanian */
test_ompd_get_task_frame(PyObject * self,PyObject * args)1991*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_task_frame(PyObject *self, PyObject *args) {
1992*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_task_frame\"...\n");
1993*d2a6e165SVignesh Balasubramanian 
1994*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy = PyTuple_GetItem(args, 0);
1995*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle =
1996*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy, "TaskHandle"));
1997*d2a6e165SVignesh Balasubramanian 
1998*d2a6e165SVignesh Balasubramanian   ompd_frame_info_t exit_frame;
1999*d2a6e165SVignesh Balasubramanian   ompd_frame_info_t enter_frame;
2000*d2a6e165SVignesh Balasubramanian 
2001*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2002*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_task_frame(task_handle, &exit_frame, &enter_frame);
2003*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2004*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2005*d2a6e165SVignesh Balasubramanian     return Py_None;
2006*d2a6e165SVignesh Balasubramanian   } else
2007*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2008*d2a6e165SVignesh Balasubramanian 
2009*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
2010*d2a6e165SVignesh Balasubramanian   /*
2011*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
2012*d2a6e165SVignesh Balasubramanian      longer valid;
2013*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
2014*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
2015*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
2016*d2a6e165SVignesh Balasubramanian   */
2017*d2a6e165SVignesh Balasubramanian 
2018*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL exit and enter frame.\n");
2019*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_frame(task_handle, NULL, NULL);
2020*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2021*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2022*d2a6e165SVignesh Balasubramanian   else
2023*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2024*d2a6e165SVignesh Balasubramanian 
2025*d2a6e165SVignesh Balasubramanian   printf(
2026*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale handle for NULL task_handle.\n");
2027*d2a6e165SVignesh Balasubramanian   rc = ompd_get_task_frame(NULL, &exit_frame, &enter_frame);
2028*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
2029*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2030*d2a6e165SVignesh Balasubramanian   else
2031*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2032*d2a6e165SVignesh Balasubramanian 
2033*d2a6e165SVignesh Balasubramanian   return Py_None;
2034*d2a6e165SVignesh Balasubramanian }
2035*d2a6e165SVignesh Balasubramanian 
2036*d2a6e165SVignesh Balasubramanian /*
2037*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_state
2038*d2a6e165SVignesh Balasubramanian 
2039*d2a6e165SVignesh Balasubramanian   Program:
2040*d2a6e165SVignesh Balasubramanian   Program:
2041*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
2042*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
2043*d2a6e165SVignesh Balasubramanian     3.    int main () {
2044*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(4);
2045*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
2046*d2a6e165SVignesh Balasubramanian     6.        {
2047*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
2048*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
2049*d2a6e165SVignesh Balasubramanian     8.        }
2050*d2a6e165SVignesh Balasubramanian     9.        return 0;
2051*d2a6e165SVignesh Balasubramanian     10.   }
2052*d2a6e165SVignesh Balasubramanian 
2053*d2a6e165SVignesh Balasubramanian   GDB Commands:
2054*d2a6e165SVignesh Balasubramanian     ompd init
2055*d2a6e165SVignesh Balasubramanian     b 7
2056*d2a6e165SVignesh Balasubramanian     c
2057*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_state
2058*d2a6e165SVignesh Balasubramanian */
test_ompd_get_state(PyObject * self,PyObject * args)2059*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_state(PyObject *self, PyObject *args) {
2060*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_state\"...\n");
2061*d2a6e165SVignesh Balasubramanian 
2062*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy = PyTuple_GetItem(args, 0);
2063*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle =
2064*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy,
2065*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
2066*d2a6e165SVignesh Balasubramanian 
2067*d2a6e165SVignesh Balasubramanian   ompd_word_t state;
2068*d2a6e165SVignesh Balasubramanian   ompt_wait_id_t wait_id;
2069*d2a6e165SVignesh Balasubramanian 
2070*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2071*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_state(thread_handle, &state, &wait_id);
2072*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2073*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2074*d2a6e165SVignesh Balasubramanian     return Py_None;
2075*d2a6e165SVignesh Balasubramanian   } else
2076*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2077*d2a6e165SVignesh Balasubramanian 
2078*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
2079*d2a6e165SVignesh Balasubramanian   /*
2080*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
2081*d2a6e165SVignesh Balasubramanian      longer valid;
2082*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
2083*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
2084*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
2085*d2a6e165SVignesh Balasubramanian   */
2086*d2a6e165SVignesh Balasubramanian 
2087*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or stale handle for NULL "
2088*d2a6e165SVignesh Balasubramanian          "thread_handle.\n");
2089*d2a6e165SVignesh Balasubramanian   rc = ompd_get_state(NULL, &state, &wait_id);
2090*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
2091*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2092*d2a6e165SVignesh Balasubramanian   else
2093*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2094*d2a6e165SVignesh Balasubramanian 
2095*d2a6e165SVignesh Balasubramanian   return Py_None;
2096*d2a6e165SVignesh Balasubramanian }
2097*d2a6e165SVignesh Balasubramanian 
2098*d2a6e165SVignesh Balasubramanian /*
2099*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_display_control_vars
2100*d2a6e165SVignesh Balasubramanian 
2101*d2a6e165SVignesh Balasubramanian   Program:
2102*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
2103*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
2104*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
2105*d2a6e165SVignesh Balasubramanian     4 {
2106*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
2107*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
2108*d2a6e165SVignesh Balasubramanian     7     return num;
2109*d2a6e165SVignesh Balasubramanian     8   else {
2110*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
2111*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
2112*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
2113*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
2114*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
2115*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
2116*d2a6e165SVignesh Balasubramanian     15     }
2117*d2a6e165SVignesh Balasubramanian     16 }
2118*d2a6e165SVignesh Balasubramanian     17
2119*d2a6e165SVignesh Balasubramanian     18 int main () {
2120*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
2121*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
2122*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
2123*d2a6e165SVignesh Balasubramanian     22     {
2124*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
2125*d2a6e165SVignesh Balasubramanian     24     }
2126*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
2127*d2a6e165SVignesh Balasubramanian     26    return 0;
2128*d2a6e165SVignesh Balasubramanian     27 }
2129*d2a6e165SVignesh Balasubramanian 
2130*d2a6e165SVignesh Balasubramanian   GDB Commands:
2131*d2a6e165SVignesh Balasubramanian     ompd init
2132*d2a6e165SVignesh Balasubramanian     b 10
2133*d2a6e165SVignesh Balasubramanian     c
2134*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_display_control_vars
2135*d2a6e165SVignesh Balasubramanian */
test_ompd_get_display_control_vars(PyObject * self,PyObject * args)2136*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_display_control_vars(PyObject *self, PyObject *args) {
2137*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_display_control_vars\" ...\n");
2138*d2a6e165SVignesh Balasubramanian 
2139*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
2140*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
2141*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
2142*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
2143*d2a6e165SVignesh Balasubramanian 
2144*d2a6e165SVignesh Balasubramanian   const char *const *control_vars;
2145*d2a6e165SVignesh Balasubramanian 
2146*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2147*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_display_control_vars(addr_handle, &control_vars);
2148*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2149*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2150*d2a6e165SVignesh Balasubramanian     return Py_None;
2151*d2a6e165SVignesh Balasubramanian   } else
2152*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2153*d2a6e165SVignesh Balasubramanian 
2154*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
2155*d2a6e165SVignesh Balasubramanian   /*
2156*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
2157*d2a6e165SVignesh Balasubramanian      longer valid;
2158*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
2159*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
2160*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
2161*d2a6e165SVignesh Balasubramanian   */
2162*d2a6e165SVignesh Balasubramanian 
2163*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting stale handle or bad_input for NULL addr_handle.\n");
2164*d2a6e165SVignesh Balasubramanian   rc = ompd_get_display_control_vars(NULL, &control_vars);
2165*d2a6e165SVignesh Balasubramanian   if ((rc != ompd_rc_bad_input) && (rc != ompd_rc_stale_handle))
2166*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2167*d2a6e165SVignesh Balasubramanian   else
2168*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2169*d2a6e165SVignesh Balasubramanian 
2170*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error or bad_input for NULL control_vars.\n");
2171*d2a6e165SVignesh Balasubramanian   rc = ompd_get_display_control_vars(addr_handle, NULL);
2172*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_bad_input)
2173*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2174*d2a6e165SVignesh Balasubramanian   else
2175*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2176*d2a6e165SVignesh Balasubramanian 
2177*d2a6e165SVignesh Balasubramanian   return Py_None;
2178*d2a6e165SVignesh Balasubramanian }
2179*d2a6e165SVignesh Balasubramanian 
2180*d2a6e165SVignesh Balasubramanian /*
2181*d2a6e165SVignesh Balasubramanian   Test API: ompd_rel_display_control_vars
2182*d2a6e165SVignesh Balasubramanian 
2183*d2a6e165SVignesh Balasubramanian   Program:
2184*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
2185*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
2186*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
2187*d2a6e165SVignesh Balasubramanian     4 {
2188*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
2189*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
2190*d2a6e165SVignesh Balasubramanian     7     return num;
2191*d2a6e165SVignesh Balasubramanian     8   else {
2192*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
2193*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
2194*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
2195*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
2196*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
2197*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
2198*d2a6e165SVignesh Balasubramanian     15     }
2199*d2a6e165SVignesh Balasubramanian     16 }
2200*d2a6e165SVignesh Balasubramanian     17
2201*d2a6e165SVignesh Balasubramanian     18 int main () {
2202*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
2203*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
2204*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
2205*d2a6e165SVignesh Balasubramanian     22     {
2206*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
2207*d2a6e165SVignesh Balasubramanian     24     }
2208*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
2209*d2a6e165SVignesh Balasubramanian     26    return 0;
2210*d2a6e165SVignesh Balasubramanian     27 }
2211*d2a6e165SVignesh Balasubramanian 
2212*d2a6e165SVignesh Balasubramanian   GDB Commands:
2213*d2a6e165SVignesh Balasubramanian     ompd init
2214*d2a6e165SVignesh Balasubramanian     b 10
2215*d2a6e165SVignesh Balasubramanian     c
2216*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_rel_display_control_vars
2217*d2a6e165SVignesh Balasubramanian */
test_ompd_rel_display_control_vars(PyObject * self,PyObject * noargs)2218*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_rel_display_control_vars(PyObject *self, PyObject *noargs) {
2219*d2a6e165SVignesh Balasubramanian   printf("Testing Not enabled for \"ompd_rel_display_control_vars\".\n");
2220*d2a6e165SVignesh Balasubramanian   printf("Disabled.\n");
2221*d2a6e165SVignesh Balasubramanian 
2222*d2a6e165SVignesh Balasubramanian   return Py_None;
2223*d2a6e165SVignesh Balasubramanian }
2224*d2a6e165SVignesh Balasubramanian 
2225*d2a6e165SVignesh Balasubramanian /*
2226*d2a6e165SVignesh Balasubramanian    Test API: ompd_enumerate_icvs
2227*d2a6e165SVignesh Balasubramanian 
2228*d2a6e165SVignesh Balasubramanian   Program:
2229*d2a6e165SVignesh Balasubramanian   Program:
2230*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
2231*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
2232*d2a6e165SVignesh Balasubramanian     3.    int main () {
2233*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(2);
2234*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
2235*d2a6e165SVignesh Balasubramanian     6.        {
2236*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
2237*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
2238*d2a6e165SVignesh Balasubramanian     8.        }
2239*d2a6e165SVignesh Balasubramanian     9.        return 0;
2240*d2a6e165SVignesh Balasubramanian     10.   }
2241*d2a6e165SVignesh Balasubramanian 
2242*d2a6e165SVignesh Balasubramanian   GDB Commands:
2243*d2a6e165SVignesh Balasubramanian     ompd init
2244*d2a6e165SVignesh Balasubramanian     b 7
2245*d2a6e165SVignesh Balasubramanian     c
2246*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_enumerate_icvs
2247*d2a6e165SVignesh Balasubramanian */
2248*d2a6e165SVignesh Balasubramanian 
test_ompd_enumerate_icvs(PyObject * self,PyObject * args)2249*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_enumerate_icvs(PyObject *self, PyObject *args) {
2250*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_enumerate_icvs\"...\n");
2251*d2a6e165SVignesh Balasubramanian 
2252*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
2253*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
2254*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
2255*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
2256*d2a6e165SVignesh Balasubramanian 
2257*d2a6e165SVignesh Balasubramanian   ompd_icv_id_t current = 0; // To begin enumerating the ICVs, a tool should
2258*d2a6e165SVignesh Balasubramanian                              // pass ompd_icv_undefined as the value of current
2259*d2a6e165SVignesh Balasubramanian   ompd_icv_id_t next_id;
2260*d2a6e165SVignesh Balasubramanian   const char *next_icv_name;
2261*d2a6e165SVignesh Balasubramanian   ompd_scope_t next_scope;
2262*d2a6e165SVignesh Balasubramanian   int more;
2263*d2a6e165SVignesh Balasubramanian 
2264*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2265*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_enumerate_icvs(addr_handle, current, &next_id,
2266*d2a6e165SVignesh Balasubramanian                                      &next_icv_name, &next_scope, &more);
2267*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2268*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2269*d2a6e165SVignesh Balasubramanian     return Py_None;
2270*d2a6e165SVignesh Balasubramanian   } else
2271*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2272*d2a6e165SVignesh Balasubramanian 
2273*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input if an unknown value is provided in current
2274*d2a6e165SVignesh Balasubramanian   printf("Test: Unknown current value.\n");
2275*d2a6e165SVignesh Balasubramanian   rc = ompd_enumerate_icvs(
2276*d2a6e165SVignesh Balasubramanian       addr_handle,
2277*d2a6e165SVignesh Balasubramanian       99 /*unknown current value: greater than enum "ompd_icvompd_icv" */,
2278*d2a6e165SVignesh Balasubramanian       &next_id, &next_icv_name, &next_scope, &more);
2279*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2280*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2281*d2a6e165SVignesh Balasubramanian   else
2282*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2283*d2a6e165SVignesh Balasubramanian 
2284*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
2285*d2a6e165SVignesh Balasubramanian   /*
2286*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
2287*d2a6e165SVignesh Balasubramanian      longer valid;
2288*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
2289*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
2290*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
2291*d2a6e165SVignesh Balasubramanian   */
2292*d2a6e165SVignesh Balasubramanian 
2293*d2a6e165SVignesh Balasubramanian   printf(
2294*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_bad_input for NULL next_id and next_icv_name\n");
2295*d2a6e165SVignesh Balasubramanian   rc =
2296*d2a6e165SVignesh Balasubramanian       ompd_enumerate_icvs(addr_handle, current, NULL, NULL, &next_scope, &more);
2297*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2298*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2299*d2a6e165SVignesh Balasubramanian   else
2300*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2301*d2a6e165SVignesh Balasubramanian 
2302*d2a6e165SVignesh Balasubramanian   printf(
2303*d2a6e165SVignesh Balasubramanian       "Test: Expecting ompd_rc_error or stale_handle for NULL addr_handle.\n");
2304*d2a6e165SVignesh Balasubramanian   rc = ompd_enumerate_icvs(NULL, current, &next_id, &next_icv_name, &next_scope,
2305*d2a6e165SVignesh Balasubramanian                            &more);
2306*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
2307*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2308*d2a6e165SVignesh Balasubramanian   else
2309*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2310*d2a6e165SVignesh Balasubramanian 
2311*d2a6e165SVignesh Balasubramanian   return Py_None;
2312*d2a6e165SVignesh Balasubramanian }
2313*d2a6e165SVignesh Balasubramanian 
2314*d2a6e165SVignesh Balasubramanian /*
2315*d2a6e165SVignesh Balasubramanian   Test API: ompd_get_icv_from_scope
2316*d2a6e165SVignesh Balasubramanian 
2317*d2a6e165SVignesh Balasubramanian   Program:
2318*d2a6e165SVignesh Balasubramanian     1 #include <stdio.h>
2319*d2a6e165SVignesh Balasubramanian     2 #include <omp.h>
2320*d2a6e165SVignesh Balasubramanian     3 int get_fib_num (int num)
2321*d2a6e165SVignesh Balasubramanian     4 {
2322*d2a6e165SVignesh Balasubramanian     5   int t1, t2;
2323*d2a6e165SVignesh Balasubramanian     6   if (num < 2)
2324*d2a6e165SVignesh Balasubramanian     7     return num;
2325*d2a6e165SVignesh Balasubramanian     8   else {
2326*d2a6e165SVignesh Balasubramanian     9     #pragma omp task shared(t1)
2327*d2a6e165SVignesh Balasubramanian     10       t1 = get_fib_num(num-1);
2328*d2a6e165SVignesh Balasubramanian     11       #pragma omp task shared(t2)
2329*d2a6e165SVignesh Balasubramanian     12       t2 = get_fib_num(num-2);
2330*d2a6e165SVignesh Balasubramanian     13       #pragma omp taskwait
2331*d2a6e165SVignesh Balasubramanian     14       return t1+t2;
2332*d2a6e165SVignesh Balasubramanian     15     }
2333*d2a6e165SVignesh Balasubramanian     16 }
2334*d2a6e165SVignesh Balasubramanian     17
2335*d2a6e165SVignesh Balasubramanian     18 int main () {
2336*d2a6e165SVignesh Balasubramanian     19     int ret = 0;
2337*d2a6e165SVignesh Balasubramanian     20     omp_set_num_threads(2);
2338*d2a6e165SVignesh Balasubramanian     21     #pragma omp parallel
2339*d2a6e165SVignesh Balasubramanian     22     {
2340*d2a6e165SVignesh Balasubramanian     23       ret = get_fib_num(10);
2341*d2a6e165SVignesh Balasubramanian     24     }
2342*d2a6e165SVignesh Balasubramanian     25     printf ("Fib of 10 is %d", ret);
2343*d2a6e165SVignesh Balasubramanian     26    return 0;
2344*d2a6e165SVignesh Balasubramanian     27 }
2345*d2a6e165SVignesh Balasubramanian 
2346*d2a6e165SVignesh Balasubramanian   GDB Commands:
2347*d2a6e165SVignesh Balasubramanian     ompd init
2348*d2a6e165SVignesh Balasubramanian     b 10
2349*d2a6e165SVignesh Balasubramanian     c
2350*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_icv_from_scope
2351*d2a6e165SVignesh Balasubramanian */
test_ompd_get_icv_from_scope_with_addr_handle(PyObject * self,PyObject * args)2352*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_icv_from_scope_with_addr_handle(PyObject *self,
2353*d2a6e165SVignesh Balasubramanian                                                         PyObject *args) {
2354*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_icv_from_scope with addr_handle\"...\n");
2355*d2a6e165SVignesh Balasubramanian 
2356*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
2357*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
2358*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
2359*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
2360*d2a6e165SVignesh Balasubramanian 
2361*d2a6e165SVignesh Balasubramanian   ompd_word_t icv_value;
2362*d2a6e165SVignesh Balasubramanian 
2363*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2364*d2a6e165SVignesh Balasubramanian   // cannot import enum ompd_icv from omp-icv.cpp, hardcoding as of now, if enum
2365*d2a6e165SVignesh Balasubramanian   // changes it also requires modification
2366*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_icv_from_scope(
2367*d2a6e165SVignesh Balasubramanian       addr_handle, ompd_scope_address_space,
2368*d2a6e165SVignesh Balasubramanian       19 /* ompd_icv_num_procs_var: check enum ompd_icv in omp-icv.cpp */,
2369*d2a6e165SVignesh Balasubramanian       &icv_value);
2370*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2371*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2372*d2a6e165SVignesh Balasubramanian     return Py_None;
2373*d2a6e165SVignesh Balasubramanian   } else
2374*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2375*d2a6e165SVignesh Balasubramanian 
2376*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input if an unknown value is provided in icv_id.
2377*d2a6e165SVignesh Balasubramanian   printf("Test: bad_input for unknown icv_id.\n");
2378*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_from_scope(addr_handle, ompd_scope_address_space,
2379*d2a6e165SVignesh Balasubramanian                                99 /*wrong value*/, &icv_value);
2380*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2381*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2382*d2a6e165SVignesh Balasubramanian   else
2383*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2384*d2a6e165SVignesh Balasubramanian 
2385*d2a6e165SVignesh Balasubramanian   // ompd_rc_incompatible if the ICV cannot be represented as an integer;
2386*d2a6e165SVignesh Balasubramanian   printf("Test: rc_incompatible for ICV that cant be represented as an "
2387*d2a6e165SVignesh Balasubramanian          "integer.\n");
2388*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_from_scope(addr_handle, ompd_scope_address_space,
2389*d2a6e165SVignesh Balasubramanian                                12 /*ompd_icv_tool_libraries_var*/, &icv_value);
2390*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_incompatible)
2391*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2392*d2a6e165SVignesh Balasubramanian   else
2393*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2394*d2a6e165SVignesh Balasubramanian 
2395*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
2396*d2a6e165SVignesh Balasubramanian   /*
2397*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
2398*d2a6e165SVignesh Balasubramanian      longer valid;
2399*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
2400*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
2401*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
2402*d2a6e165SVignesh Balasubramanian   */
2403*d2a6e165SVignesh Balasubramanian 
2404*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL icv_value.\n");
2405*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_from_scope(addr_handle, ompd_scope_address_space,
2406*d2a6e165SVignesh Balasubramanian                                19 /*ompd_icv_num_procs_var*/, NULL);
2407*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2408*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2409*d2a6e165SVignesh Balasubramanian   else
2410*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2411*d2a6e165SVignesh Balasubramanian 
2412*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error for NULL handle.\n");
2413*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_from_scope(NULL, ompd_scope_address_space,
2414*d2a6e165SVignesh Balasubramanian                                19 /*ompd_icv_num_procs_var*/, &icv_value);
2415*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
2416*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2417*d2a6e165SVignesh Balasubramanian   else
2418*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2419*d2a6e165SVignesh Balasubramanian 
2420*d2a6e165SVignesh Balasubramanian   return Py_None;
2421*d2a6e165SVignesh Balasubramanian }
2422*d2a6e165SVignesh Balasubramanian 
test_ompd_get_icv_from_scope_with_thread_handle(PyObject * self,PyObject * args)2423*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_icv_from_scope_with_thread_handle(PyObject *self,
2424*d2a6e165SVignesh Balasubramanian                                                           PyObject *args) {
2425*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_icv_from_scope with thread_handle\"...\n");
2426*d2a6e165SVignesh Balasubramanian 
2427*d2a6e165SVignesh Balasubramanian   PyObject *threadHandlePy = PyTuple_GetItem(args, 0);
2428*d2a6e165SVignesh Balasubramanian   ompd_thread_handle_t *thread_handle =
2429*d2a6e165SVignesh Balasubramanian       (ompd_thread_handle_t *)(PyCapsule_GetPointer(threadHandlePy,
2430*d2a6e165SVignesh Balasubramanian                                                     "ThreadHandle"));
2431*d2a6e165SVignesh Balasubramanian 
2432*d2a6e165SVignesh Balasubramanian   ompd_word_t icv_value;
2433*d2a6e165SVignesh Balasubramanian 
2434*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2435*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_icv_from_scope(
2436*d2a6e165SVignesh Balasubramanian       thread_handle, ompd_scope_thread,
2437*d2a6e165SVignesh Balasubramanian       22 /* ompd_icv_thread_num_var  check enum ompd_icv in omp-icv.cpp */,
2438*d2a6e165SVignesh Balasubramanian       &icv_value);
2439*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2440*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2441*d2a6e165SVignesh Balasubramanian     return Py_None;
2442*d2a6e165SVignesh Balasubramanian   } else
2443*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2444*d2a6e165SVignesh Balasubramanian 
2445*d2a6e165SVignesh Balasubramanian   printf("Test: with nthreads_var for ompd_rc_incomplete.\n");
2446*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_from_scope(thread_handle, ompd_scope_thread,
2447*d2a6e165SVignesh Balasubramanian                                7 /*ompd_icv_nthreads_var*/, &icv_value);
2448*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_incomplete) {
2449*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2450*d2a6e165SVignesh Balasubramanian     return Py_None;
2451*d2a6e165SVignesh Balasubramanian   } else
2452*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2453*d2a6e165SVignesh Balasubramanian 
2454*d2a6e165SVignesh Balasubramanian   return Py_None;
2455*d2a6e165SVignesh Balasubramanian }
2456*d2a6e165SVignesh Balasubramanian 
test_ompd_get_icv_from_scope_with_parallel_handle(PyObject * self,PyObject * args)2457*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_icv_from_scope_with_parallel_handle(PyObject *self,
2458*d2a6e165SVignesh Balasubramanian                                                             PyObject *args) {
2459*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_icv_from_scope with parallel_handle\"...\n");
2460*d2a6e165SVignesh Balasubramanian 
2461*d2a6e165SVignesh Balasubramanian   PyObject *parallelHandlePy = PyTuple_GetItem(args, 0);
2462*d2a6e165SVignesh Balasubramanian   ompd_parallel_handle_t *parallel_handle =
2463*d2a6e165SVignesh Balasubramanian       (ompd_parallel_handle_t *)(PyCapsule_GetPointer(parallelHandlePy,
2464*d2a6e165SVignesh Balasubramanian                                                       "ParallelHandle"));
2465*d2a6e165SVignesh Balasubramanian 
2466*d2a6e165SVignesh Balasubramanian   ompd_word_t icv_value;
2467*d2a6e165SVignesh Balasubramanian 
2468*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2469*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_icv_from_scope(
2470*d2a6e165SVignesh Balasubramanian       parallel_handle, ompd_scope_parallel,
2471*d2a6e165SVignesh Balasubramanian       15 /*ompd_icv_active_levels_var:check enum ompd_icv in omp-icv.cpp */,
2472*d2a6e165SVignesh Balasubramanian       &icv_value);
2473*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2474*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2475*d2a6e165SVignesh Balasubramanian     return Py_None;
2476*d2a6e165SVignesh Balasubramanian   } else
2477*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2478*d2a6e165SVignesh Balasubramanian 
2479*d2a6e165SVignesh Balasubramanian   return Py_None;
2480*d2a6e165SVignesh Balasubramanian }
2481*d2a6e165SVignesh Balasubramanian 
test_ompd_get_icv_from_scope_with_task_handle(PyObject * self,PyObject * args)2482*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_icv_from_scope_with_task_handle(PyObject *self,
2483*d2a6e165SVignesh Balasubramanian                                                         PyObject *args) {
2484*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_icv_from_scope with task_handle\"...\n");
2485*d2a6e165SVignesh Balasubramanian 
2486*d2a6e165SVignesh Balasubramanian   PyObject *taskHandlePy = PyTuple_GetItem(args, 0);
2487*d2a6e165SVignesh Balasubramanian   ompd_task_handle_t *task_handle =
2488*d2a6e165SVignesh Balasubramanian       (ompd_task_handle_t *)(PyCapsule_GetPointer(taskHandlePy, "TaskHandle"));
2489*d2a6e165SVignesh Balasubramanian 
2490*d2a6e165SVignesh Balasubramanian   ompd_word_t icv_value;
2491*d2a6e165SVignesh Balasubramanian 
2492*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2493*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_icv_from_scope(
2494*d2a6e165SVignesh Balasubramanian       task_handle, ompd_scope_task,
2495*d2a6e165SVignesh Balasubramanian       16 /*ompd_icv_thread_limit_var: check enum ompd_icv in omp-icv.cpp */,
2496*d2a6e165SVignesh Balasubramanian       &icv_value);
2497*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2498*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2499*d2a6e165SVignesh Balasubramanian     return Py_None;
2500*d2a6e165SVignesh Balasubramanian   } else
2501*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2502*d2a6e165SVignesh Balasubramanian 
2503*d2a6e165SVignesh Balasubramanian   return Py_None;
2504*d2a6e165SVignesh Balasubramanian }
2505*d2a6e165SVignesh Balasubramanian /*
2506*d2a6e165SVignesh Balasubramanian    Test API: ompd_get_icv_string_from_scope
2507*d2a6e165SVignesh Balasubramanian 
2508*d2a6e165SVignesh Balasubramanian   Program:
2509*d2a6e165SVignesh Balasubramanian     1.    #include <stdio.h>
2510*d2a6e165SVignesh Balasubramanian     2.    #include <omp.h>
2511*d2a6e165SVignesh Balasubramanian     3.    int main () {
2512*d2a6e165SVignesh Balasubramanian     4.        omp_set_num_threads(4);
2513*d2a6e165SVignesh Balasubramanian     5.        #pragma omp parallel
2514*d2a6e165SVignesh Balasubramanian     6.        {
2515*d2a6e165SVignesh Balasubramanian     7.            printf("Parallel level 1, thread num = %d",
2516*d2a6e165SVignesh Balasubramanian                      omp_get_thread_num());
2517*d2a6e165SVignesh Balasubramanian     8.        }
2518*d2a6e165SVignesh Balasubramanian     9.        return 0;
2519*d2a6e165SVignesh Balasubramanian     10.   }
2520*d2a6e165SVignesh Balasubramanian 
2521*d2a6e165SVignesh Balasubramanian   GDB Commands:
2522*d2a6e165SVignesh Balasubramanian     ompd init
2523*d2a6e165SVignesh Balasubramanian     b 7
2524*d2a6e165SVignesh Balasubramanian     c
2525*d2a6e165SVignesh Balasubramanian    ompdtestapi ompd_get_icv_string_from_scope
2526*d2a6e165SVignesh Balasubramanian */
test_ompd_get_icv_string_from_scope(PyObject * self,PyObject * args)2527*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_icv_string_from_scope(PyObject *self, PyObject *args) {
2528*d2a6e165SVignesh Balasubramanian   printf("Testing \"ompd_get_icv_string_from_scope\"...\n");
2529*d2a6e165SVignesh Balasubramanian 
2530*d2a6e165SVignesh Balasubramanian   PyObject *addrSpaceTup = PyTuple_GetItem(args, 0);
2531*d2a6e165SVignesh Balasubramanian   ompd_address_space_handle_t *addr_handle =
2532*d2a6e165SVignesh Balasubramanian       (ompd_address_space_handle_t *)PyCapsule_GetPointer(addrSpaceTup,
2533*d2a6e165SVignesh Balasubramanian                                                           "AddressSpace");
2534*d2a6e165SVignesh Balasubramanian 
2535*d2a6e165SVignesh Balasubramanian   const char *icv_string;
2536*d2a6e165SVignesh Balasubramanian 
2537*d2a6e165SVignesh Balasubramanian   printf("Test: With Correct Arguments.\n");
2538*d2a6e165SVignesh Balasubramanian   ompd_rc_t rc = ompd_get_icv_string_from_scope(
2539*d2a6e165SVignesh Balasubramanian       addr_handle, ompd_scope_address_space,
2540*d2a6e165SVignesh Balasubramanian       12 /*ompd_icv_tool_libraries_var: check enum ompd_icv in omp-icv.cpp */,
2541*d2a6e165SVignesh Balasubramanian       &icv_string);
2542*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_ok) {
2543*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2544*d2a6e165SVignesh Balasubramanian     return Py_None;
2545*d2a6e165SVignesh Balasubramanian   } else
2546*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2547*d2a6e165SVignesh Balasubramanian 
2548*d2a6e165SVignesh Balasubramanian   // ompd_rc_bad_input if an unknown value is provided in icv_id.
2549*d2a6e165SVignesh Balasubramanian   printf("Test: bad_input for unknown icv_id.\n");
2550*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_string_from_scope(addr_handle, ompd_scope_address_space,
2551*d2a6e165SVignesh Balasubramanian                                       99 /*wrong value*/, &icv_string);
2552*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2553*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2554*d2a6e165SVignesh Balasubramanian   else
2555*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2556*d2a6e165SVignesh Balasubramanian 
2557*d2a6e165SVignesh Balasubramanian   // Random checks with  null and invalid args.
2558*d2a6e165SVignesh Balasubramanian   /*
2559*d2a6e165SVignesh Balasubramanian      ompd_rc_stale_handle: is returned when the specified handle is no
2560*d2a6e165SVignesh Balasubramanian      longer valid;
2561*d2a6e165SVignesh Balasubramanian      ompd_rc_bad_input: is returned when the input parameters
2562*d2a6e165SVignesh Balasubramanian      (other than handle) are invalid;
2563*d2a6e165SVignesh Balasubramanian      ompd_rc_error:    is returned when a fatal error occurred;
2564*d2a6e165SVignesh Balasubramanian   */
2565*d2a6e165SVignesh Balasubramanian 
2566*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_bad_input for NULL icv_string.\n");
2567*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_string_from_scope(addr_handle, ompd_scope_address_space,
2568*d2a6e165SVignesh Balasubramanian                                       12 /*ompd_icv_tool_libraries_var*/, NULL);
2569*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_bad_input)
2570*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2571*d2a6e165SVignesh Balasubramanian   else
2572*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2573*d2a6e165SVignesh Balasubramanian 
2574*d2a6e165SVignesh Balasubramanian   printf("Test: Expecting ompd_rc_error for NULL handle.\n");
2575*d2a6e165SVignesh Balasubramanian   rc = ompd_get_icv_string_from_scope(NULL, ompd_scope_address_space,
2576*d2a6e165SVignesh Balasubramanian                                       12 /*ompd_icv_tool_libraries_var*/,
2577*d2a6e165SVignesh Balasubramanian                                       &icv_string);
2578*d2a6e165SVignesh Balasubramanian   if (rc != ompd_rc_error && rc != ompd_rc_stale_handle)
2579*d2a6e165SVignesh Balasubramanian     printf("Failed. with return code = %d\n", rc);
2580*d2a6e165SVignesh Balasubramanian   else
2581*d2a6e165SVignesh Balasubramanian     printf("Success.\n");
2582*d2a6e165SVignesh Balasubramanian 
2583*d2a6e165SVignesh Balasubramanian   return Py_None;
2584*d2a6e165SVignesh Balasubramanian }
2585*d2a6e165SVignesh Balasubramanian 
test_ompd_get_tool_data(PyObject * self,PyObject * args)2586*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_get_tool_data(PyObject *self, PyObject *args) {
2587*d2a6e165SVignesh Balasubramanian   printf("Disabled: Testing Not enabled for \"ompd_get_tool_data\".\n");
2588*d2a6e165SVignesh Balasubramanian 
2589*d2a6e165SVignesh Balasubramanian   return Py_None;
2590*d2a6e165SVignesh Balasubramanian }
test_ompd_enumerate_states(PyObject * self,PyObject * args)2591*d2a6e165SVignesh Balasubramanian PyObject *test_ompd_enumerate_states(PyObject *self, PyObject *args) {
2592*d2a6e165SVignesh Balasubramanian   printf("Disabled: Testing Not enabled for \"ompd_enumerate_states\".\n");
2593*d2a6e165SVignesh Balasubramanian 
2594*d2a6e165SVignesh Balasubramanian   return Py_None;
2595*d2a6e165SVignesh Balasubramanian }
2596