/*
 *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
 *
 *	 FILE:	dat_mbrlen.c
 *
 *	 MBRLEN:  size_t mbrlen (const char *s, size_t n, mbstate_t *ps);
 */

/*
 *  NOTE:
 *	  (1) A mbstate object is initialized for
 *	      every new data record by the test program.
 *
 *	  (2) USE_MBCURMAX is defined as a value of 99.
 *
 */


TST_MBRLEN tst_mbrlen_loc [] = {
  {
    { Tmbrlen, TST_LOC_de },
    {
      { /*----------------- #01 -----------------*/
	{
	  {
	    { 1, "",	   0,		   0, 0 },
	    { 1, "",	   1,		   0, 0 },
	    { 1, "\300",	   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1,  0,		     },
	    { 0,		1,  0,		     },
	    { 0,		1,  1,		     },
	  }
	}
      },
      { /*----------------- #02 -----------------*/
	{
	  {
	    { 1, "\300\001",   0,		   0, 0 },
	    { 1, "\300\001",   1,		   0, 0 },
	    { 1, "\317\001",   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1,  0,		     },
	    { 0,		1,  1,		     },
	    { 0,		1,  1,		     },
	  }
	}
      },
      { .is_last = 1 }
    }
  },
  {
    { Tmbrlen, TST_LOC_enUS },
    {
      { /*----------------- #01 -----------------*/
	{
	  {
	    { 1, "A",	   0,		   0, 0 },
	    { 1, "A",	   1,		   0, 0 },
	    { 1, "A",	   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1,  0,		     },
	    { 0,		1,  1,		     },
	    { 0,		1,  1,		     },
	  }
	}
      },
      { /*----------------- #02 -----------------*/
	{
	  {
	    { 1, "\317\001",   0,		   1, 0 },
	    { 1, "\317\001",   1,		   1, 0 },
	    { 1, "\317\001",   USE_MBCURMAX,   1, 0 },
	  }
	},
	{
	  {
	    { 0,		1,  0,		     },
	    { EILSEQ,	1, -1,		     },
	    { EILSEQ,	1, -1,		     },
	  }
	}
      },
      { .is_last = 1 }
    }
  },
#if 0
  {
    { Tmbrlen, TST_LOC_eucJP },
    {
      { /*----------------- #01 -----------------*/
	{
	  {
	    { 1, "\317\302",   1,		   1, 1 },
	    { 0, "",	       0,		   1, 0 },
	    { 1, "\317\302",   USE_MBCURMAX,	   1, 1 },
	  }
	},
	{
	  {
	    { 0,		1, -2,		     },
	    { 0,		1, -1,		     },
	    { 0,		1,  2,		     },
	  }
	}
      },
      { /*----------------- #02 -----------------*/
	{
	  {
	    { 1, "\317",	   1,		   1, 0 },
	    { 1, "\302",	   1,		   1, 0 },
	    { 1, "\317\302",   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1, -2,		     },
#ifdef SHOJI_IS_RIGHT
	    { 0,		1, +2,		     },
#else
	    /* XXX ISO C explicitly says that the return value does not
	       XXX reflect the bytes contained in the state.  */
	    { 0,		1, +1,		     },
#endif
	    { 0,		1,  2,		     },
	  }
	}
      },
      { /*----------------- #03 -----------------*/
	{
	  {
	    { 1, "\216\217",   0,		   0, 0 },
	    { 1, "\216\217",   1,		   0, 0 },
	    { 1, "\216\217",   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1,  0,		     },
	    { 0,		1, -2,		     },
	    { EILSEQ,	1, -1,		     },
	  }
	}
      },
      { .is_last = 1 }
    }
  },
#else
  {
    { Tmbrlen, TST_LOC_ja_UTF8 },
    {
      { /*----------------- #01 -----------------*/
	{
	  {
	    { 1, "\345\222\214",   1,		   1, 1 },
	    { 0, "",	       0,		   1, 0 },
	    { 1, "\345\222\214",   USE_MBCURMAX,	   1, 1 },
	  }
	},
	{
	  {
	    { 0,		1, -2,		     },
	    { 0,		1, -1,		     },
	    { 0,		1,  3,		     },
	  }
	}
      },
      { /*----------------- #02 -----------------*/
	{
	  {
	    { 1, "\317",	   1,		   1, 0 },
	    { 1, "\266",	   1,		   1, 0 },
	    { 1, "\345\222\214",   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1, -2,		     },
#ifdef SHOJI_IS_RIGHT
	    { 0,		1, +2,		     },
#else
	    /* XXX ISO C explicitly says that the return value does not
	       XXX reflect the bytes contained in the state.  */
	    { 0,		1, +1,		     },
#endif
	    { 0,		1,  3,		     },
	  }
	}
      },
      { /*----------------- #03 -----------------*/
	{
	  {
	    { 1, "\302\303",   0,		   0, 0 },
	    { 1, "\302\303",   1,		   0, 0 },
	    { 1, "\302\303",   USE_MBCURMAX,   0, 0 },
	  }
	},
	{
	  {
	    { 0,		1,  0,		     },
	    { 0,		1, -2,		     },
	    { EILSEQ,	1, -1,		     },
	  }
	}
      },
      { .is_last = 1 }
    }
  },
#endif
  {
    { Tmbrlen, TST_LOC_end }
  }
};