79 lines · c
1/*2 * Copyright 2015 INRIA Paris-Rocquencourt3 *4 * Use of this software is governed by the MIT license5 *6 * Written by Michael Kruse, INRIA Paris-Rocquencourt,7 * Domaine de Voluceau, Rocquenqourt, B.P. 105,8 * 78153 Le Chesnay Cedex France9 */10 11#include <limits.h>12#include <assert.h>13#include <isl_imath.h>14 15/* This constant is not defined in limits.h, but IMath uses it */16#define ULONG_MIN 0ul17 18/* Test the IMath internals assumed by the imath implementation of isl_int.19 *20 * In particular, we test the ranges of IMath-defined types.21 *22 * Also, isl uses the existence and function of imath's struct23 * fields. The digits are stored with less significant digits at lower array24 * indices. Where they are stored (on the heap or in the field 'single') does25 * not matter.26 */27int test_imath_internals()28{29 mpz_t val;30 mp_result retval;31 32 assert(sizeof(mp_small) == sizeof(long));33 assert(MP_SMALL_MIN == LONG_MIN);34 assert(MP_SMALL_MAX == LONG_MAX);35 36 assert(sizeof(mp_usmall) == sizeof(unsigned long));37 assert(MP_USMALL_MAX == ULONG_MAX);38 39 retval = mp_int_init_value(&val, 0);40 assert(retval == MP_OK);41 assert(val.alloc >= val.used);42 assert(val.used == 1);43 assert(val.sign == MP_ZPOS);44 assert(val.digits[0] == 0);45 46 retval = mp_int_set_value(&val, -1);47 assert(retval == MP_OK);48 assert(val.alloc >= val.used);49 assert(val.used == 1);50 assert(val.sign == MP_NEG);51 assert(val.digits[0] == 1);52 53 retval = mp_int_set_value(&val, 1);54 assert(retval == MP_OK);55 assert(val.alloc >= val.used);56 assert(val.used == 1);57 assert(val.sign == MP_ZPOS);58 assert(val.digits[0] == 1);59 60 retval = mp_int_mul_pow2(&val, sizeof(mp_digit) * CHAR_BIT, &val);61 assert(retval == MP_OK);62 assert(val.alloc >= val.used);63 assert(val.used == 2);64 assert(val.sign == MP_ZPOS);65 assert(val.digits[0] == 0);66 assert(val.digits[1] == 1);67 68 mp_int_clear(&val);69 return 0;70}71 72int main()73{74 if (test_imath_internals() < 0)75 return -1;76 77 return 0;78}79