// RUN: %libomp-compile-and-run
#include "omp_testsuite.h"

#define DEBUG_TEST 0

int j;
#pragma omp threadprivate(j)

int test_omp_single_copyprivate()
{
  int result;
  int nr_iterations;

  result = 0;
  nr_iterations = 0;
  #pragma omp parallel
  {
    int i;
    for (i = 0; i < LOOPCOUNT; i++)
    {
#if DEBUG_TEST
         int thread;
         thread = omp_get_thread_num ();
#endif
      #pragma omp single copyprivate(j)
      {
        nr_iterations++;
        j = i;
#if DEBUG_TEST
        printf ("thread %d assigns, j = %d, i = %d\n", thread, j, i);
#endif
      }
#if DEBUG_TEST
      #pragma omp barrier
#endif
      #pragma omp critical
      {
#if DEBUG_TEST
        printf ("thread = %d, j = %d, i = %d\n", thread, j, i);
#endif
        result = result + j - i;
      }
      #pragma omp barrier
    } /* end of for */
  } /* end of parallel */
  return ((result == 0) && (nr_iterations == LOOPCOUNT));
}

int main()
{
  int i;
  int num_failed=0;

  for(i = 0; i < REPETITIONS; i++) {
    if(!test_omp_single_copyprivate()) {
      num_failed++;
    }
  }
  return num_failed;
}
