diff options
author | Kevin Ryde <user42@zip.com.au> | 2001-01-07 21:14:07 +0100 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2001-01-07 21:14:07 +0100 |
commit | 0a900d49d91879bc6b58fc3090fa892e2487ebc0 (patch) | |
tree | 797b6d695e1a0a27ccf0ed5ae824baa32922cb48 /tests/t-constants.c | |
parent | d0d389f35e77f0fde66ca4f0bfa3e949230f101a (diff) | |
download | gmp-0a900d49d91879bc6b58fc3090fa892e2487ebc0.tar.gz |
More of:
* tests/t-constants.c: Add checks of HIGHBIT, MAX and MIN constants,
simplify ANSI vs K&R stringizing, use correct printf format types, do
all tests before aborting.
Diffstat (limited to 'tests/t-constants.c')
-rw-r--r-- | tests/t-constants.c | 122 |
1 files changed, 71 insertions, 51 deletions
diff --git a/tests/t-constants.c b/tests/t-constants.c index efd38fdfd..57d8d601b 100644 --- a/tests/t-constants.c +++ b/tests/t-constants.c @@ -28,9 +28,15 @@ MA 02111-1307, USA. #ifdef _LONG_LONG_LIMB -#define LL(l,ll) ll +#define LL(l,ll) ll #else -#define LL(l,ll) l +#define LL(l,ll) l +#endif + +#if __GMP_MP_SIZE_T_INT +#define SS(i,l) i +#else +#define SS(i,l) l #endif @@ -91,55 +97,69 @@ MA 02111-1307, USA. } while (0) -#define CHECK_HIGHBIT(value, type) \ - do { \ - type n = value; \ - if (n == 0) \ - { \ - printf ("%s == 0\n", #value); \ - error = 1; \ - } \ - n <<= 1; \ - if (n != 0) \ - { \ - printf ("%s << 1 != 0\n", #value); \ - error = 1; \ - } \ - } while (0) - - -#define CHECK_MAX_S(max_val, max_name, min_val, min_name, type) \ +#define CHECK_HIGHBIT_S(value, value_name, type, format) \ do { \ - type n = max_val; \ - n++; \ - if (n != min_val) \ + type n = value; \ + if (n == 0) \ { \ - printf ("%s + 1 != %s\n", max_name, min_name); \ + printf ("%s == 0\n", value_name); \ error = 1; \ } \ - if (max_val <= min_val) \ + n <<= 1; \ + if (n != 0) \ { \ - printf ("%s <= %s\n", max_name, min_name); \ + printf ("%s << 1 = ", value_name); \ + printf (format, n); \ + printf (" != 0\n"); \ error = 1; \ } \ } while (0) +#define CHECK_MAX_S(max_val, max_name, min_val, min_name, type, format) \ + do { \ + type maxval = max_val; \ + type minval = min_val; \ + type n = maxval; \ + n++; \ + if (n != minval) \ + { \ + printf ("%s + 1 = ", max_name); \ + printf (format, n); \ + printf (" != %s = ", min_name); \ + printf (format, minval); \ + printf ("\n"); \ + error = 1; \ + } \ + if (maxval <= minval) \ + { \ + printf ("%s = ", max_name); \ + printf (format, maxval); \ + printf (" <= %s = ", min_name); \ + printf (format, minval); \ + printf ("\n"); \ + error = 1; \ + } \ + } while (0) + + /* FIXME: printf formats not right for a long long limb. */ #if HAVE_STRINGIZE -#define CHECK_LIMB(x,y) CHECK_LIMB_S (x, #x, y, #y) -#define CHECK_INT(x,y) CHECK_INT_S (x, #x, y, #y) -#define CHECK_CONDITION(x) CHECK_CONDITION_S (x, #x) -#define CHECK_BITS(c,t) CHECK_BITS_S (c, #c, t) -#define CHECK_MAX(m,n,t) CHECK_MAX_S (m, #m, n, #n, t) +#define CHECK_LIMB(x,y) CHECK_LIMB_S (x, #x, y, #y) +#define CHECK_INT(x,y) CHECK_INT_S (x, #x, y, #y) +#define CHECK_CONDITION(x) CHECK_CONDITION_S (x, #x) +#define CHECK_BITS(c,t) CHECK_BITS_S (c, #c, t) +#define CHECK_MAX(m,n,t,f) CHECK_MAX_S (m, #m, n, #n, t, f) +#define CHECK_HIGHBIT(n,t,f) CHECK_HIGHBIT_S (n, #n, t, f) #else -#define CHECK_LIMB(x,y) CHECK_LIMB_S (x, "x", y, "y") -#define CHECK_INT(x,y) CHECK_INT_S (x, "x", y, "y") -#define CHECK_CONDITION(x) CHECK_CONDITION_S (x, "x") -#define CHECK_BITS(c,t) CHECK_BITS_S (c, "c", t) -#define CHECK_MAX(m,n,t) CHECK_MAX_S (m, "m", n, "n", t) +#define CHECK_LIMB(x,y) CHECK_LIMB_S (x, "x", y, "y") +#define CHECK_INT(x,y) CHECK_INT_S (x, "x", y, "y") +#define CHECK_CONDITION(x) CHECK_CONDITION_S (x, "x") +#define CHECK_BITS(c,t) CHECK_BITS_S (c, "c", t) +#define CHECK_MAX(m,n,t,f) CHECK_MAX_S (m, "m", n, "n", t, f) +#define CHECK_HIGHBIT(n,t,f) CHECK_HIGHBIT_S (n, "n", t, f) #endif @@ -157,21 +177,21 @@ main (void) CHECK_BITS (BITS_PER_SHORTINT, short); CHECK_BITS (BITS_PER_CHAR, char); - CHECK_HIGHBIT (MP_LIMB_T_HIGHBIT, mp_limb_t); - CHECK_HIGHBIT (ULONG_HIGHBIT, unsigned long); - CHECK_HIGHBIT (UINT_HIGHBIT, unsigned int); - CHECK_HIGHBIT (USHRT_HIGHBIT, unsigned short); - CHECK_HIGHBIT (LONG_HIGHBIT, long); - CHECK_HIGHBIT (INT_HIGHBIT, int); - CHECK_HIGHBIT (SHRT_HIGHBIT, short); - - CHECK_MAX (LONG_MAX, LONG_MIN, long); - CHECK_MAX (INT_MAX, INT_MIN, int); - CHECK_MAX (SHRT_MAX, SHRT_MIN, short); - CHECK_MAX (ULONG_MAX, 0, unsigned long); - CHECK_MAX (UINT_MAX, 0, unsigned int); - CHECK_MAX (USHRT_MAX, 0, unsigned short); - CHECK_MAX (MP_SIZE_T_MAX, MP_SIZE_T_MIN, mp_size_t); + CHECK_HIGHBIT (MP_LIMB_T_HIGHBIT, mp_limb_t, LL("0x%lX","0x%lX")); + CHECK_HIGHBIT (ULONG_HIGHBIT, unsigned long, "0x%lX"); + CHECK_HIGHBIT (UINT_HIGHBIT, unsigned int, "0x%X"); + CHECK_HIGHBIT (USHRT_HIGHBIT, unsigned short, "0x%hX"); + CHECK_HIGHBIT (LONG_HIGHBIT, long, "0x%lX"); + CHECK_HIGHBIT (INT_HIGHBIT, int, "0x%X"); + CHECK_HIGHBIT (SHRT_HIGHBIT, short, "0x%hX"); + + CHECK_MAX (LONG_MAX, LONG_MIN, long, "%ld"); + CHECK_MAX (INT_MAX, INT_MIN, int, "%d"); + CHECK_MAX (SHRT_MAX, SHRT_MIN, short, "%hd"); + CHECK_MAX (ULONG_MAX, 0, unsigned long, "%lu"); + CHECK_MAX (UINT_MAX, 0, unsigned int, "%u"); + CHECK_MAX (USHRT_MAX, 0, unsigned short, "%hu"); + CHECK_MAX (MP_SIZE_T_MAX, MP_SIZE_T_MIN, mp_size_t, SS("%d","%ld")); /* UHWtype should have at least enough bits for half a UWtype */ { |