// Unonptimized, we need 24000000 bytes heap
// RUN: %libomptarget-compilexx-generic
// RUN: env LIBOMPTARGET_HEAP_SIZE=24000000 \
// RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic
// RUN: %libomptarget-compileoptxx-run-and-check-generic

#include <iostream>

template <typename LOOP_BODY>
inline void forall(int Begin, int End, LOOP_BODY LoopBody) {
#pragma omp target parallel for schedule(static)
  for (int I = Begin; I < End; ++I) {
    LoopBody(I);
  }
}

#define N (1000)

//
// Demonstration of the RAJA abstraction using lambdas
// Requires data mapping onto the target section
//
int main() {
  double A[N], B[N], C[N];

  for (int I = 0; I < N; I++) {
    A[I] = I + 1;
    B[I] = -I;
    C[I] = -9;
  }

#pragma omp target data map(tofrom : C[0 : N]) map(to : A[0 : N], B[0 : N])
  {
    forall(0, N, [&](int I) { C[I] += A[I] + B[I]; });
  }

  int Fail = 0;
  for (int I = 0; I < N; I++) {
    if (C[I] != -8) {
      std::cout << "Failed at " << I << " with val " << C[I] << std::endl;
      Fail = 1;
    }
  }

  // CHECK: Succeeded
  if (Fail) {
    std::cout << "Failed" << std::endl;
  } else {
    std::cout << "Succeeded" << std::endl;
  }

  return 0;
}
