/* Test hton/ntoh functions.
   Copyright (C) 1997, 2002 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#include <endian.h>
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>

#if BYTE_ORDER == BIG_ENDIAN
# define TEST(orig, swapped, fct) \
  if ((fct (orig)) != (orig)) {						      \
    printf ("Failed for %s -> %#x\n", #fct "(" #orig ")", fct (orig));	      \
    result = 1;								      \
  }
#elif BYTE_ORDER == LITTLE_ENDIAN
# define TEST(orig, swapped, fct) \
  if ((fct (orig)) != (swapped)) {					      \
    printf ("Failed for %s -> %#x\n", #fct "(" #orig ")", fct (orig));	      \
    result = 1;								      \
  }
#else
# error "Bah, what kind of system do you use?"
#endif

u_int32_t lo = 0x67452301;
u_int16_t foo = 0x1234;

int
main (void)
{
  int result = 0;

  TEST (0x67452301, 0x01234567, htonl);
  TEST (0x67452301, 0x01234567, (htonl));
  TEST (0x67452301, 0x01234567, ntohl);
  TEST (0x67452301, 0x01234567, (ntohl));

  TEST (lo, 0x01234567, htonl);
  TEST (lo, 0x01234567, (htonl));
  TEST (lo, 0x01234567, ntohl);
  TEST (lo, 0x01234567, (ntohl));

  TEST (0x1234, 0x3412, htons);
  TEST (0x1234, 0x3412, (htons));
  TEST (0x1234, 0x3412, ntohs);
  TEST (0x1234, 0x3412, (ntohs));

  TEST (foo, 0x3412, htons);
  TEST (foo, 0x3412, (htons));
  TEST (foo, 0x3412, ntohs);
  TEST (foo, 0x3412, (ntohs));

  return result;
}
