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