(root)/
glibc-2.38/
stdlib/
tst-width-stdint.c
       1  /* Test integer width macros in <stdint.h>.
       2     Copyright (C) 2016-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <signal.h>
      20  #include <stddef.h>
      21  #include <stdint.h>
      22  #include <stdio.h>
      23  #include <wchar.h>
      24  
      25  #define CHECK_WIDTH(TYPE, MAX, WIDTH)					\
      26    do									\
      27      {									\
      28        if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1)	\
      29  	{								\
      30  	  puts ("bad width of " #TYPE);					\
      31  	  result = 1;							\
      32  	}								\
      33        else								\
      34  	puts ("width of " #TYPE " OK");					\
      35      }									\
      36    while (0)
      37  
      38  static int
      39  do_test (void)
      40  {
      41    int result = 0;
      42  
      43  #ifndef INT8_WIDTH
      44  # error "missing INT8_WIDTH"
      45  #endif
      46    CHECK_WIDTH (int8_t, INT8_MAX, INT8_WIDTH);
      47  #ifndef INT16_WIDTH
      48  # error "missing INT16_WIDTH"
      49  #endif
      50    CHECK_WIDTH (int16_t, INT16_MAX, INT16_WIDTH);
      51  #ifndef INT32_WIDTH
      52  # error "missing INT32_WIDTH"
      53  #endif
      54    CHECK_WIDTH (int32_t, INT32_MAX, INT32_WIDTH);
      55  #ifndef INT64_WIDTH
      56  # error "missing INT64_WIDTH"
      57  #endif
      58    CHECK_WIDTH (int64_t, INT64_MAX, INT64_WIDTH);
      59  #ifndef UINT8_WIDTH
      60  # error "missing UINT8_WIDTH"
      61  #endif
      62    CHECK_WIDTH (uint8_t, UINT8_MAX, UINT8_WIDTH);
      63  #ifndef UINT16_WIDTH
      64  # error "missing UINT16_WIDTH"
      65  #endif
      66    CHECK_WIDTH (uint16_t, UINT16_MAX, UINT16_WIDTH);
      67  #ifndef UINT32_WIDTH
      68  # error "missing UINT32_WIDTH"
      69  #endif
      70    CHECK_WIDTH (uint32_t, UINT32_MAX, UINT32_WIDTH);
      71  #ifndef UINT64_WIDTH
      72  # error "missing UINT64_WIDTH"
      73  #endif
      74    CHECK_WIDTH (uint64_t, UINT64_MAX, UINT64_WIDTH);
      75  
      76  #ifndef INT_LEAST8_WIDTH
      77  # error "missing INT_LEAST8_WIDTH"
      78  #endif
      79    CHECK_WIDTH (int_least8_t, INT_LEAST8_MAX, INT_LEAST8_WIDTH);
      80  #ifndef INT_LEAST16_WIDTH
      81  # error "missing INT_LEAST16_WIDTH"
      82  #endif
      83    CHECK_WIDTH (int_least16_t, INT_LEAST16_MAX, INT_LEAST16_WIDTH);
      84  #ifndef INT_LEAST32_WIDTH
      85  # error "missing INT_LEAST32_WIDTH"
      86  #endif
      87    CHECK_WIDTH (int_least32_t, INT_LEAST32_MAX, INT_LEAST32_WIDTH);
      88  #ifndef INT_LEAST64_WIDTH
      89  # error "missing INT_LEAST64_WIDTH"
      90  #endif
      91    CHECK_WIDTH (int_least64_t, INT_LEAST64_MAX, INT_LEAST64_WIDTH);
      92  #ifndef UINT_LEAST8_WIDTH
      93  # error "missing UINT_LEAST8_WIDTH"
      94  #endif
      95    CHECK_WIDTH (uint_least8_t, UINT_LEAST8_MAX, UINT_LEAST8_WIDTH);
      96  #ifndef UINT_LEAST16_WIDTH
      97  # error "missing UINT_LEAST16_WIDTH"
      98  #endif
      99    CHECK_WIDTH (uint_least16_t, UINT_LEAST16_MAX, UINT_LEAST16_WIDTH);
     100  #ifndef UINT_LEAST32_WIDTH
     101  # error "missing UINT_LEAST32_WIDTH"
     102  #endif
     103    CHECK_WIDTH (uint_least32_t, UINT_LEAST32_MAX, UINT_LEAST32_WIDTH);
     104  #ifndef UINT_LEAST64_WIDTH
     105  # error "missing UINT_LEAST64_WIDTH"
     106  #endif
     107    CHECK_WIDTH (uint_least64_t, UINT_LEAST64_MAX, UINT_LEAST64_WIDTH);
     108  
     109  #ifndef INT_FAST8_WIDTH
     110  # error "missing INT_FAST8_WIDTH"
     111  #endif
     112    CHECK_WIDTH (int_fast8_t, INT_FAST8_MAX, INT_FAST8_WIDTH);
     113  #ifndef INT_FAST16_WIDTH
     114  # error "missing INT_FAST16_WIDTH"
     115  #endif
     116    CHECK_WIDTH (int_fast16_t, INT_FAST16_MAX, INT_FAST16_WIDTH);
     117  #ifndef INT_FAST32_WIDTH
     118  # error "missing INT_FAST32_WIDTH"
     119  #endif
     120    CHECK_WIDTH (int_fast32_t, INT_FAST32_MAX, INT_FAST32_WIDTH);
     121  #ifndef INT_FAST64_WIDTH
     122  # error "missing INT_FAST64_WIDTH"
     123  #endif
     124    CHECK_WIDTH (int_fast64_t, INT_FAST64_MAX, INT_FAST64_WIDTH);
     125  #ifndef UINT_FAST8_WIDTH
     126  # error "missing UINT_FAST8_WIDTH"
     127  #endif
     128    CHECK_WIDTH (uint_fast8_t, UINT_FAST8_MAX, UINT_FAST8_WIDTH);
     129  #ifndef UINT_FAST16_WIDTH
     130  # error "missing UINT_FAST16_WIDTH"
     131  #endif
     132    CHECK_WIDTH (uint_fast16_t, UINT_FAST16_MAX, UINT_FAST16_WIDTH);
     133  #ifndef UINT_FAST32_WIDTH
     134  # error "missing UINT_FAST32_WIDTH"
     135  #endif
     136    CHECK_WIDTH (uint_fast32_t, UINT_FAST32_MAX, UINT_FAST32_WIDTH);
     137  #ifndef UINT_FAST64_WIDTH
     138  # error "missing UINT_FAST64_WIDTH"
     139  #endif
     140    CHECK_WIDTH (uint_fast64_t, UINT_FAST64_MAX, UINT_FAST64_WIDTH);
     141  
     142  #ifndef INTPTR_WIDTH
     143  # error "missing INTPTR_WIDTH"
     144  #endif
     145    CHECK_WIDTH (intptr_t, INTPTR_MAX, INTPTR_WIDTH);
     146  #ifndef UINTPTR_WIDTH
     147  # error "missing UINTPTR_WIDTH"
     148  #endif
     149    CHECK_WIDTH (uintptr_t, UINTPTR_MAX, UINTPTR_WIDTH);
     150  
     151  #ifndef INTMAX_WIDTH
     152  # error "missing INTMAX_WIDTH"
     153  #endif
     154    CHECK_WIDTH (intmax_t, INTMAX_MAX, INTMAX_WIDTH);
     155  #ifndef UINTMAX_WIDTH
     156  # error "missing UINTMAX_WIDTH"
     157  #endif
     158    CHECK_WIDTH (uintmax_t, UINTMAX_MAX, UINTMAX_WIDTH);
     159  
     160  #ifndef PTRDIFF_WIDTH
     161  # error "missing PTRDIFF_WIDTH"
     162  #endif
     163    CHECK_WIDTH (ptrdiff_t, PTRDIFF_MAX, PTRDIFF_WIDTH);
     164  #ifndef SIG_ATOMIC_WIDTH
     165  # error "missing SIG_ATOMIC_WIDTH"
     166  #endif
     167    CHECK_WIDTH (sig_atomic_t, SIG_ATOMIC_MAX, SIG_ATOMIC_WIDTH);
     168  #ifndef SIZE_WIDTH
     169  # error "missing SIZE_WIDTH"
     170  #endif
     171    CHECK_WIDTH (size_t, SIZE_MAX, SIZE_WIDTH);
     172  #ifndef WCHAR_WIDTH
     173  # error "missing WCHAR_WIDTH"
     174  #endif
     175    CHECK_WIDTH (wchar_t, WCHAR_MAX, WCHAR_WIDTH);
     176  #ifndef WINT_WIDTH
     177  # error "missing WINT_WIDTH"
     178  #endif
     179    CHECK_WIDTH (wint_t, WINT_MAX, WINT_WIDTH);
     180  
     181    return result;
     182  }
     183  
     184  #define TEST_FUNCTION do_test ()
     185  #include "../test-skeleton.c"