1/* Test ULONG_PARITY.
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#include "gmp.h"
23#include "gmp-impl.h"
24#include "tests.h"
25
26void
27check_one (int want, unsigned long n)
28{
29  int  got;
30  ULONG_PARITY (got, n);
31  if (got != want)
32    {
33      printf ("ULONG_PARITY wrong\n");
34      printf ("  n    %lX\n", n);
35      printf ("  want %d\n", want);
36      printf ("  got  %d\n", got);
37      abort ();
38    }
39}
40
41void
42check_various (void)
43{
44  int  i;
45
46  check_one (0, 0L);
47  check_one (BITS_PER_ULONG & 1, ULONG_MAX);
48  check_one (0, 0x11L);
49  check_one (1, 0x111L);
50  check_one (1, 0x3111L);
51
52  for (i = 0; i < BITS_PER_ULONG; i++)
53    check_one (1, 1L << i);
54}
55
56
57int
58main (int argc, char *argv[])
59{
60  tests_start ();
61  mp_trace_base = 16;
62
63  check_various ();
64
65  tests_end ();
66  exit (0);
67}
68