Exemplo n.º 1
0
int main(int argc, char* argv[]) {
  mpz_t a, b;
  int result;

  mp_int_init_value(&a, 1);
  mp_int_init_value(&b, 16);

  mp_int_swap(&a, &b);
  result = (a.digits == &(a.single) &&
	    b.digits == &(b.single) &&
	    a.digits[0] == 16 &&
	    b.digits[0] == 1);

  printf("REGRESSION: mp_int_swap() on self-stored values: %s\n",
	 result ? "OK" : "FAILED");

  mp_int_clear(&b);
  mp_int_clear(&a);
  return !result;
}
Exemplo n.º 2
0
char* IP2Location_read128(FILE *handle, uint32_t position) 
{
	uint32_t b96_127 = IP2Location_read32(handle, position);
	uint32_t b64_95 = IP2Location_read32(handle, position + 4); 
	uint32_t b32_63 = IP2Location_read32(handle, position + 8);
	uint32_t b1_31 = IP2Location_read32(handle, position + 12);

	mpz_t result, multiplier, mp96_127, mp64_95, mp32_63, mp1_31;
	mp_int_init(&result);
	mp_int_init(&multiplier);
	mp_int_init(&mp96_127);
	mp_int_init(&mp64_95);
	mp_int_init(&mp32_63);
	mp_int_init(&mp1_31);
	
	mp_int_init_value(&multiplier, 65536);
	mp_int_mul(&multiplier, &multiplier, &multiplier);
	mp_int_init_value(&mp96_127, b96_127);
	mp_int_init_value(&mp64_95, b64_95);
	mp_int_init_value(&mp32_63, b32_63);
	mp_int_init_value(&mp1_31, b1_31);

	mp_int_mul(&mp1_31, &multiplier, &mp1_31);
	mp_int_mul(&mp1_31, &multiplier, &mp1_31);
	mp_int_mul(&mp1_31, &multiplier, &mp1_31);

	mp_int_mul(&mp32_63, &multiplier, &mp32_63);
	mp_int_mul(&mp32_63, &multiplier, &mp32_63);

	mp_int_mul(&mp64_95, &multiplier, &mp64_95);
	
	mp_int_add(&mp1_31, &mp32_63, &result);
	mp_int_add(&result, &mp64_95, &result);
	mp_int_add(&result, &mp96_127, &result);
	return IP2Location_mp2string(result);
}
Exemplo n.º 3
0
/* Test the IMath internals assumed by the imath implementation of isl_int.
 *
 * In particular, we test the ranges of IMath-defined types.
 *
 * Also, isl uses the existence and function of imath's struct
 * fields. The digits are stored with less significant digits at lower array
 * indices. Where they are stored (on the heap or in the field 'single') does
 * not matter.
 */
int test_imath_internals()
{
	mpz_t val;
	mp_result retval;

	assert(sizeof(mp_small) == sizeof(long));
	assert(MP_SMALL_MIN == LONG_MIN);
	assert(MP_SMALL_MAX == LONG_MAX);

	assert(sizeof(mp_usmall) == sizeof(unsigned long));
	assert(MP_USMALL_MIN == ULONG_MIN);
	assert(MP_USMALL_MAX == ULONG_MAX);

	retval = mp_int_init_value(&val, 0);
	assert(retval == MP_OK);
	assert(val.alloc >= val.used);
	assert(val.used == 1);
	assert(val.sign == MP_ZPOS);
	assert(val.digits[0] == 0);

	retval = mp_int_set_value(&val, -1);
	assert(retval == MP_OK);
	assert(val.alloc >= val.used);
	assert(val.used == 1);
	assert(val.sign == MP_NEG);
	assert(val.digits[0] == 1);

	retval = mp_int_set_value(&val, 1);
	assert(retval == MP_OK);
	assert(val.alloc >= val.used);
	assert(val.used == 1);
	assert(val.sign == MP_ZPOS);
	assert(val.digits[0] == 1);

	retval = mp_int_mul_pow2(&val, sizeof(mp_digit) * CHAR_BIT, &val);
	assert(retval == MP_OK);
	assert(val.alloc >= val.used);
	assert(val.used == 2);
	assert(val.sign == MP_ZPOS);
	assert(val.digits[0] == 0);
	assert(val.digits[1] == 1);

	mp_int_clear(&val);
	return 0;
}