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