Blame isl-0.16.1/isl_test_imath.c

Packit fb9d21
/*
Packit fb9d21
 * Copyright 2015 INRIA Paris-Rocquencourt
Packit fb9d21
 *
Packit fb9d21
 * Use of this software is governed by the MIT license
Packit fb9d21
 *
Packit fb9d21
 * Written by Michael Kruse, INRIA Paris-Rocquencourt,
Packit fb9d21
 * Domaine de Voluceau, Rocquenqourt, B.P. 105,
Packit fb9d21
 * 78153 Le Chesnay Cedex France
Packit fb9d21
 */
Packit fb9d21
Packit fb9d21
#include <limits.h>
Packit fb9d21
#include <assert.h>
Packit fb9d21
#include <isl_imath.h>
Packit fb9d21
Packit fb9d21
/* This constant is not defined in limits.h, but IMath uses it */
Packit fb9d21
#define ULONG_MIN 0ul
Packit fb9d21
Packit fb9d21
/* Test the IMath internals assumed by the imath implementation of isl_int.
Packit fb9d21
 *
Packit fb9d21
 * In particular, we test the ranges of IMath-defined types.
Packit fb9d21
 *
Packit fb9d21
 * Also, isl uses the existence and function of imath's struct
Packit fb9d21
 * fields. The digits are stored with less significant digits at lower array
Packit fb9d21
 * indices. Where they are stored (on the heap or in the field 'single') does
Packit fb9d21
 * not matter.
Packit fb9d21
 */
Packit fb9d21
int test_imath_internals()
Packit fb9d21
{
Packit fb9d21
	mpz_t val;
Packit fb9d21
	mp_result retval;
Packit fb9d21
Packit fb9d21
	assert(sizeof(mp_small) == sizeof(long));
Packit fb9d21
	assert(MP_SMALL_MIN == LONG_MIN);
Packit fb9d21
	assert(MP_SMALL_MAX == LONG_MAX);
Packit fb9d21
Packit fb9d21
	assert(sizeof(mp_usmall) == sizeof(unsigned long));
Packit fb9d21
	assert(MP_USMALL_MIN == ULONG_MIN);
Packit fb9d21
	assert(MP_USMALL_MAX == ULONG_MAX);
Packit fb9d21
Packit fb9d21
	retval = mp_int_init_value(&val, 0);
Packit fb9d21
	assert(retval == MP_OK);
Packit fb9d21
	assert(val.alloc >= val.used);
Packit fb9d21
	assert(val.used == 1);
Packit fb9d21
	assert(val.sign == MP_ZPOS);
Packit fb9d21
	assert(val.digits[0] == 0);
Packit fb9d21
Packit fb9d21
	retval = mp_int_set_value(&val, -1);
Packit fb9d21
	assert(retval == MP_OK);
Packit fb9d21
	assert(val.alloc >= val.used);
Packit fb9d21
	assert(val.used == 1);
Packit fb9d21
	assert(val.sign == MP_NEG);
Packit fb9d21
	assert(val.digits[0] == 1);
Packit fb9d21
Packit fb9d21
	retval = mp_int_set_value(&val, 1);
Packit fb9d21
	assert(retval == MP_OK);
Packit fb9d21
	assert(val.alloc >= val.used);
Packit fb9d21
	assert(val.used == 1);
Packit fb9d21
	assert(val.sign == MP_ZPOS);
Packit fb9d21
	assert(val.digits[0] == 1);
Packit fb9d21
Packit fb9d21
	retval = mp_int_mul_pow2(&val, sizeof(mp_digit) * CHAR_BIT, &val;;
Packit fb9d21
	assert(retval == MP_OK);
Packit fb9d21
	assert(val.alloc >= val.used);
Packit fb9d21
	assert(val.used == 2);
Packit fb9d21
	assert(val.sign == MP_ZPOS);
Packit fb9d21
	assert(val.digits[0] == 0);
Packit fb9d21
	assert(val.digits[1] == 1);
Packit fb9d21
Packit fb9d21
	mp_int_clear(&val;;
Packit fb9d21
	return 0;
Packit fb9d21
}
Packit fb9d21
Packit fb9d21
int main()
Packit fb9d21
{
Packit fb9d21
	if (test_imath_internals() < 0)
Packit fb9d21
		return -1;
Packit fb9d21
Packit fb9d21
	return 0;
Packit fb9d21
}