| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444 | /* *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY * *	 FILE:	dat_mbtowc.c * *	 MBTOWC:  int  mbtowc (wchar_t *wp, char *s, size_t n); *//*  NOTE: * *	 int  mbtowc (wchar_t *wp, char *s, size_t n); * *	 where	     n: a maximum number of bytes *		return: the number of bytes * * *	  o When you feed a null pointer for a string (s) to the function, *	    set s_flg=0 instead of putting just a 'NULL' there. *	    Even if you put a 'NULL', it means a null string as well as "". * *	  o When s is a null pointer, the function checks state dependency. * *		state-dependent encoding      - return	NON-zero *		state-independent encoding    - return	0 * *	    If state-dependent encoding is expected, set * *		s_flg = 0,  ret_flg = 0,  ret_val = +1 * *	    If state-independent encoding is expected, set * *		s_flg = 0,  ret_flg = 0,  ret_val = 0 * * *	    When you set ret_flg=1, the test program simply compares *	    an actual return value with an expected value. You can *	    check state-independent case (return value is 0) in that *	    way, but you can not check state-dependent case. So when *	    you check state- dependency in this test function: *	    tst_mbtowc(), set ret_flg=0 always. It's a special case *	    and the test function takes care of it. * *			  w_flg *			  |	s: (a null string; can't be (char *)NULL) *			  |	| *	       input.	{ 1, 0, (char)NULL, MB_LEN_MAX	}, *			     | *			     s_flg=0: makes _s_ a null pointer. * *	       expect	{ 0,0,0,x,     0x0000	  }, *			      | | *			      | ret_val: 0/+1 *			      ret_flg=0 * * *    Test data for State dependent encodings: * *	  mbtowc( NULL, NULL, 0 );	 ... first  data *	  mbtowc( &wc,	s1,  n1 );	 ... second data *	  mbtowc( &wc,	s2,  n2 );	 ... third  data * */#include <limits.h>TST_MBTOWC tst_mbtowc_loc [] = {  {    { Tmbtowc, TST_LOC_de },    {      { /*----------------- #01 -----------------*/	{	  {	    { 1, 1, "\xfc\xe4\xf6",	    1	       },	    { 1, 1, "\xfc\xe4\xf6",	    2	       },	    { 1, 1, "\xfc\xe4\xf6",	    MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x00FC },	    { 0,  1,  1,   0x00FC },	    { 0,  1,  1,   0x00FC },	  }	}      },      { /*----------------- #02 -----------------*/	{	  {	    { 1, 1, "\177",	    MB_LEN_MAX },	    { 1, 1, "\200",	    MB_LEN_MAX },	    { 1, 1, "\201",	    MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x007F },	    { 0,  1,  1,   0x0080 },	    { 0,  1,  1,   0x0081 },	  }	}      },      { /*----------------- #03 -----------------*/	{	  {	    { 1, 1, "",			    MB_LEN_MAX },	    { 0, 1, "\xfc\xe4\xf6",	    1	       },	    { 0, 1, "\xfc\xe4\xf6",	    2	       },	  }	},	{	  {	    { 0,  1,  0,   0x0000 },	    { 0,  1,  1,   0x0000 },	    { 0,  1,  1,   0x0000 },	  }	}      },      { /*----------------- #04 -----------------*/	{	  {	    { 0, 1, "\xfc\xe4\xf6",	    MB_LEN_MAX },	    { 0, 1, "\177",		    MB_LEN_MAX },	    { 0, 1, "",	 		   MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x0000 },	    { 0,  1,  1,   0x0000 },	    { 0,  1,  0,   0x0000 },	  }	}      },      { /*----------------- #05 -----------------*/	{	  {	    { 0, 1, "\xfc\xe4\xf6",	MB_LEN_MAX },	    { 0, 1, "\177",	   	MB_LEN_MAX },	    { 0, 0, (char)NULL, 	MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x0000 },	    { 0,  1,  1,   0x0000 },	    { 0,  0,  0,   0x0000 },	  }	}      },      { .is_last = 1 }    }  },  {    { Tmbtowc, TST_LOC_enUS },    {      { /*----------------- #01 -----------------*/	{	  {	    { 1, 1, "ABC",	    1	       },	    { 1, 1, "ABC",	    2	       },	    { 1, 1, "ABC",	    MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x0041 },	    { 0,  1,  1,   0x0041 },	    { 0,  1,  1,   0x0041 },	  }	}      },      { /*----------------- #02 -----------------*/	{	  {	    { 1, 1, "\177",	    MB_LEN_MAX },	    { 1, 1, "\200",	    MB_LEN_MAX },	    { 1, 1, "\201",	    MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x007F },	    { EILSEQ,  1, -1,   0x0000 },	    { EILSEQ,  1, -1,   0x0000 },	  }	}      },      { /*----------------- #03 -----------------*/	{	  {	    { 1, 1, "",	    MB_LEN_MAX },	    { 0, 1, "ABC",	    1	       },	    { 0, 1, "ABC",	    2	       },	  }	},	{	  {	    { 0,  1,  0,   0x0000 },	    { 0,  1,  1,   0x0000 },	    { 0,  1,  1,   0x0000 },	  }	}      },      { /*----------------- #04 -----------------*/	{	  {	    { 0, 1, "ABC",	    MB_LEN_MAX },	    { 0, 1, "\177",	    MB_LEN_MAX },	    { 0, 1, "",	    MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x0000 },	    { 0,  1,  1,   0x0000 },	    { 0,  1,  0,   0x0000 },	  }	}      },      { /*----------------- #05 -----------------*/	{	  {	    { 0, 1, "ABC",	    MB_LEN_MAX },	    { 0, 1, "\177",	    MB_LEN_MAX },	    { 0, 0, (char)NULL, MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  1,   0x0000 },	    { 0,  1,  1,   0x0000 },	    { 0,  0,  0,   0x0000 },	  }	}      },      { .is_last = 1 }    }  },#if 0  {    { Tmbtowc, TST_LOC_eucJP },    {      { /*----------------- #01 -----------------*/	{	  {	    { 1, 1, "\244\242A",      1          },	    { 1, 1, "\244\242A",      2          },	    { 1, 1, "\244\242A",      MB_LEN_MAX },	  }	},	{	  {#ifdef SHOJI_IS_RIGHT	    { EILSEQ,  1, -1,   0x0000 },#else	    /* XXX EILSEQ was introduced in ISO C99.  */	    { 0,	  1, -1,   0x0000 },#endif	    { 0,       1,  2,   0x3042 },	    { 0,       1,  2,   0x3042 },	  }	}      },      { /*----------------- #02 -----------------*/	{	  {	    { 1, 1, "\177\244\242",   MB_LEN_MAX },	    { 1, 1, "\377\244\242",   MB_LEN_MAX },	    { 1, 1, "\201\244\242",   MB_LEN_MAX },	  }	},	{	  {	    { 0,  1, +1,   0x007F },#ifdef SHOJI_IS_RIGHT	    { EILSEQ,  1, -1,   0x0000 },#else	    { 0,  1, -1,   0x0000 },#endif	    { 0,  1, +1,   0x0081 },	  }	}      },      { /*----------------- #03 -----------------*/	{	  {	    { 1, 1, "",         MB_LEN_MAX },	    { 0, 1, "\244\242A",      1          },	    { 0, 1, "\244\242A",      2          },	  }	},	{	  {	    { 0,  1,  0,   0x0000 },#ifdef SHOJI_IS_RIGHT	    { EILSEQ,  1, -1,   0x0000 },#else	    /* XXX EILSEQ was introduced in ISO C99.  */	    { 0,       1, -1,   0x0000 },#endif	    { 0,  1,  2,   0x0000 },	  }	}      },      { /*----------------- #04 -----------------*/	{	  {	    { 0, 1, "\244\242A",      MB_LEN_MAX },	    { 0, 1, "\177\244\242",   MB_LEN_MAX },	    { 0, 1, "",         MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  2,   0x0000 },	    { 0,  1, +1,   0x0000 },	    { 0,  1,  0,   0x0000 },	  }	}      },      { /*----------------- #05 -----------------*/	{	  {	    { 0, 1, "\244\242A",      MB_LEN_MAX },	    { 0, 1, "\177\244\242",   MB_LEN_MAX },	    { 0, 0, (char)NULL, MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  2,   0x0000 },	    { 0,  1, +1,   0x0000 },	    { 0,  0,  0,   0x0000 },	  }	}      },      { .is_last = 1 }    }  },#else  {    { Tmbtowc, TST_LOC_ja_UTF8 },    {      { /*----------------- #01 -----------------*/	{	  {	    { 1, 1, "\343\201\202A",      1          },	    { 1, 1, "\343\201\202A",      3          },	    { 1, 1, "\343\201\202A",      MB_LEN_MAX },	  }	},	{	  {#ifdef SHOJI_IS_RIGHT	    { EILSEQ,  1, -1,   0x0000 },#else	    /* XXX EILSEQ was introduced in ISO C99.  */	    { 0,	  1, -1,   0x0000 },#endif	    { 0,       1,  3,   0x3042 },	    { 0,       1,  3,   0x3042 },	  }	}      },      { /*----------------- #02 -----------------*/	{	  {	    { 1, 1, "\177\343\201\202",   MB_LEN_MAX },	    { 1, 1, "\377\343\201\202",   MB_LEN_MAX },	    { 1, 1, "\302\201\343\201\202",   MB_LEN_MAX },	  }	},	{	  {	    { 0,  1, +1,   0x007F },#ifdef SHOJI_IS_RIGHT	    { EILSEQ,  1, -1,   0x0000 },#else	    { 0,  1, -1,   0x0000 },#endif	    { 0,  1, +2,   0x0081 },	  }	}      },      { /*----------------- #03 -----------------*/	{	  {	    { 1, 1, "",         MB_LEN_MAX },	    { 0, 1, "\343\201\202A",      1          },	    { 0, 1, "\343\201\202A",      3          },	  }	},	{	  {	    { 0,  1,  0,   0x0000 },#ifdef SHOJI_IS_RIGHT	    { EILSEQ,  1, -1,   0x0000 },#else	    /* XXX EILSEQ was introduced in ISO C99.  */	    { 0,       1, -1,   0x0000 },#endif	    { 0,  1,  3,   0x0000 },	  }	}      },      { /*----------------- #04 -----------------*/	{	  {	    { 0, 1, "\343\201\202A",      MB_LEN_MAX },	    { 0, 1, "\177\343\201\202",   MB_LEN_MAX },	    { 0, 1, "",         MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  3,   0x0000 },	    { 0,  1, +1,   0x0000 },	    { 0,  1,  0,   0x0000 },	  }	}      },      { /*----------------- #05 -----------------*/	{	  {	    { 0, 1, "\343\201\202A",      MB_LEN_MAX },	    { 0, 1, "\177\343\201\202",   MB_LEN_MAX },	    { 0, 0, (char)NULL, MB_LEN_MAX },	  }	},	{	  {	    { 0,  1,  3,   0x0000 },	    { 0,  1, +1,   0x0000 },	    { 0,  0,  0,   0x0000 },	  }	}      },      { .is_last = 1 }    }  },#endif  {    { Tmbtowc, TST_LOC_end }  }};
 |