// RUN: %libomp-compile
// RUN: env OMP_SCHEDULE=static %libomp-run 1 0
// RUN: env OMP_SCHEDULE=static,10 %libomp-run 1 10
// RUN: env OMP_SCHEDULE=dynamic %libomp-run 2 1
// RUN: env OMP_SCHEDULE=dynamic,11 %libomp-run 2 11
// RUN: env OMP_SCHEDULE=guided %libomp-run 3 1
// RUN: env OMP_SCHEDULE=guided,12 %libomp-run 3 12
// RUN: env OMP_SCHEDULE=auto %libomp-run 4 1
// RUN: env OMP_SCHEDULE=trapezoidal %libomp-run 101 1
// RUN: env OMP_SCHEDULE=trapezoidal,13 %libomp-run 101 13
// RUN: env OMP_SCHEDULE=static_steal %libomp-run 102 1
// RUN: env OMP_SCHEDULE=static_steal,14 %libomp-run 102 14
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "omp_testsuite.h"

int sum;
char* correct_kind_string;
omp_sched_t correct_kind;
int correct_chunk_size;

int test_omp_for_runtime()
{
  int sum;
  int known_sum;
  int chunk_size;
  int error;
  omp_sched_t kind;

  sum = 0;
  error = 0;
  known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
  omp_get_schedule(&kind, &chunk_size);

  printf("omp_get_schedule() returns: Schedule = %d, Chunk Size = %d\n",
         kind, chunk_size);
  if (kind != correct_kind) {
    printf("kind(%d) != correct_kind(%d)\n", kind, correct_kind);
    error = 1;
  }
  if (chunk_size != correct_chunk_size) {
    printf("chunk_size(%d) != correct_chunk_size(%d)\n", chunk_size,
           correct_chunk_size);
    error = 1;
  }

  #pragma omp parallel
  {
    int i;
    #pragma omp for schedule(runtime)
    for (i = 1; i <= LOOPCOUNT; i++) {
        #pragma omp critical
        sum+=i;
    }
  }
  if (known_sum != sum) {
    printf("Known Sum = %d, Calculated Sum = %d\n", known_sum, sum);
    error = 1;
  }
  return !error;
}

int main(int argc, char** argv)
{
  int i;
  int num_failed=0;
  if (argc != 3) {
    fprintf(stderr, "usage: %s schedule_kind chunk_size\n", argv[0]);
    fprintf(stderr, "  Run with envirable OMP_SCHEDULE=kind[,chunk_size]\n");
    return 1;
  }
  correct_kind = atoi(argv[1]);
  correct_chunk_size = atoi(argv[2]);

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