brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 2ac39ad Raw
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