(root)/
findutils-4.9.0/
gnulib-tests/
test-limits-h.c
       1  /* Test of <limits.h> substitute.
       2     Copyright 2016-2022 Free Software Foundation, Inc.
       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 3 of the License, or
       7     (at your option) 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, see <https://www.gnu.org/licenses/>.  */
      16  
      17  /* Written by Paul Eggert.  */
      18  
      19  #include <config.h>
      20  
      21  #include <limits.h>
      22  
      23  #include "verify.h"
      24  
      25  #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__)
      26  # pragma GCC diagnostic ignored "-Woverlength-strings"
      27  #endif
      28  
      29  #define verify_width(width, min, max) \
      30    verify ((max) >> ((width) - 1 - ((min) < 0)) == 1)
      31  
      32  /* Macros borrowed from intprops.h.  */
      33  #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
      34  #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
      35  #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
      36  #define TYPE_MAXIMUM(t)                                                 \
      37    ((t) (! TYPE_SIGNED (t)                                               \
      38          ? (t) -1                                                        \
      39          : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1)))
      40  
      41  /* Type width macros.  */
      42  
      43  int type_bits[] =
      44    {
      45      CHAR_BIT,
      46      WORD_BIT,
      47      LONG_BIT
      48    };
      49  verify_width (CHAR_BIT, CHAR_MIN, CHAR_MAX);
      50  verify_width (WORD_BIT, INT_MIN, INT_MAX);
      51  verify_width (LONG_BIT, LONG_MIN, LONG_MAX);
      52  
      53  /* Numerical limit macros.  */
      54  
      55  char               limits1[]  = { CHAR_MIN, CHAR_MAX };
      56  verify (TYPE_MINIMUM (char) == CHAR_MIN);
      57  verify (TYPE_MAXIMUM (char) == CHAR_MAX);
      58  
      59  signed char        limits2[]  = { SCHAR_MIN, SCHAR_MAX };
      60  verify (TYPE_MINIMUM (signed char) == SCHAR_MIN);
      61  verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX);
      62  
      63  unsigned char      limits3[]  = { UCHAR_MAX };
      64  verify (TYPE_MINIMUM (unsigned char) == 0);
      65  verify (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX);
      66  
      67  short              limits4[]  = { SHRT_MIN, SHRT_MAX };
      68  verify (TYPE_MINIMUM (short int) == SHRT_MIN);
      69  verify (TYPE_MAXIMUM (short int) == SHRT_MAX);
      70  
      71  unsigned short     limits5[]  = { USHRT_MAX };
      72  verify (TYPE_MINIMUM (unsigned short int) == 0);
      73  verify (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX);
      74  
      75  int                limits6[]  = { INT_MIN, INT_MAX };
      76  verify (TYPE_MINIMUM (int) == INT_MIN);
      77  verify (TYPE_MAXIMUM (int) == INT_MAX);
      78  
      79  unsigned int       limits7[]  = { UINT_MAX };
      80  verify (TYPE_MINIMUM (unsigned int) == 0);
      81  verify (TYPE_MAXIMUM (unsigned int) == UINT_MAX);
      82  
      83  long               limits8[]  = { LONG_MIN, LONG_MAX };
      84  verify (TYPE_MINIMUM (long int) == LONG_MIN);
      85  verify (TYPE_MAXIMUM (long int) == LONG_MAX);
      86  
      87  unsigned long      limits9[]  = { ULONG_MAX };
      88  verify (TYPE_MINIMUM (unsigned long int) == 0);
      89  verify (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX);
      90  
      91  long long          limits10[] = { LLONG_MIN, LLONG_MAX };
      92  verify (TYPE_MINIMUM (long long int) == LLONG_MIN);
      93  verify (TYPE_MAXIMUM (long long int) == LLONG_MAX);
      94  
      95  unsigned long long limits11[] = { ULLONG_MAX };
      96  verify (TYPE_MINIMUM (unsigned long long int) == 0);
      97  verify (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX);
      98  
      99  /* Macros specified by ISO/IEC TS 18661-1:2014.  */
     100  
     101  verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX);
     102  verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX);
     103  verify_width (UCHAR_WIDTH, 0, UCHAR_MAX);
     104  verify_width (SHRT_WIDTH, SHRT_MIN, SHRT_MAX);
     105  verify_width (USHRT_WIDTH, 0, USHRT_MAX);
     106  verify_width (INT_WIDTH, INT_MIN, INT_MAX);
     107  verify_width (UINT_WIDTH, 0, UINT_MAX);
     108  verify_width (LONG_WIDTH, LONG_MIN, LONG_MAX);
     109  verify_width (ULONG_WIDTH, 0, ULONG_MAX);
     110  verify_width (LLONG_WIDTH, LLONG_MIN, LLONG_MAX);
     111  verify_width (ULLONG_WIDTH, 0, ULLONG_MAX);
     112  
     113  /* Macros specified by C2x.  */
     114  
     115  int bool_attrs[] = { BOOL_MAX, BOOL_WIDTH };
     116  verify (BOOL_MAX == (((1U << (BOOL_WIDTH - 1)) - 1) * 2) + 1);
     117  
     118  int
     119  main (void)
     120  {
     121    return 0;
     122  }