(root)/
gettext-0.22.4/
gettext-tools/
gnulib-tests/
test-iswctype.c
       1  /* Test of wide character properties.
       2     Copyright (C) 2023 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 Bruno Haible <bruno@clisp.org>, 2023.  */
      18  
      19  #include <config.h>
      20  
      21  #include <wctype.h>
      22  
      23  #include "signature.h"
      24  SIGNATURE_CHECK (iswctype, int, (wint_t, wctype_t));
      25  
      26  #include "macros.h"
      27  
      28  int
      29  main (int argc, char *argv[])
      30  {
      31    wctype_t desc;
      32  
      33    desc = wctype ("any");
      34    ASSERT (desc == (wctype_t) 0);
      35  
      36    desc = wctype ("blank");
      37    ASSERT (desc != (wctype_t) 0);
      38    ASSERT (iswctype (L' ', desc));
      39    ASSERT (iswctype (L'\t', desc));
      40    ASSERT (! iswctype (L'\n', desc));
      41    ASSERT (! iswctype (L'a', desc));
      42    ASSERT (! iswctype (L'_', desc));
      43    ASSERT (! iswctype (WEOF, desc));
      44  
      45    desc = wctype ("space");
      46    ASSERT (desc != (wctype_t) 0);
      47    ASSERT (iswctype (L' ', desc));
      48    ASSERT (iswctype (L'\t', desc));
      49    ASSERT (iswctype (L'\n', desc));
      50    ASSERT (! iswctype (L'a', desc));
      51    ASSERT (! iswctype (L'_', desc));
      52    ASSERT (! iswctype (WEOF, desc));
      53  
      54    desc = wctype ("punct");
      55    ASSERT (desc != (wctype_t) 0);
      56    ASSERT (iswctype (L'!', desc));
      57    ASSERT (iswctype (L'"', desc));
      58    ASSERT (iswctype (L'#', desc));
      59    ASSERT (iswctype (L'$', desc));
      60    ASSERT (iswctype (L'%', desc));
      61    ASSERT (iswctype (L'&', desc));
      62    ASSERT (iswctype (L'\'', desc));
      63    ASSERT (iswctype (L'(', desc));
      64    ASSERT (iswctype (L')', desc));
      65    ASSERT (iswctype (L'*', desc));
      66    ASSERT (iswctype (L'+', desc));
      67    ASSERT (iswctype (L',', desc));
      68    ASSERT (iswctype (L'-', desc));
      69    ASSERT (iswctype (L'.', desc));
      70    ASSERT (iswctype (L'/', desc));
      71    ASSERT (iswctype (L':', desc));
      72    ASSERT (iswctype (L';', desc));
      73    ASSERT (iswctype (L'<', desc));
      74    ASSERT (iswctype (L'=', desc));
      75    ASSERT (iswctype (L'>', desc));
      76    ASSERT (iswctype (L'?', desc));
      77    ASSERT (iswctype (L'@', desc));
      78    ASSERT (iswctype (L'[', desc));
      79    ASSERT (iswctype (L'\\', desc));
      80    ASSERT (iswctype (L']', desc));
      81    ASSERT (iswctype (L'^', desc));
      82    ASSERT (iswctype (L'_', desc));
      83    ASSERT (iswctype (L'`', desc));
      84    ASSERT (iswctype (L'{', desc));
      85    ASSERT (iswctype (L'|', desc));
      86    ASSERT (iswctype (L'}', desc));
      87    ASSERT (iswctype (L'~', desc));
      88    ASSERT (! iswctype (L' ', desc));
      89    ASSERT (! iswctype (L'a', desc));
      90    ASSERT (! iswctype (L'1', desc));
      91    ASSERT (! iswctype (WEOF, desc));
      92  
      93    desc = wctype ("lower");
      94    ASSERT (desc != (wctype_t) 0);
      95    ASSERT (iswctype (L'a', desc));
      96    ASSERT (iswctype (L'z', desc));
      97    ASSERT (! iswctype (L'A', desc));
      98    ASSERT (! iswctype (L'Z', desc));
      99    ASSERT (! iswctype (L'1', desc));
     100    ASSERT (! iswctype (L'_', desc));
     101    ASSERT (! iswctype (WEOF, desc));
     102  
     103    desc = wctype ("upper");
     104    ASSERT (desc != (wctype_t) 0);
     105    ASSERT (iswctype (L'A', desc));
     106    ASSERT (iswctype (L'Z', desc));
     107    ASSERT (! iswctype (L'a', desc));
     108    ASSERT (! iswctype (L'z', desc));
     109    ASSERT (! iswctype (L'1', desc));
     110    ASSERT (! iswctype (L'_', desc));
     111    ASSERT (! iswctype (WEOF, desc));
     112  
     113    desc = wctype ("alpha");
     114    ASSERT (desc != (wctype_t) 0);
     115    ASSERT (iswctype (L'a', desc));
     116    ASSERT (iswctype (L'z', desc));
     117    ASSERT (iswctype (L'A', desc));
     118    ASSERT (iswctype (L'Z', desc));
     119    ASSERT (! iswctype (L'1', desc));
     120    ASSERT (! iswctype (L'$', desc));
     121    ASSERT (! iswctype (WEOF, desc));
     122  
     123    desc = wctype ("digit");
     124    ASSERT (desc != (wctype_t) 0);
     125    ASSERT (iswctype (L'0', desc));
     126    ASSERT (iswctype (L'9', desc));
     127    ASSERT (! iswctype (L'a', desc));
     128    ASSERT (! iswctype (L'f', desc));
     129    ASSERT (! iswctype (L'A', desc));
     130    ASSERT (! iswctype (L'F', desc));
     131    ASSERT (! iswctype (WEOF, desc));
     132  
     133    desc = wctype ("xdigit");
     134    ASSERT (desc != (wctype_t) 0);
     135    ASSERT (iswctype (L'0', desc));
     136    ASSERT (iswctype (L'9', desc));
     137    ASSERT (iswctype (L'a', desc));
     138    ASSERT (iswctype (L'f', desc));
     139    ASSERT (iswctype (L'A', desc));
     140    ASSERT (iswctype (L'F', desc));
     141    ASSERT (! iswctype (L'g', desc));
     142    ASSERT (! iswctype (L'G', desc));
     143    ASSERT (! iswctype (WEOF, desc));
     144  
     145    desc = wctype ("alnum");
     146    ASSERT (desc != (wctype_t) 0);
     147    ASSERT (iswctype (L'a', desc));
     148    ASSERT (iswctype (L'z', desc));
     149    ASSERT (iswctype (L'A', desc));
     150    ASSERT (iswctype (L'Z', desc));
     151    ASSERT (iswctype (L'0', desc));
     152    ASSERT (iswctype (L'9', desc));
     153    ASSERT (! iswctype (L' ', desc));
     154    ASSERT (! iswctype (L'_', desc));
     155    ASSERT (! iswctype (WEOF, desc));
     156  
     157    desc = wctype ("cntrl");
     158    ASSERT (desc != (wctype_t) 0);
     159    ASSERT (iswctype (L'\0', desc));
     160    ASSERT (iswctype (L'\n', desc));
     161    ASSERT (iswctype (L'\t', desc));
     162    ASSERT (! iswctype (L' ', desc));
     163    ASSERT (! iswctype (L'a', desc));
     164    ASSERT (! iswctype (L'\\', desc));
     165    ASSERT (! iswctype (WEOF, desc));
     166  
     167    desc = wctype ("graph");
     168    ASSERT (desc != (wctype_t) 0);
     169    ASSERT (iswctype (L'a', desc));
     170    ASSERT (iswctype (L'z', desc));
     171    ASSERT (iswctype (L'A', desc));
     172    ASSERT (iswctype (L'Z', desc));
     173    ASSERT (iswctype (L'0', desc));
     174    ASSERT (iswctype (L'9', desc));
     175    ASSERT (iswctype (L'$', desc));
     176    ASSERT (! iswctype (L' ', desc));
     177    ASSERT (! iswctype (L'\t', desc));
     178    ASSERT (! iswctype (L'\n', desc));
     179    ASSERT (! iswctype (L'\0', desc));
     180    ASSERT (! iswctype (WEOF, desc));
     181  
     182    desc = wctype ("print");
     183    ASSERT (desc != (wctype_t) 0);
     184    ASSERT (iswctype (L'a', desc));
     185    ASSERT (iswctype (L'z', desc));
     186    ASSERT (iswctype (L'A', desc));
     187    ASSERT (iswctype (L'Z', desc));
     188    ASSERT (iswctype (L'0', desc));
     189    ASSERT (iswctype (L'9', desc));
     190    ASSERT (iswctype (L'$', desc));
     191    ASSERT (iswctype (L' ', desc));
     192    ASSERT (! iswctype (L'\t', desc));
     193    ASSERT (! iswctype (L'\n', desc));
     194    ASSERT (! iswctype (L'\0', desc));
     195    ASSERT (! iswctype (WEOF, desc));
     196  
     197    return 0;
     198  }