123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /*
- Copyright Kitware, Inc.
- Distributed under the OSI-approved BSD 3-Clause License.
- See accompanying file Copyright.txt for details.
- */
- #include <stdio.h>
- #include <string.h>
- #if defined(_MSC_VER)
- # pragma warning (push)
- # pragma warning (disable:4309) /* static_cast trunction of constant value */
- # pragma warning (disable:4310) /* cast truncates constant value */
- #endif
- #ifdef __cplusplus
- # define LANG "C++ "
- #else
- # define LANG "C "
- #endif
- #if defined(__cplusplus) && !defined(__BORLANDC__)
- # define STATIC_CAST(t,v) static_cast<t>(v)
- #else
- # define STATIC_CAST(t,v) (t)(v)
- #endif
- #define VALUE(T, U) STATIC_CAST(T, STATIC_CAST(U, 0xab) << ((sizeof(T)-1)<<3))
- #define TEST_C_(C, V, PRI, T, U) \
- { \
- T const x = VALUE(T, U); \
- T y = C(V); \
- printf(LANG #C ":" \
- " expression [%" KWIML_INT_PRI##PRI "]," \
- " literal [%" KWIML_INT_PRI##PRI "]", x, y); \
- if(x == y) \
- { \
- printf(", PASSED\n"); \
- } \
- else \
- { \
- printf(", FAILED\n"); \
- result = 0; \
- } \
- }
- #define TEST_PRI_(PRI, T, U, STR) \
- { \
- T const x = VALUE(T, U); \
- char const* str = STR; \
- sprintf(buf, "%" KWIML_INT_PRI##PRI, x); \
- printf(LANG "KWIML_INT_PRI" #PRI ":" \
- " expected [%s], got [%s]", str, buf); \
- if(strcmp(str, buf) == 0) \
- { \
- printf(", PASSED\n"); \
- } \
- else \
- { \
- printf(", FAILED\n"); \
- result = 0; \
- } \
- }
- #define TEST_SCN_(SCN, T, U, STR) TEST_SCN2_(SCN, SCN, T, U, STR)
- #define TEST_SCN2_(PRI, SCN, T, U, STR) \
- { \
- T const x = VALUE(T, U); \
- T y; \
- char const* str = STR; \
- if(sscanf(str, "%" KWIML_INT_SCN##SCN, &y) != 1) \
- { \
- y = 0; \
- } \
- printf(LANG "KWIML_INT_SCN" #SCN ":" \
- " expected [%" KWIML_INT_PRI##PRI "]," \
- " got [%" KWIML_INT_PRI##PRI "]", x, y); \
- if(x == y) \
- { \
- printf(", PASSED\n"); \
- } \
- else \
- { \
- printf(", FAILED\n"); \
- result = 0; \
- } \
- }
- #define TEST_(FMT, T, U, STR) TEST2_(FMT, FMT, T, U, STR)
- #define TEST2_(PRI, SCN, T, U, STR) \
- TEST_PRI_(PRI, T, U, STR) \
- TEST_SCN2_(PRI, SCN, T, U, STR)
- /* Concatenate T and U now to avoid expanding them. */
- #define TEST(FMT, T, U, STR) \
- TEST_(FMT, KWIML_INT_##T, KWIML_INT_##U, STR)
- #define TEST2(PRI, SCN, T, U, STR) \
- TEST2_(PRI, SCN, KWIML_INT_##T, KWIML_INT_##U, STR)
- #define TEST_C(C, V, PRI, T, U) \
- TEST_C_(KWIML_INT_##C, V, PRI, KWIML_INT_##T, KWIML_INT_##U)
- #define TEST_PRI(PRI, T, U, STR) \
- TEST_PRI_(PRI, KWIML_INT_##T, KWIML_INT_##U, STR)
- #define TEST_SCN(SCN, T, U, STR) \
- TEST_SCN_(SCN, KWIML_INT_##T, KWIML_INT_##U, STR)
- #define TEST_SCN2(PRI, SCN, T, U, STR) \
- TEST_SCN2_(PRI, SCN, KWIML_INT_##T, KWIML_INT_##U, STR)
- static int test_int_format(void)
- {
- int result = 1;
- char buf[256];
- TEST_PRI(i8, int8_t, uint8_t, "-85")
- #if defined(KWIML_INT_SCNi8)
- TEST_SCN(i8, int8_t, uint8_t, "-85")
- #endif
- TEST_PRI(d8, int8_t, uint8_t, "-85")
- #if defined(KWIML_INT_SCNd8)
- TEST_SCN(d8, int8_t, uint8_t, "-85")
- #endif
- TEST_PRI(o8, uint8_t, uint8_t, "253")
- #if defined(KWIML_INT_SCNo8)
- TEST_SCN(o8, uint8_t, uint8_t, "253")
- #endif
- TEST_PRI(u8, uint8_t, uint8_t, "171")
- #if defined(KWIML_INT_SCNu8)
- TEST_SCN(u8, uint8_t, uint8_t, "171")
- #endif
- TEST_PRI(x8, uint8_t, uint8_t, "ab")
- TEST_PRI(X8, uint8_t, uint8_t, "AB")
- #if defined(KWIML_INT_SCNx8)
- TEST_SCN(x8, uint8_t, uint8_t, "ab")
- TEST_SCN2(X8, x8, uint8_t, uint8_t, "AB")
- #endif
- TEST(i16, int16_t, uint16_t, "-21760")
- TEST(d16, int16_t, uint16_t, "-21760")
- TEST(o16, uint16_t, uint16_t, "125400")
- TEST(u16, uint16_t, uint16_t, "43776")
- TEST(x16, uint16_t, uint16_t, "ab00")
- TEST2(X16, x16, uint16_t, uint16_t, "AB00")
- TEST(i32, int32_t, uint32_t, "-1426063360")
- TEST(d32, int32_t, uint32_t, "-1426063360")
- TEST(o32, uint32_t, uint32_t, "25300000000")
- TEST(u32, uint32_t, uint32_t, "2868903936")
- TEST(x32, uint32_t, uint32_t, "ab000000")
- TEST2(X32, x32, uint32_t, uint32_t, "AB000000")
- TEST_PRI(i64, int64_t, uint64_t, "-6124895493223874560")
- #if defined(KWIML_INT_SCNi64)
- TEST_SCN(i64, int64_t, uint64_t, "-6124895493223874560")
- #endif
- TEST_PRI(d64, int64_t, uint64_t, "-6124895493223874560")
- #if defined(KWIML_INT_SCNd64)
- TEST_SCN(d64, int64_t, uint64_t, "-6124895493223874560")
- #endif
- TEST_PRI(o64, uint64_t, uint64_t, "1254000000000000000000")
- #if defined(KWIML_INT_SCNo64)
- TEST_SCN(o64, uint64_t, uint64_t, "1254000000000000000000")
- #endif
- TEST_PRI(u64, uint64_t, uint64_t, "12321848580485677056")
- #if defined(KWIML_INT_SCNu64)
- TEST_SCN(u64, uint64_t, uint64_t, "12321848580485677056")
- #endif
- TEST_PRI(x64, uint64_t, uint64_t, "ab00000000000000")
- TEST_PRI(X64, uint64_t, uint64_t, "AB00000000000000")
- #if defined(KWIML_INT_SCNx64)
- TEST_SCN(x64, uint64_t, uint64_t, "ab00000000000000")
- TEST_SCN2(X64, x64, uint64_t, uint64_t, "AB00000000000000")
- #endif
- #if !defined(KWIML_INT_NO_INTPTR_T)
- # if KWIML_ABI_SIZEOF_DATA_PTR == 4
- TEST(iPTR, intptr_t, uint32_t, "-1426063360")
- TEST(dPTR, intptr_t, uint32_t, "-1426063360")
- # else
- TEST(iPTR, intptr_t, uint64_t, "-6124895493223874560")
- TEST(dPTR, intptr_t, uint64_t, "-6124895493223874560")
- # endif
- #endif
- #if !defined(KWIML_INT_NO_UINTPTR_T)
- # if KWIML_ABI_SIZEOF_DATA_PTR == 4
- TEST(oPTR, uintptr_t, uintptr_t, "25300000000")
- TEST(uPTR, uintptr_t, uintptr_t, "2868903936")
- TEST(xPTR, uintptr_t, uintptr_t, "ab000000")
- TEST2(XPTR, xPTR, uintptr_t, uintptr_t, "AB000000")
- # else
- TEST(oPTR, uintptr_t, uintptr_t, "1254000000000000000000")
- TEST(uPTR, uintptr_t, uintptr_t, "12321848580485677056")
- TEST(xPTR, uintptr_t, uintptr_t, "ab00000000000000")
- TEST2(XPTR, xPTR, uintptr_t, uintptr_t, "AB00000000000000")
- # endif
- #endif
- TEST_C(INT8_C, -0x55, i8, int8_t, uint8_t)
- TEST_C(UINT8_C, 0xAB, u8, uint8_t, uint8_t)
- TEST_C(INT16_C, -0x5500, i16, int16_t, uint16_t)
- TEST_C(UINT16_C, 0xAB00, u16, uint16_t, uint16_t)
- TEST_C(INT32_C, -0x55000000, i32, int32_t, uint32_t)
- TEST_C(UINT32_C, 0xAB000000, u32, uint32_t, uint32_t)
- TEST_C(INT64_C, -0x5500000000000000, i64, int64_t, uint64_t)
- TEST_C(UINT64_C, 0xAB00000000000000, u64, uint64_t, uint64_t)
- return result;
- }
- #if defined(_MSC_VER)
- # pragma warning (pop)
- #endif
|