Annotation of OpenXM_contrib/gmp/tests/mpz/t-popcount.c, Revision 1.1.1.1
1.1 ohara 1: /* Test mpz_popcount.
2:
3: Copyright 2001 Free Software Foundation, Inc.
4:
5: This file is part of the GNU MP Library.
6:
7: The GNU MP Library is free software; you can redistribute it and/or modify
8: it under the terms of the GNU Lesser General Public License as published by
9: the Free Software Foundation; either version 2.1 of the License, or (at your
10: option) any later version.
11:
12: The GNU MP Library is distributed in the hope that it will be useful, but
13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15: License for more details.
16:
17: You should have received a copy of the GNU Lesser General Public License
18: along with the GNU MP Library; see the file COPYING.LIB. If not, write to
19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20: MA 02111-1307, USA. */
21:
22: #include <stdio.h>
23: #include <stdlib.h>
24: #include "gmp.h"
25: #include "gmp-impl.h"
26: #include "tests.h"
27:
28:
29:
30: void
31: check_onebit (void)
32: {
33: mpz_t n;
34: unsigned long i, got;
35:
36: mpz_init (n);
37: for (i = 0; i < 5 * BITS_PER_MP_LIMB; i++)
38: {
39: mpz_setbit (n, i);
40: got = mpz_popcount (n);
41: if (got != 1)
42: {
43: printf ("mpz_popcount wrong on single bit at %lu\n", i);
44: printf (" got %lu, want 1\n", got);
45: abort();
46: }
47: mpz_clrbit (n, i);
48: }
49: mpz_clear (n);
50: }
51:
52:
53: void
54: check_data (void)
55: {
56: static const struct {
57: const char *n;
58: unsigned long want;
59: } data[] = {
60: { "-1", ~ (unsigned long) 0 },
61: { "-12345678", ~ (unsigned long) 0 },
62: { "0", 0 },
63: { "1", 1 },
64: { "3", 2 },
65: { "5", 2 },
66: { "0xFFFF", 16 },
67: { "0xFFFFFFFF", 32 },
68: { "0xFFFFFFFFFFFFFFFF", 64 },
69: { "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 128 },
70: };
71:
72: unsigned long got;
73: int i;
74: mpz_t n;
75:
76: mpz_init (n);
77: for (i = 0; i < numberof (data); i++)
78: {
79: mpz_set_str_or_abort (n, data[i].n, 0);
80: got = mpz_popcount (n);
81: if (got != data[i].want)
82: {
83: printf ("mpz_popcount wrong at data[%d]\n", i);
84: printf (" n \"%s\"\n", data[i].n);
85: printf (" "); mpz_out_str (stdout, 10, n); printf ("\n");
86: printf (" 0x"); mpz_out_str (stdout, 16, n); printf ("\n");
87: printf (" got %lu\n", got);
88: printf (" want %lu\n", data[i].want);
89: abort();
90: }
91: }
92: mpz_clear (n);
93: }
94:
95:
96: int
97: main (void)
98: {
99: tests_start ();
100:
101: check_onebit ();
102: check_data ();
103:
104: tests_end ();
105: exit (0);
106: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>