module preproc_constants_runme;

import core.stdc.config;
import preproc_constants.preproc_constants;

void main() {
  static assert(is(int == typeof(CONST_INT1())));
  static assert(is(int == typeof(CONST_INT2())));
  static assert(is(uint == typeof(CONST_UINT1())));
  static assert(is(uint == typeof(CONST_UINT2())));
  static assert(is(uint == typeof(CONST_UINT3())));
  static assert(is(uint == typeof(CONST_UINT4())));
  static assert(is(c_long == typeof(CONST_LONG1())));
  static assert(is(c_long == typeof(CONST_LONG2())));
  static assert(is(c_long == typeof(CONST_LONG3())));
  static assert(is(c_long == typeof(CONST_LONG4())));
  static assert(is(long == typeof(CONST_LLONG1())));
  static assert(is(long == typeof(CONST_LLONG2())));
  static assert(is(long == typeof(CONST_LLONG3())));
  static assert(is(long == typeof(CONST_LLONG4())));
  static assert(is(ulong == typeof(CONST_ULLONG1())));
  static assert(is(ulong == typeof(CONST_ULLONG2())));
  static assert(is(ulong == typeof(CONST_ULLONG3())));
  static assert(is(ulong == typeof(CONST_ULLONG4())));
  static assert(is(double == typeof(CONST_DOUBLE1())));
  static assert(is(double == typeof(CONST_DOUBLE2())));
  static assert(is(double == typeof(CONST_DOUBLE3())));
  static assert(is(double == typeof(CONST_DOUBLE4())));
  static assert(is(float == typeof(CONST_FLOAT1())));
  static assert(is(float == typeof(CONST_FLOAT2())));
  static assert(is(bool == typeof(CONST_BOOL1())));
  static assert(is(bool == typeof(CONST_BOOL2())));
  static assert(is(char == typeof(CONST_CHAR())));
  static assert(is(string == typeof(CONST_STRING1())));
  static assert(is(string == typeof(CONST_STRING2())));

  static assert(is(int == typeof(INT_AND_BOOL())));
  static assert(is(int == typeof(INT_AND_CHAR())));
  static assert(is(int == typeof(INT_AND_INT())));
  static assert(is(uint == typeof(INT_AND_UINT())));
  static assert(is(c_long == typeof(INT_AND_LONG())));
  static assert(is(c_ulong == typeof(INT_AND_ULONG())));
  static assert(is(long == typeof(INT_AND_LLONG())));
  static assert(is(ulong == typeof(INT_AND_ULLONG())));
  static assert(is(int == typeof(BOOL_AND_BOOL())));

  static assert(is(int == typeof(EXPR_MULTIPLY())));
  static assert(is(int == typeof(EXPR_DIVIDE())));
  static assert(is(int == typeof(EXPR_PLUS())));
  static assert(is(int == typeof(EXPR_MINUS())));
  static assert(is(int == typeof(EXPR_LSHIFT())));
  static assert(is(int == typeof(EXPR_RSHIFT())));
  static assert(is(bool == typeof(EXPR_LT())));
  static assert(is(bool == typeof(EXPR_GT())));
  static assert(is(bool == typeof(EXPR_LTE())));
  static assert(is(bool == typeof(EXPR_GTE())));
  static assert(is(bool == typeof(EXPR_INEQUALITY())));
  static assert(is(bool == typeof(EXPR_EQUALITY())));
  static assert(is(int == typeof(EXPR_AND())));
  static assert(is(int == typeof(EXPR_XOR())));
  static assert(is(int == typeof(EXPR_OR())));
  static assert(is(bool == typeof(EXPR_LAND())));
  static assert(is(bool == typeof(EXPR_LOR())));
  static assert(is(double == typeof(EXPR_CONDITIONAL())));
  static assert(is(double == typeof(EXPR_MIXED1())));
  static assert(is(int == typeof(EXPR_WCHAR_MAX())));
  static assert(is(int == typeof(EXPR_WCHAR_MIN())));
}
