/* { dg-do run } */
/* { dg-set-target-env-var OMP_PROC_BIND "spread,close" } */
/* { dg-set-target-env-var OMP_PLACES "{6,7}:4:-2,!{2,3}" } */
/* { dg-set-target-env-var OMP_NUM_THREADS "2" } */
/* { dg-additional-options "-Wno-deprecated-declarations" } */

#include <omp.h>
#include <stdlib.h>
#include <stdio.h>

int *
get_buf (int nump)
{
  static int *buf;
  static size_t buf_size;
  if ((size_t) nump > buf_size)
    {
      buf_size *= 2;
      if (nump > buf_size)
	buf_size = nump + 64;
      int *bufn = realloc (buf, buf_size * sizeof (int));
      if (bufn == NULL)
	{
	  fprintf (stderr, "memory allocation error\n");
	  exit (1);
	}
      buf = bufn;
    }
  return buf;
}

void
print_place (int count, int *ids)
{
  int i, j;
  printf ("{");
  for (i = 0; i < count; i++)
    {
      for (j = i + 1; j < count; j++)
	if (ids[j] != ids[i] + (j - i))
	  break;
      if (i)
	printf (",");
      if (j == i + 1)
	printf ("%d", ids[i]);
      else
	{
	  printf ("%d:%d", ids[i], j - i);
	  i = j - 1;
	}
    }
  printf ("}\n");
}

void
print_place_var (void)
{
  int place = omp_get_place_num ();
  int num_places = omp_get_partition_num_places ();
  int *ids = get_buf (num_places);
  omp_get_partition_place_nums (ids);
  printf ("place %d\n", place);
  if (num_places)
    printf ("partition %d-%d\n", ids[0], ids[num_places - 1]);
}

int
main ()
{
  int i, num = omp_get_num_places (), nump, *ids;
  printf ("omp_get_num_places () == %d\n", num);
  for (i = 0; i < num; i++)
    {
      printf ("place %d ", i);
      nump = omp_get_place_num_procs (i);
      ids = get_buf (nump);
      omp_get_place_proc_ids (i, ids);
      print_place (nump, ids);
    }
  print_place_var ();
  omp_set_nested (1);
  #pragma omp parallel
    if (omp_get_thread_num () == omp_get_num_threads () - 1)
      {
      #pragma omp parallel
	if (omp_get_thread_num () == omp_get_num_threads () - 1)
	  print_place_var ();
      }
  return 0;
}
