Annotation of OpenXM_contrib/gmp/tests/mpz/convert.c, Revision 1.1
1.1 ! ohara 1: /* Test conversion using mpz_get_str and mpz_set_str.
! 2:
! 3: Copyright 1993, 1994, 1996, 1999, 2000, 2001, 2002 Free Software Foundation,
! 4: Inc.
! 5:
! 6: This file is part of the GNU MP Library.
! 7:
! 8: The GNU MP Library is free software; you can redistribute it and/or modify
! 9: it under the terms of the GNU Lesser General Public License as published by
! 10: the Free Software Foundation; either version 2.1 of the License, or (at your
! 11: option) any later version.
! 12:
! 13: The GNU MP Library is distributed in the hope that it will be useful, but
! 14: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
! 16: License for more details.
! 17:
! 18: You should have received a copy of the GNU Lesser General Public License
! 19: along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! 20: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 21: MA 02111-1307, USA. */
! 22:
! 23: #include <stdio.h>
! 24: #include <stdlib.h>
! 25: #include <string.h> /* for strlen */
! 26:
! 27: #include "gmp.h"
! 28: #include "gmp-impl.h"
! 29: #include "tests.h"
! 30:
! 31: void debug_mp _PROTO ((mpz_t, int));
! 32:
! 33: int
! 34: main (int argc, char **argv)
! 35: {
! 36: mpz_t op1, op2;
! 37: mp_size_t size;
! 38: int i;
! 39: int reps = 10000;
! 40: char *str, *buf;
! 41: int base;
! 42: gmp_randstate_ptr rands;
! 43: mpz_t bs;
! 44: unsigned long bsi, size_range;
! 45:
! 46: tests_start ();
! 47: rands = RANDS;
! 48:
! 49: mpz_init (bs);
! 50:
! 51: if (argc == 2)
! 52: reps = atoi (argv[1]);
! 53:
! 54: mpz_init (op1);
! 55: mpz_init (op2);
! 56:
! 57: for (i = 0; i < reps; i++)
! 58: {
! 59: /* 1. Generate random mpz_t and convert to a string and back to mpz_t
! 60: again. */
! 61: mpz_urandomb (bs, rands, 32);
! 62: size_range = mpz_get_ui (bs) % 12 + 2; /* 2..13 */
! 63: mpz_urandomb (bs, rands, size_range); /* 3..8191 bits */
! 64: size = mpz_get_ui (bs);
! 65: mpz_rrandomb (op1, rands, size);
! 66:
! 67: mpz_urandomb (bs, rands, 1);
! 68: bsi = mpz_get_ui (bs);
! 69: if ((bsi & 1) != 0)
! 70: mpz_neg (op1, op1);
! 71:
! 72: mpz_urandomb (bs, rands, 32);
! 73: bsi = mpz_get_ui (bs);
! 74: base = bsi % 36 + 1;
! 75: if (base == 1)
! 76: base = 0;
! 77:
! 78: str = mpz_get_str ((char *) 0, base, op1);
! 79: mpz_set_str_or_abort (op2, str, base);
! 80:
! 81: if (mpz_cmp (op1, op2))
! 82: {
! 83: fprintf (stderr, "ERROR, op1 and op2 different in test %d\n", i);
! 84: fprintf (stderr, "str = %s\n", str);
! 85: fprintf (stderr, "base = %d\n", base);
! 86: fprintf (stderr, "op1 = "); debug_mp (op1, -16);
! 87: fprintf (stderr, "op2 = "); debug_mp (op2, -16);
! 88: abort ();
! 89: }
! 90:
! 91: (*__gmp_free_func) (str, strlen (str) + 1);
! 92:
! 93: #if 0
! 94: /* 2. Generate random string and convert to mpz_t and back to a string
! 95: again. */
! 96: mpz_urandomb (bs, rands, 32);
! 97: size_range = mpz_get_ui (bs) % 10 + 2; /* 2..11 */
! 98: mpz_urandomb (bs, rands, size_range); /* 3..2047 bits */
! 99: len = mpz_get_ui (bs);
! 100: buf = (*__gmp_allocate_func) (len + 1);
! 101: string_urandomb (buf, len, base);
! 102: mpz_set_str_or_abort (op1, buf, base);
! 103: str = mpz_get_str ((char *) 0, base, op1);
! 104:
! 105: if (strcmp (str, buf) != 0)
! 106: {
! 107: fprintf (stderr, "ERROR, str and buf different\n");
! 108: fprintf (stderr, "str = %s\n", str);
! 109: fprintf (stderr, "buf = %s\n", buf);
! 110: fprintf (stderr, "base = %d\n", base);
! 111: fprintf (stderr, "op1 = "); debug_mp (op1, -16);
! 112: abort ();
! 113: }
! 114:
! 115: (*__gmp_free_func) (buf, len + 1);
! 116: (*__gmp_free_func) (str, strlen (str) + 1);
! 117: #endif
! 118: }
! 119:
! 120: mpz_clear (bs);
! 121: mpz_clear (op1);
! 122: mpz_clear (op2);
! 123:
! 124: tests_end ();
! 125: exit (0);
! 126: }
! 127:
! 128: void
! 129: debug_mp (mpz_t x, int base)
! 130: {
! 131: mpz_out_str (stderr, base, x); fputc ('\n', stderr);
! 132: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>