45 lines · c
1// RUN: %libomp-compile-and-run2#include <stdio.h>3#include "omp_testsuite.h"4 5/*6 * Checks that false is returned when called from serial region7 * and true is returned when called within parallel region.8 */9int test_omp_in_parallel()10{11 int serial;12 int isparallel;13 14 serial = 1;15 isparallel = 0;16 serial = omp_in_parallel();17 18 #pragma omp parallel19 {20 #pragma omp single21 {22 isparallel = omp_in_parallel();23 }24 }25 return (!(serial) && isparallel);26}27 28int main()29{30 int i;31 int num_failed=0;32 33 // the test requires more than 1 thread to pass34 omp_set_dynamic(0); // disable dynamic adjustment of threads35 if (omp_get_max_threads() == 1)36 omp_set_num_threads(2); // set 2 threads if no HW resources available37 38 for(i = 0; i < REPETITIONS; i++) {39 if(!test_omp_in_parallel()) {40 num_failed++;41 }42 }43 return num_failed;44}45