(root)/
glibc-2.38/
localedata/
tests-mbwc/
dat_mbtowc.c
       1  /*
       2   *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
       3   *
       4   *	 FILE:	dat_mbtowc.c
       5   *
       6   *	 MBTOWC:  int  mbtowc (wchar_t *wp, char *s, size_t n);
       7   */
       8  
       9  /*  NOTE:
      10   *
      11   *	 int  mbtowc (wchar_t *wp, char *s, size_t n);
      12   *
      13   *	 where	     n: a maximum number of bytes
      14   *		return: the number of bytes
      15   *
      16   *
      17   *	  o When you feed a null pointer for a string (s) to the function,
      18   *	    set s_flg=0 instead of putting just a 'NULL' there.
      19   *	    Even if you put a 'NULL', it means a null string as well as "".
      20   *
      21   *	  o When s is a null pointer, the function checks state dependency.
      22   *
      23   *		state-dependent encoding      - return	NON-zero
      24   *		state-independent encoding    - return	0
      25   *
      26   *	    If state-dependent encoding is expected, set
      27   *
      28   *		s_flg = 0,  ret_flg = 0,  ret_val = +1
      29   *
      30   *	    If state-independent encoding is expected, set
      31   *
      32   *		s_flg = 0,  ret_flg = 0,  ret_val = 0
      33   *
      34   *
      35   *	    When you set ret_flg=1, the test program simply compares
      36   *	    an actual return value with an expected value. You can
      37   *	    check state-independent case (return value is 0) in that
      38   *	    way, but you can not check state-dependent case. So when
      39   *	    you check state- dependency in this test function:
      40   *	    tst_mbtowc(), set ret_flg=0 always. It's a special case
      41   *	    and the test function takes care of it.
      42   *
      43   *			  w_flg
      44   *			  |	s: (a null string; can't be (char *)NULL)
      45   *			  |	|
      46   *	       input.	{ 1, 0, (char)NULL, MB_LEN_MAX	},
      47   *			     |
      48   *			     s_flg=0: makes _s_ a null pointer.
      49   *
      50   *	       expect	{ 0,0,0,x,     0x0000	  },
      51   *			      | |
      52   *			      | ret_val: 0/+1
      53   *			      ret_flg=0
      54   *
      55   *
      56   *    Test data for State dependent encodings:
      57   *
      58   *	  mbtowc( NULL, NULL, 0 );	 ... first  data
      59   *	  mbtowc( &wc,	s1,  n1 );	 ... second data
      60   *	  mbtowc( &wc,	s2,  n2 );	 ... third  data
      61   * */
      62  
      63  #include <limits.h>
      64  
      65  TST_MBTOWC tst_mbtowc_loc [] = {
      66    {
      67      { Tmbtowc, TST_LOC_de },
      68      {
      69        { /*----------------- #01 -----------------*/
      70  	{
      71  	  {
      72  	    { 1, 1, "\xfc\xe4\xf6",	    1	       },
      73  	    { 1, 1, "\xfc\xe4\xf6",	    2	       },
      74  	    { 1, 1, "\xfc\xe4\xf6",	    MB_LEN_MAX },
      75  	  }
      76  	},
      77  	{
      78  	  {
      79  	    { 0,  1,  1,   0x00FC },
      80  	    { 0,  1,  1,   0x00FC },
      81  	    { 0,  1,  1,   0x00FC },
      82  	  }
      83  	}
      84        },
      85        { /*----------------- #02 -----------------*/
      86  	{
      87  	  {
      88  	    { 1, 1, "\177",	    MB_LEN_MAX },
      89  	    { 1, 1, "\200",	    MB_LEN_MAX },
      90  	    { 1, 1, "\201",	    MB_LEN_MAX },
      91  	  }
      92  	},
      93  	{
      94  	  {
      95  	    { 0,  1,  1,   0x007F },
      96  	    { 0,  1,  1,   0x0080 },
      97  	    { 0,  1,  1,   0x0081 },
      98  	  }
      99  	}
     100        },
     101        { /*----------------- #03 -----------------*/
     102  	{
     103  	  {
     104  	    { 1, 1, "",			    MB_LEN_MAX },
     105  	    { 0, 1, "\xfc\xe4\xf6",	    1	       },
     106  	    { 0, 1, "\xfc\xe4\xf6",	    2	       },
     107  	  }
     108  	},
     109  	{
     110  	  {
     111  	    { 0,  1,  0,   0x0000 },
     112  	    { 0,  1,  1,   0x0000 },
     113  	    { 0,  1,  1,   0x0000 },
     114  	  }
     115  	}
     116        },
     117        { /*----------------- #04 -----------------*/
     118  	{
     119  	  {
     120  	    { 0, 1, "\xfc\xe4\xf6",	    MB_LEN_MAX },
     121  	    { 0, 1, "\177",		    MB_LEN_MAX },
     122  	    { 0, 1, "",	 		   MB_LEN_MAX },
     123  	  }
     124  	},
     125  	{
     126  	  {
     127  	    { 0,  1,  1,   0x0000 },
     128  	    { 0,  1,  1,   0x0000 },
     129  	    { 0,  1,  0,   0x0000 },
     130  	  }
     131  	}
     132        },
     133        { /*----------------- #05 -----------------*/
     134  	{
     135  	  {
     136  	    { 0, 1, "\xfc\xe4\xf6",	MB_LEN_MAX },
     137  	    { 0, 1, "\177",	   	MB_LEN_MAX },
     138  	    { 0, 0, NULL, 		MB_LEN_MAX },
     139  	  }
     140  	},
     141  	{
     142  	  {
     143  	    { 0,  1,  1,   0x0000 },
     144  	    { 0,  1,  1,   0x0000 },
     145  	    { 0,  0,  0,   0x0000 },
     146  	  }
     147  	}
     148        },
     149        { .is_last = 1 }
     150      }
     151    },
     152    {
     153      { Tmbtowc, TST_LOC_enUS },
     154      {
     155        { /*----------------- #01 -----------------*/
     156  	{
     157  	  {
     158  	    { 1, 1, "ABC",	    1	       },
     159  	    { 1, 1, "ABC",	    2	       },
     160  	    { 1, 1, "ABC",	    MB_LEN_MAX },
     161  	  }
     162  	},
     163  	{
     164  	  {
     165  	    { 0,  1,  1,   0x0041 },
     166  	    { 0,  1,  1,   0x0041 },
     167  	    { 0,  1,  1,   0x0041 },
     168  	  }
     169  	}
     170        },
     171        { /*----------------- #02 -----------------*/
     172  	{
     173  	  {
     174  	    { 1, 1, "\177",	    MB_LEN_MAX },
     175  	    { 1, 1, "\200",	    MB_LEN_MAX },
     176  	    { 1, 1, "\201",	    MB_LEN_MAX },
     177  	  }
     178  	},
     179  	{
     180  	  {
     181  	    { 0,  1,  1,   0x007F },
     182  	    { EILSEQ,  1, -1,   0x0000 },
     183  	    { EILSEQ,  1, -1,   0x0000 },
     184  	  }
     185  	}
     186        },
     187        { /*----------------- #03 -----------------*/
     188  	{
     189  	  {
     190  	    { 1, 1, "",	    MB_LEN_MAX },
     191  	    { 0, 1, "ABC",	    1	       },
     192  	    { 0, 1, "ABC",	    2	       },
     193  	  }
     194  	},
     195  	{
     196  	  {
     197  	    { 0,  1,  0,   0x0000 },
     198  	    { 0,  1,  1,   0x0000 },
     199  	    { 0,  1,  1,   0x0000 },
     200  	  }
     201  	}
     202        },
     203        { /*----------------- #04 -----------------*/
     204  	{
     205  	  {
     206  	    { 0, 1, "ABC",	    MB_LEN_MAX },
     207  	    { 0, 1, "\177",	    MB_LEN_MAX },
     208  	    { 0, 1, "",	    MB_LEN_MAX },
     209  	  }
     210  	},
     211  	{
     212  	  {
     213  	    { 0,  1,  1,   0x0000 },
     214  	    { 0,  1,  1,   0x0000 },
     215  	    { 0,  1,  0,   0x0000 },
     216  	  }
     217  	}
     218        },
     219        { /*----------------- #05 -----------------*/
     220  	{
     221  	  {
     222  	    { 0, 1, "ABC",	    MB_LEN_MAX },
     223  	    { 0, 1, "\177",	    MB_LEN_MAX },
     224  	    { 0, 0, NULL,	    MB_LEN_MAX },
     225  	  }
     226  	},
     227  	{
     228  	  {
     229  	    { 0,  1,  1,   0x0000 },
     230  	    { 0,  1,  1,   0x0000 },
     231  	    { 0,  0,  0,   0x0000 },
     232  	  }
     233  	}
     234        },
     235        { .is_last = 1 }
     236      }
     237    },
     238    {
     239      { Tmbtowc, TST_LOC_eucJP },
     240      {
     241        { /*----------------- #01 -----------------*/
     242  	{
     243  	  {
     244  	    { 1, 1, "\244\242A",      1          },
     245  	    { 1, 1, "\244\242A",      2          },
     246  	    { 1, 1, "\244\242A",      MB_LEN_MAX },
     247  	  }
     248  	},
     249  	{
     250  	  {
     251  	    /* XXX EILSEQ was introduced in ISO C99.  */
     252  	    { 0,	  1, -1,   0x0000 },
     253  	    { 0,       1,  2,   0x3042 },
     254  	    { 0,       1,  2,   0x3042 },
     255  	  }
     256  	}
     257        },
     258        { /*----------------- #02 -----------------*/
     259  	{
     260  	  {
     261  	    { 1, 1, "\177\244\242",   MB_LEN_MAX },
     262  	    { 1, 1, "\377\244\242",   MB_LEN_MAX },
     263  	    { 1, 1, "\201\244\242",   MB_LEN_MAX },
     264  	  }
     265  	},
     266  	{
     267  	  {
     268  	    { 0,  1, +1,   0x007F },
     269  	    { 0,  1, -1,   0x0000 },
     270  	    { 0,  1, +1,   0x0081 },
     271  	  }
     272  	}
     273        },
     274        { /*----------------- #03 -----------------*/
     275  	{
     276  	  {
     277  	    { 1, 1, "",         MB_LEN_MAX },
     278  	    { 0, 1, "\244\242A",      1          },
     279  	    { 0, 1, "\244\242A",      2          },
     280  	  }
     281  	},
     282  	{
     283  	  {
     284  	    { 0,  1,  0,   0x0000 },
     285  	    /* XXX EILSEQ was introduced in ISO C99.  */
     286  	    { 0,       1, -1,   0x0000 },
     287  	    { 0,  1,  2,   0x0000 },
     288  	  }
     289  	}
     290        },
     291        { /*----------------- #04 -----------------*/
     292  	{
     293  	  {
     294  	    { 0, 1, "\244\242A",      MB_LEN_MAX },
     295  	    { 0, 1, "\177\244\242",   MB_LEN_MAX },
     296  	    { 0, 1, "",		      MB_LEN_MAX },
     297  	  }
     298  	},
     299  	{
     300  	  {
     301  	    { 0,  1,  2,   0x0000 },
     302  	    { 0,  1, +1,   0x0000 },
     303  	    { 0,  1,  0,   0x0000 },
     304  	  }
     305  	}
     306        },
     307        { /*----------------- #05 -----------------*/
     308  	{
     309  	  {
     310  	    { 0, 1, "\244\242A",      MB_LEN_MAX },
     311  	    { 0, 1, "\177\244\242",   MB_LEN_MAX },
     312  	    { 0, 0, NULL,	      MB_LEN_MAX },
     313  	  }
     314  	},
     315  	{
     316  	  {
     317  	    { 0,  1,  2,   0x0000 },
     318  	    { 0,  1, +1,   0x0000 },
     319  	    { 0,  0,  0,   0x0000 },
     320  	  }
     321  	}
     322        },
     323        { .is_last = 1 }
     324      }
     325    },
     326    {
     327      { Tmbtowc, TST_LOC_end }
     328    }
     329  };