#include <stdio.h>
#include <string.h>
#include <netinet/in.h>


static int
do_test (void)
{
  int result = 0;
  char buf[16];
  memset (buf, '\0', 16);

  if (! IN6_IS_ADDR_UNSPECIFIED (buf))
    {
      puts ("positive IN6_IS_ADDR_UNSPECIFIED failed");
      result = 1;
    }
  for (size_t i = 0; i < 16; ++i)
    {
      buf[i] = 1;
      if (IN6_IS_ADDR_UNSPECIFIED (buf))
	{
	  printf ("negative IN6_IS_ADDR_UNSPECIFIED with byte %zu failed\n",
		  i);
	  result = 1;
	}
      buf[i] = 0;
    }

  if (IN6_IS_ADDR_LOOPBACK (buf))
    {
      puts ("negative IN6_IS_ADDR_UNSPECIFIED failed");
      result = 1;
    }
  buf[15] = 1;
  if (! IN6_IS_ADDR_LOOPBACK (buf))
    {
      puts ("positive IN6_IS_ADDR_UNSPECIFIED failed");
      result = 1;
    }
  buf[15] = 0;

  buf[0] = 0xfe;
  buf[1] = 0x80;
  if (! IN6_IS_ADDR_LINKLOCAL (buf))
    {
      puts ("positive IN6_IS_ADDR_LINKLOCAL failed");
      result = 1;
    }
  for (size_t i = 1; i < 16; ++i)
    {
      buf[i] ^= 1;
      if (! IN6_IS_ADDR_LINKLOCAL (buf))
	{
	  printf ("positive IN6_IS_ADDR_LINKLOCAL byte %zu failed\n", i);
	  result = 1;
	}
      buf[i] ^= 1;
    }
  buf[0] = 0xff;
  buf[1] = 0x80;
  if (IN6_IS_ADDR_LINKLOCAL (buf))
    {
      puts ("negative IN6_IS_ADDR_LINKLOCAL failed");
      result = 1;
    }
  buf[0] = 0xfe;
  buf[1] = 0xc0;
  if (IN6_IS_ADDR_LINKLOCAL (buf))
    {
      puts ("negative IN6_IS_ADDR_LINKLOCAL #2 failed");
      result = 1;
    }

  buf[0] = 0xfe;
  buf[1] = 0xc0;
  if (! IN6_IS_ADDR_SITELOCAL (buf))
    {
      puts ("positive IN6_IS_ADDR_SITELOCAL failed");
      result = 1;
    }
  for (size_t i = 1; i < 16; ++i)
    {
      buf[i] ^= 1;
      if (! IN6_IS_ADDR_SITELOCAL (buf))
	{
	  printf ("positive IN6_IS_ADDR_SITELOCAL byte %zu failed\n", i);
	  result = 1;
	}
      buf[i] ^= 1;
    }
  buf[0] = 0xff;
  buf[1] = 0x80;
  if (IN6_IS_ADDR_SITELOCAL (buf))
    {
      puts ("negative IN6_IS_ADDR_SITELOCAL failed");
      result = 1;
    }
  buf[0] = 0xf8;
  buf[1] = 0xc0;
  if (IN6_IS_ADDR_SITELOCAL (buf))
    {
      puts ("negative IN6_IS_ADDR_SITELOCAL #2 failed");
      result = 1;
    }

  memset (buf, '\0', 16);
  buf[10] = 0xff;
  buf[11] = 0xff;
  if (! IN6_IS_ADDR_V4MAPPED (buf))
    {
      puts ("positive IN6_IS_ADDR_V4MAPPED failed");
      result = 1;
    }
  for (size_t i = 12; i < 16; ++i)
    {
      buf[i] ^= 1;
      if (! IN6_IS_ADDR_V4MAPPED (buf))
	{
	  printf ("positive IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i);
	  result = 1;
	}
      buf[i] ^= 1;
    }
  for (size_t i = 0; i < 12; ++i)
    {
      buf[i] ^= 1;
      if (IN6_IS_ADDR_V4MAPPED (buf))
	{
	  printf ("negative IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i);
	  result = 1;
	}
      buf[i] ^= 1;
    }

  memset (buf, '\0', 16);
  for (size_t i = 12; i < 16; ++i)
    {
      buf[i] ^= 2;
      if (! IN6_IS_ADDR_V4COMPAT (buf))
	{
	  printf ("positive IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i);
	  result = 1;
	}
      buf[i] ^= 2;
    }
  for (size_t i = 0; i < 12; ++i)
    {
      buf[i] ^= 1;
      if (IN6_IS_ADDR_V4COMPAT (buf))
	{
	  printf ("negative IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i);
	  result = 1;
	}
      buf[i] ^= 1;
    }
  if (IN6_IS_ADDR_V4COMPAT (buf))
    {
      puts ("negative IN6_IS_ADDR_V4COMPAT #2 failed");
      result = 1;
    }
  buf[15] = 1;
  if (IN6_IS_ADDR_V4COMPAT (buf))
    {
      puts ("negative IN6_IS_ADDR_V4COMPAT #3 failed");
      result = 1;
    }

  return result;
}

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