#include "config.h"
#include "config.hxx"
#include "someclass.hxx"

#ifdef HAVE_SYS_TYPES_H
#  include <sys/types.h>
#endif
#ifdef HAVE_STDINT_H
#  include <stdint.h>
#endif
#ifdef HAVE_STDDEF_H
#  include <stddef.h>
#endif
#ifdef HAVE_CSTDINT
#  include <cstdint>
#endif
#ifdef HAVE_CSTDDEF
#  include <cstddef>
#endif

#include <stdio.h>

#define CHECK(t, m)                                                           \
  do {                                                                        \
    if (sizeof(t) != m) {                                                     \
      printf(#m ": expected %d, got %d (line %d)\n", (int)sizeof(t), (int)m,  \
             __LINE__);                                                       \
      result = 1;                                                             \
    }                                                                         \
  } while (0)

#define NODEF(m)                                                              \
  do {                                                                        \
    printf(#m ": not defined (line %d)\n", __LINE__);                         \
    result = 1;                                                               \
  } while (0)

int main()
{
  int result = 0;
  ns::someclass y;

/* void* */
#if !defined(HAVE_SIZEOF_DATA_PTR)
  NODEF(HAVE_SIZEOF_DATA_PTR);
#endif
#if defined(SIZEOF_DATA_PTR)
  CHECK(void*, SIZEOF_DATA_PTR);
#else
  NODEF(SIZEOF_DATA_PTR);
#endif

/* char */
#if !defined(HAVE_SIZEOF_CHAR)
  NODEF(HAVE_SIZEOF_CHAR);
#endif
#if defined(SIZEOF_CHAR)
  CHECK(char, SIZEOF_CHAR);
#else
  NODEF(SIZEOF_CHAR);
#endif

/* short */
#if !defined(HAVE_SIZEOF_SHORT)
  NODEF(HAVE_SIZEOF_SHORT);
#endif
#if defined(SIZEOF_SHORT)
  CHECK(short, SIZEOF_SHORT);
#else
  NODEF(SIZEOF_SHORT);
#endif

/* int */
#if !defined(HAVE_SIZEOF_INT)
  NODEF(HAVE_SIZEOF_INT);
#endif
#if defined(SIZEOF_INT)
  CHECK(int, SIZEOF_INT);
#else
  NODEF(SIZEOF_INT);
#endif

/* long */
#if !defined(HAVE_SIZEOF_LONG)
  NODEF(HAVE_SIZEOF_LONG);
#endif
#if defined(SIZEOF_LONG)
  CHECK(long, SIZEOF_LONG);
#else
  NODEF(SIZEOF_LONG);
#endif

/* long long */
#if defined(SIZEOF_LONG_LONG)
  CHECK(long long, SIZEOF_LONG_LONG);
#  if !defined(HAVE_SIZEOF_LONG_LONG)
  NODEF(HAVE_SIZEOF_LONG_LONG);
#  endif
#endif

/* __int64 */
#if defined(SIZEOF___INT64)
  CHECK(__int64, SIZEOF___INT64);
#  if !defined(HAVE_SIZEOF___INT64)
  NODEF(HAVE_SIZEOF___INT64);
#  endif
#elif defined(HAVE_SIZEOF___INT64)
  NODEF(SIZEOF___INT64);
#endif

/* size_t */
#if !defined(HAVE_SIZEOF_SIZE_T)
  NODEF(HAVE_SIZEOF_SIZE_T);
#endif
#if defined(SIZEOF_SIZE_T)
  CHECK(size_t, SIZEOF_SIZE_T);
#else
  NODEF(SIZEOF_SIZE_T);
#endif

/* ssize_t */
#if defined(SIZEOF_SSIZE_T)
  CHECK(ssize_t, SIZEOF_SSIZE_T);
#  if !defined(HAVE_SIZEOF_SSIZE_T)
  NODEF(HAVE_SIZEOF_SSIZE_T);
#  endif
#elif defined(HAVE_SIZEOF_SSIZE_T)
  NODEF(SIZEOF_SSIZE_T);
#endif

/* uint8_t */
#if defined(SIZEOF_UINT8_T)
  CHECK(uint8_t, SIZEOF_UINT8_T);
#  if !defined(HAVE_SIZEOF_UINT8_T)
  NODEF(HAVE_SIZEOF_UINT8_T);
#  endif
#elif defined(HAVE_SIZEOF_UINT8_T)
  NODEF(SIZEOF_UINT8_T);
#endif

/* std::uint8_t */
#if defined(SIZEOF_STD_UINT8_T)
  CHECK(std::uint8_t, SIZEOF_STD_UINT8_T);
#  if !defined(HAVE_SIZEOF_STD_UINT8_T)
  NODEF(HAVE_SIZEOF_STD_UINT8_T);
#  endif
#elif defined(HAVE_SIZEOF_STD_UINT8_T)
  NODEF(SIZEOF_STD_UINT8_T);
#endif

/* ns::someclass::someint */
#if defined(SIZEOF_NS_CLASSMEMBER_INT)
  CHECK(y.someint, SIZEOF_NS_CLASSMEMBER_INT);
  CHECK(y.someint, SIZEOF_INT);
#  if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_INT)
  NODEF(HAVE_SIZEOF_STRUCTMEMBER_INT);
#  endif
#elif defined(HAVE_SIZEOF_STRUCTMEMBER_INT)
  NODEF(SIZEOF_STRUCTMEMBER_INT);
#endif

/* ns::someclass::someptr */
#if defined(SIZEOF_NS_CLASSMEMBER_PTR)
  CHECK(y.someptr, SIZEOF_NS_CLASSMEMBER_PTR);
  CHECK(y.someptr, SIZEOF_DATA_PTR);
#  if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_PTR)
  NODEF(HAVE_SIZEOF_NS_CLASSMEMBER_PTR);
#  endif
#elif defined(HAVE_SIZEOF_NS_CLASSMEMBER_PTR)
  NODEF(SIZEOF_NS_CLASSMEMBER_PTR);
#endif

/* ns::someclass::somechar */
#if defined(SIZEOF_NS_CLASSMEMBER_CHAR)
  CHECK(y.somechar, SIZEOF_NS_CLASSMEMBER_CHAR);
  CHECK(y.somechar, SIZEOF_CHAR);
#  if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_CHAR)
  NODEF(HAVE_SIZEOF_NS_CLASSMEMBER_CHAR);
#  endif
#elif defined(HAVE_SIZEOF_NS_CLASSMEMBER_CHAR)
  NODEF(SIZEOF_NS_CLASSMEMBER_CHAR);
#endif

/* ns::someclass::somebool */
#if defined(SIZEOF_NS_CLASSMEMBER_BOOL)
  CHECK(y.somechar, SIZEOF_NS_CLASSMEMBER_BOOL);
  CHECK(y.somechar, SIZEOF_BOOL);
#  if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_BOOL)
  NODEF(HAVE_SIZEOF_NS_CLASSMEMBER_BOOL);
#  endif
#elif defined(HAVE_SIZEOF_NS_CLASSMEMBER_BOOL)
  NODEF(SIZEOF_NS_CLASSMEMBER_BOOL);
#endif

  /* to avoid possible warnings about unused or write-only variable */
  y.someint = result;

  return y.someint;
}
