fp-int-convert.h
来自「用于进行gcc测试」· C头文件 代码 · 共 90 行
H
90 行
/* Test floating-point conversions. *//* Origin: Joseph Myers <joseph@codesourcery.com> */#include <limits.h>extern void abort (void);extern void exit (int);/* Not all platforms support TImode integers; logic as in gcc.dg/titype-1.c. */#if defined(__LP64__) && !defined(__hppa__)typedef int TItype __attribute__ ((mode (TI)));typedef unsigned int UTItype __attribute__ ((mode (TI)));#elsetypedef long TItype;typedef unsigned long UTItype;#endif/* TEST_I_F(I, U, F, P) tests conversions between the pair of signed and unsigned integer types I and U and the floating-point type F, where P is the binary precision of the floating point type. We test conversions of the values 0, 1, 0x7...f, 0x8...0, 0xf...f. We also test conversions of values half way inbetween two representable values (rounding both ways), just above half way, and just below half way. */#define TEST_I_F(I, U, F, P) \do { \ TEST_I_F_VAL (I, F, (I)0, 1); \ TEST_I_F_VAL (I, F, (I)1, 1); \ TEST_I_F_VAL (I, F, (I)(((U)~(U)0) >> 1), P_OK1 (P, I)); \ TEST_I_F_VAL (I, F, (I)(U)~(((U)~(U)0) >> 1), 1); \ TEST_I_F_VAL (I, F, (I)(U)~(U)0, P_OK (P, I)); \ TEST_I_F_VAL (I, F, HVAL0S (P, I), P_OK (P, I)); \ TEST_I_F_VAL (I, F, HVAL0S (P, I) + 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, HVAL0S (P, I) - 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, HVAL1S (P, I), P_OK (P, I)); \ TEST_I_F_VAL (I, F, HVAL1S (P, I) + 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, HVAL1S (P, I) - 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, -HVAL0S (P, I), P_OK (P, I)); \ TEST_I_F_VAL (I, F, -HVAL0S (P, I) + 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, -HVAL0S (P, I) - 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, -HVAL1S (P, I), P_OK (P, I)); \ TEST_I_F_VAL (I, F, -HVAL1S (P, I) + 1, P_OK (P, I)); \ TEST_I_F_VAL (I, F, -HVAL1S (P, I) - 1, P_OK (P, I)); \ TEST_I_F_VAL (U, F, (U)0, 1); \ TEST_I_F_VAL (U, F, (U)1, 1); \ TEST_I_F_VAL (U, F, (U)(((U)~(U)0) >> 1), P_OK1 (P, U)); \ TEST_I_F_VAL (U, F, (U)~(((U)~(U)0) >> 1), 1); \ TEST_I_F_VAL (U, F, (U)~(U)0, P_OK (P, U)); \ TEST_I_F_VAL (U, F, HVAL0U (P, U), P_OK (P, U)); \ TEST_I_F_VAL (U, F, HVAL0U (P, U) + 1, P_OK (P, U)); \ TEST_I_F_VAL (U, F, HVAL0U (P, U) - 1, P_OK (P, U)); \ TEST_I_F_VAL (U, F, HVAL1U (P, U), P_OK (P, U)); \ TEST_I_F_VAL (U, F, HVAL1U (P, U) + 1, P_OK (P, U)); \ TEST_I_F_VAL (U, F, HVAL1U (P, U) - 1, P_OK (P, U)); \} while (0)#define P_OK(P, T) ((P) >= sizeof(T) * CHAR_BIT)#define P_OK1(P, T) ((P) >= sizeof(T) * CHAR_BIT - 1)#define HVAL0U(P, U) (U)(P_OK (P, U) \ ? (U)1 \ : (((U)1 << (sizeof(U) * CHAR_BIT - 1)) \ + ((U)1 << (sizeof(U) * CHAR_BIT - 1 - P))))#define HVAL1U(P, U) (U)(P_OK (P, U) \ ? (U)1 \ : (((U)1 << (sizeof(U) * CHAR_BIT - 1)) \ + ((U)3 << (sizeof(U) * CHAR_BIT - 1 - P))))#define HVAL0S(P, S) (S)(P_OK1 (P, S) \ ? (S)1 \ : (((S)1 << (sizeof(S) * CHAR_BIT - 2)) \ + ((S)1 << (sizeof(S) * CHAR_BIT - 2 - P))))#define HVAL1S(P, S) (S)(P_OK1 (P, S) \ ? (S)1 \ : (((S)1 << (sizeof(S) * CHAR_BIT - 2)) \ + ((S)3 << (sizeof(S) * CHAR_BIT - 2 - P))))#define TEST_I_F_VAL(IT, FT, VAL, PREC_OK) \do { \ static volatile IT ivin, ivout; \ static volatile FT fv1, fv2; \ ivin = (VAL); \ fv1 = (VAL); \ fv2 = ivin; \ ivout = fv2; \ if (ivin != (VAL) \ || ((PREC_OK) && ivout != ivin) \ || ((PREC_OK) && ivout != (VAL)) \ || fv1 != (VAL) || fv2 != (VAL) || fv1 != fv2) \ abort (); \} while (0)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?