/* Test mpz_hamdist.
Copyright 2001 , 2002 Free Software Foundation , Inc .
This file is part of the GNU MP Library test suite .
The GNU MP Library test suite is free software ; you can redistribute it
and / or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation ; either version 3 of the License ,
or ( at your option ) any later version .
The GNU MP Library test suite is distributed in the hope that it will be
useful , but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU General
Public License for more details .
You should have received a copy of the GNU General Public License along with
the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */
#include <stdio.h>
#include <stdlib.h>
#include "gmp-impl.h"
#include "tests.h"
void
check_twobits (
void )
{
unsigned long i, j, got, want;
mpz_t x, y;
mpz_init (x);
mpz_init (y);
for (i =
0 ; i <
5 * GMP_NUMB_BITS; i++)
{
for (j =
0 ; j <
5 * GMP_NUMB_BITS; j++)
{
mpz_set_ui (x,
0 L);
mpz_setbit (x, i);
mpz_set_ui (y,
0 L);
mpz_setbit (y, j);
want =
2 * (i != j);
got = mpz_hamdist (x, y);
if (got != want)
{
printf (
"mpz_hamdist wrong on 2 bits pos/pos\n" );
wrong:
printf (
" i %lu\n" , i);
printf (
" j %lu\n" , j);
printf (
" got %lu\n" , got);
printf (
" want %lu\n" , want);
mpz_trace (
" x " , x);
mpz_trace (
" y " , y);
abort();
}
mpz_neg (x, x);
mpz_neg (y, y);
want = ABS ((
long ) (i-j));
got = mpz_hamdist (x, y);
if (got != want)
{
printf (
"mpz_hamdist wrong on 2 bits neg/neg\n" );
goto wrong;
}
}
}
mpz_clear (x);
mpz_clear (y);
}
void
check_rand (
void )
{
gmp_randstate_ptr rands = RANDS;
unsigned long got, want;
int i;
mpz_t x, y;
mpz_init (x);
mpz_init (y);
for (i =
0 ; i <
2000 ; i++)
{
mpz_erandomb (x, rands,
6 * GMP_NUMB_BITS);
mpz_negrandom (x, rands);
mpz_mul_2exp (x, x, urandom() % (
4 * GMP_NUMB_BITS));
mpz_erandomb (y, rands,
6 * GMP_NUMB_BITS);
mpz_negrandom (y, rands);
mpz_mul_2exp (y, y, urandom() % (
4 * GMP_NUMB_BITS));
want = refmpz_hamdist (x, y);
got = mpz_hamdist (x, y);
if (got != want)
{
printf (
"mpz_hamdist wrong on random\n" );
printf (
" got %lu\n" , got);
printf (
" want %lu\n" , want);
mpz_trace (
" x " , x);
mpz_trace (
" y " , y);
abort();
}
}
mpz_clear (x);
mpz_clear (y);
}
int
main (
void )
{
tests_start ();
mp_trace_base = -
16 ;
check_twobits ();
check_rand ();
tests_end ();
exit (
0 );
}
Messung V0.5 in Prozent C=95 H=74 G=84
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland