#include "../../runtime/SafePoolAllocator/ParPoolAllocator.h"

PoolTy Pool;

extern "C" void __sc_par_init_runtime(unsigned, unsigned, unsigned);
extern "C" void __sc_par_poolcheck(PoolTy *, void *);
extern "C" void __sc_par_poolcheck_0(void *);
extern "C" void __sc_par_boundscheck(PoolTy*, void*, void*);
extern "C" void __sc_par_boundscheck_0(void*, void*);
extern "C" void __sc_par_wait_for_completion(void);
extern "C" void __sc_par_cachepool_0(PoolTy*);

int main() {

  __sc_par_pool_init_runtime(0, 0, 1);
  __sc_par_poolinit(&Pool, 128);
  __sc_par_cachepool_0(&Pool);
  char* obj1 = (char*)__sc_par_poolalloc(&Pool, 128);
#if 0
  char* obj2 = (char*)__sc_par_poolalloc(&Pool, 128);
#else
  (char*)__sc_par_poolalloc(&Pool, 128);
#endif
  for (unsigned x = 0; x < 100000000; ++x) {
    __sc_par_poolcheck_0(obj1 + (x % 128));
    __sc_par_boundscheck_0(obj1, obj1 + (x % 128));
#if 0
    __sc_par_poolcheck(&Pool, obj2 + (x % 128));
    __sc_par_boundscheck(&Pool, obj2, obj2 + (x % 128));
#endif
  }
  __sc_par_wait_for_completion();
  return 0;
}

extern "C" void poolcheckfail(void) {
  abort();
}
