~ubuntu-branches/ubuntu/intrepid/parted/intrepid

« back to all changes in this revision

Viewing changes to gnulib/tests/test-count-one-bits.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2008-06-24 14:31:05 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20080624143105-rd7yw67a9qnvh51i
Tags: 1.8.8.git.2008.03.24-7ubuntu1
* Resynchronise with Debian (LP: #237568). Remaining changes:
  - swap-uuid.dpatch: Create UUIDs on new swap partitions.
  - gptsync.dpatch: On Intel Mac systems, write a synced MBR rather than a
    protective MBR.
  - Add -fno-stack-protector on sparc.
  - sparc-new-label.dpatch: Fix sparc disk label generation. This is
    required for LDOM and parallel installations with Solaris 10.
  - loop-partitions.dpatch: Loop devices can only have one partition, so
    don't generate device names such as "/dev/loop0p1".
  - unpartitioned-disks.dpatch: Don't try to call BLKPG ioctls on
    unpartitionable disks (only implemented for loop devices at the
    moment), as they will always fail.
  - When building with gcc-4.3, add -Wno-array-bounds to CFLAGS.
  - Cell partition tables are misdetected as pc98, so disable pc98 support
    on powerpc.
  - array-bounds.dpatch: Backport patch from git to allow building with
    gcc-4.3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2007 Free Software Foundation
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License as published by
 
6
 * the Free Software Foundation; either version 2, or (at your option)
 
7
 * any later version.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful,
 
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 * GNU General Public License for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software
 
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
17
 * 02110-1301, USA.  */
 
18
 
 
19
/* Written by Ben Pfaff.  */
 
20
 
 
21
#include <config.h>
 
22
 
 
23
#include "count-one-bits.h"
 
24
 
 
25
#include <limits.h>
 
26
#include <stdio.h>
 
27
#include <stdlib.h>
 
28
 
 
29
#define ASSERT(expr)                                            \
 
30
  do                                                            \
 
31
    {                                                           \
 
32
      if (!(expr))                                              \
 
33
        {                                                       \
 
34
          fprintf (stderr, "%s:%d: assertion \"%s\" failed\n",  \
 
35
                   __FILE__, __LINE__, #expr);                  \
 
36
          abort ();                                             \
 
37
        }                                                       \
 
38
    }                                                           \
 
39
  while (0)
 
40
 
 
41
#define UINT_BIT (sizeof (unsigned int) * CHAR_BIT)
 
42
#define ULONG_BIT (sizeof (unsigned long int) * CHAR_BIT)
 
43
#define ULLONG_BIT (sizeof (unsigned long long int) * CHAR_BIT)
 
44
 
 
45
#ifndef ULLONG_MAX
 
46
# define HALF (1ULL << (sizeof (unsigned long long int) * CHAR_BIT - 1))
 
47
# define ULLONG_MAX (HALF - 1 + HALF)
 
48
#endif
 
49
 
 
50
int
 
51
main (int argc, char *argv[])
 
52
{
 
53
  int i, j;
 
54
 
 
55
#define TEST_COUNT_ONE_BITS(FUNC, TYPE, BITS, MAX, ONE) \
 
56
  ASSERT (FUNC (0) == 0);                               \
 
57
  for (i = 0; i < BITS; i++)                            \
 
58
    {                                                   \
 
59
      ASSERT (FUNC (ONE << i) == 1);                    \
 
60
      for (j = i + 1; j < BITS; j++)                    \
 
61
        ASSERT (FUNC ((ONE << i) | (ONE << j)) == 2);   \
 
62
    }                                                   \
 
63
  for (i = 0; i < 1000; i++)                            \
 
64
    {                                                   \
 
65
      TYPE value = rand () ^ (rand () << 31 << 1);      \
 
66
      int count = 0;                                    \
 
67
      for (j = 0; j < BITS; j++)                        \
 
68
        count += (value & (ONE << j)) != 0;             \
 
69
      ASSERT (count == FUNC (value));                   \
 
70
    }                                                   \
 
71
  ASSERT (FUNC (MAX) == BITS);
 
72
 
 
73
  TEST_COUNT_ONE_BITS (count_one_bits, unsigned int, UINT_BIT, UINT_MAX, 1U);
 
74
  TEST_COUNT_ONE_BITS (count_one_bits_l, unsigned long int,
 
75
                       ULONG_BIT, ULONG_MAX, 1UL);
 
76
#ifdef HAVE_UNSIGNED_LONG_LONG_INT
 
77
  TEST_COUNT_ONE_BITS (count_one_bits_ll,
 
78
                       unsigned long long int, ULLONG_BIT, ULLONG_MAX, 1ULL);
 
79
#endif
 
80
 
 
81
  return 0;
 
82
}