/*
  WCSTOK: wchar_t *wcstok (wchar_t *ws, const wchar_t *dlm, wchar_t **pt);
*/


#define TST_FUNCTION wcstok

#include "tsp_common.c"
#include "dat_wcstok.c"

int
tst_wcstok (FILE * fp, int debug_flg)
{
  TST_DECL_VARS (wchar_t *);
  char w_flg;
  wchar_t *ws;
  wchar_t *dt, *pt;
  wchar_t *ws_ex;
  int err, i;

  TST_DO_TEST (wcstok)
  {
    TST_HEAD_LOCALE (wcstok, S_WCSTOK);
    TST_DO_REC (wcstok)
    {
      TST_DO_SEQ (WCSTOK_SEQNUM)
      {
	TST_GET_ERRET_SEQ (wcstok);
	w_flg = TST_INPUT_SEQ (wcstok).w_flg;
	ws = (w_flg) ? TST_INPUT_SEQ (wcstok).ws : NULL;
	dt = TST_INPUT_SEQ (wcstok).dt;

	ret = wcstok (ws, dt, &pt);

	if (debug_flg)
	  {
	    fprintf (stdout, "wcstok() [ %s : %d : %d ] *ret  = 0x%lx\n",
		     locale, rec + 1, seq_num + 1, *ret);
	    if (pt && *pt)
	      {
		fprintf (stdout, "			 *pt   = 0x%lx\n",
			 *pt);
	      }
	  }

	TST_IF_RETURN (S_WCSTOK)
	{
	};

	if (ret != NULL)
	  {
	    ws_ex = TST_EXPECT_SEQ (wcstok).ws;

	    /* XXX: REVISIT : insufficient conditions */
	    for (err = 0, i = 0; i < WCSSIZE; i++)
	      {
		if (ret[i] == L'\0' && ws_ex[i] == L'\0')
		  {
		    break;
		  }

		if (debug_flg)
		  {
		    fprintf (stderr,
			     "			      ret[%d] = 0x%lx <-> "
			     "0x%lx = ws_ex[%d]\n", i, ret[i], ws_ex[i], i);
		  }

		if (ret[i] != ws_ex[i])
		  {
		    err++;
		    err_count++;
		    Result (C_FAILURE, S_WCSTOK, CASE_3,
			    "the token is different from an expected string");
		    break;
		  }

		if (ret[i] == L'\0' || ws_ex[i] == L'\0')
		  {
		    break;
		  }
	      }

	    if (!err)
	      {
		Result (C_SUCCESS, S_WCSTOK, CASE_3, MS_PASSED);
	      }
	  }
      }
    }
  }

  return err_count;
}
