1/* Test popc_limb. 2 3Copyright 2002 Free Software Foundation, Inc. 4 5This file is part of the GNU MP Library. 6 7The GNU MP Library is free software; you can redistribute it and/or modify 8it under the terms of the GNU Lesser General Public License as published by 9the Free Software Foundation; either version 3 of the License, or (at your 10option) any later version. 11 12The GNU MP Library is distributed in the hope that it will be useful, but 13WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 15License for more details. 16 17You should have received a copy of the GNU Lesser General Public License 18along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ 19 20#include <stdio.h> 21#include <stdlib.h> 22 23#include "gmp.h" 24#include "gmp-impl.h" 25#include "tests.h" 26 27 28int 29main (void) 30{ 31 mp_limb_t src, want, got; 32 int i; 33 34 tests_start (); 35 mp_trace_base = -16; 36 37 for (i = 0; i < GMP_LIMB_BITS; i++) 38 { 39 src = CNST_LIMB(1) << i; 40 want = 1; 41 42 popc_limb (got, src); 43 if (got != want) 44 { 45 error: 46 printf ("popc_limb wrong result\n"); 47 mpn_trace (" src ", &src, (mp_size_t) 1); 48 mpn_trace (" want", &want, (mp_size_t) 1); 49 mpn_trace (" got ", &got, (mp_size_t) 1); 50 abort (); 51 } 52 } 53 54 for (i = 0; i < 100; i++) 55 { 56 mpn_random2 (&src, (mp_size_t) 1); 57 want = ref_popc_limb (src); 58 59 popc_limb (got, src); 60 if (got != want) 61 goto error; 62 } 63 64 tests_end (); 65 exit (0); 66} 67