#include <mcheck.h>
#include <stdio.h>


#ifndef CHAR_T
# define CHAR_T char
# define W(o) o
# define OPEN_MEMSTREAM open_memstream
#endif

#define S(s) S1 (s)
#define S1(s) #s


static void
mcheck_abort (enum mcheck_status ev)
{
  printf ("mecheck failed with status %d\n", (int) ev);
  exit (1);
}


static int
do_test (void)
{
  mcheck_pedantic (mcheck_abort);

  CHAR_T *buf = (CHAR_T *) 1l;
  size_t len = 12345;
  FILE *fp = OPEN_MEMSTREAM (&buf, &len);
  if (fp == NULL)
    {
      printf ("%s failed\n", S(OPEN_MEMSTREAM));
      return 1;
    }

  for (int outer = 0; outer < 800; ++outer)
    {
      for (int inner = 0; inner < 100; ++inner)
	if (fputc (W('a') + (outer * 100 + inner) % 26, fp) == EOF)
	  {
	    printf ("fputc at %d:%d failed\n", outer, inner);
	    return 1;
	  }

      if (fflush (fp) != 0)
	{
	  puts ("fflush failed");
	  return 1;
	}

      if (len != (outer + 1) * 100)
	{
	  printf ("string in round %d not %d bytest long\n",
		  outer + 1, (outer + 1) * 100);
	  return 1;
	}
      if (buf == (CHAR_T *) 1l)
	{
	  printf ("round %d: buf not updated\n", outer + 1);
	  return 1;
	}
      for (int inner = 0; inner < (outer + 1) * 100; ++inner)
	if (buf[inner] != W('a') + inner % 26)
	  {
	    printf ("round %d: buf[%d] != '%c'\n", outer + 1, inner,
		    (char) (W('a') + inner % 26));
	    return 1;
	  }
    }

  buf = (CHAR_T *) 1l;
  len = 12345;
  if (fclose (fp) != 0)
    {
      puts ("fclose failed");
      return 1;
    }

  if (len != 800 * 100)
    {
      puts ("string after close not 80000 bytes long");
      return 1;
    }
  if (buf == (CHAR_T *) 1l)
    {
      puts ("buf not updated");
      return 1;
    }
  for (int inner = 0; inner < 800 * 100; ++inner)
    if (buf[inner] != W('a') + inner % 26)
      {
	printf ("after close: buf[%d] != %c\n", inner,
		(char) (W('a') + inner % 26));
	return 1;
      }

  free (buf);

  return 0;
}

#define TEST_FUNCTION do_test ()
#include "../test-skeleton.c"
