summaryrefslogtreecommitdiffstats
path: root/openmp/testsuite/fortran/omp_lock.f
diff options
context:
space:
mode:
Diffstat (limited to 'openmp/testsuite/fortran/omp_lock.f')
-rw-r--r--openmp/testsuite/fortran/omp_lock.f58
1 files changed, 58 insertions, 0 deletions
diff --git a/openmp/testsuite/fortran/omp_lock.f b/openmp/testsuite/fortran/omp_lock.f
new file mode 100644
index 00000000000..29026c522e8
--- /dev/null
+++ b/openmp/testsuite/fortran/omp_lock.f
@@ -0,0 +1,58 @@
+<ompts:test>
+<ompts:testdescription>Test which checks the omp_set_lock and the omp_unset_lock function by counting the threads entering and exiting a single region with locks.</ompts:testdescription>
+<ompts:ompversion>3.0</ompts:ompversion>
+<ompts:directive>omp_lock</ompts:directive>
+<ompts:dependences>omp flush</ompts:dependences>
+<ompts:testcode>
+ INTEGER FUNCTION <ompts:testcode:functionname>omp_lock</ompts:testcode:functionname>()
+ IMPLICIT NONE
+ INTEGER result
+ INTEGER nr_threads_in_single
+ INTEGER nr_iterations
+ INTEGER i
+!lock variable
+ <ompts:orphan:vars>
+ INCLUDE "omp_lib.h"
+ INTEGER (KIND=OMP_LOCK_KIND) :: lock
+ COMMON /orphvars/ lock
+ </ompts:orphan:vars>
+ INCLUDE "omp_testsuite.f"
+
+!result is:
+! 0 -- if the test fails
+! 1 -- if the test succeeds
+ CALL omp_init_lock(lock)
+ nr_iterations=0
+ nr_threads_in_single=0
+ result=0
+!$omp parallel shared(lock,nr_threads_in_single,nr_iterations,result)
+!$omp do
+ DO i=1,LOOPCOUNT
+ <ompts:orphan>
+ <ompts:check>
+ CALL omp_set_lock(lock)
+ </ompts:check>
+ </ompts:orphan>
+!$omp flush
+ nr_threads_in_single=nr_threads_in_single+1
+!$omp flush
+ nr_iterations=nr_iterations+1
+ nr_threads_in_single=nr_threads_in_single-1
+ result=result+nr_threads_in_single
+ <ompts:orphan>
+ <ompts:check>
+ CALL omp_unset_lock(lock)
+ </ompts:check>
+ </ompts:orphan>
+ END DO
+!$omp end do
+!$omp end parallel
+ CALL omp_destroy_lock(lock)
+ IF(result.EQ.0 .AND. nr_iterations .EQ. LOOPCOUNT) THEN
+ <testfunctionname></testfunctionname>=1
+ ELSE
+ <testfunctionname></testfunctionname>=0
+ ENDIf
+ END
+</ompts:testcode>
+</ompts:test>
OpenPOWER on IntegriCloud