/*
 *  TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY
 *
 *	 FILE:	dat_iswspace.c
 *
 *	 ISW*:	int iswspace (wint_t wc);
 */


#include "dat_isw-funcs.h"


TST_ISW_LOC (SPACE, space) = {

  {   TST_ISW_REC (de, space)
      {
	{  { 0x0080 }, { 0,1,0 }  },	/* CTRL	    */
	{  { 0x009F }, { 0,1,0 }  },	/* CTRL	    */
	{  { 0x00A0 }, { 0,1,0 }  },	/* NB SPACE */
	{  { 0x00A1 }, { 0,1,0 }  },	/* UD !	    */
	{  { 0x00B0 }, { 0,1,0 }  },	/* Degree   */
	{  { 0x00B1 }, { 0,1,0 }  },	/* +- sign  */
	{  { 0x00B2 }, { 0,1,0 }  },	/* SUP 2    */
	{  { 0x00B3 }, { 0,1,0 }  },	/* SUP 3    */
	{  { 0x00B4 }, { 0,1,0 }  },	/* ACUTE    */
	{  { 0x00B8 }, { 0,1,0 }  },	/* CEDILLA  */
	{  { 0x00B9 }, { 0,1,0 }  },	/* SUP 1    */
	{  { 0x00BB }, { 0,1,0 }  },	/* >>	    */
	{  { 0x00BC }, { 0,1,0 }  },	/* 1/4	    */
	{  { 0x00BD }, { 0,1,0 }  },	/* 1/2	    */
	{  { 0x00BE }, { 0,1,0 }  },	/* 3/4	    */
	{  { 0x00BF }, { 0,1,0 }  },	/* UD ?	    */
	{  { 0x00C0 }, { 0,1,0 }  },	/* A Grave  */
	{  { 0x00D6 }, { 0,1,0 }  },	/* O dia    */
	{  { 0x00D7 }, { 0,1,0 }  },	/* multipl. */
	{  { 0x00D8 }, { 0,1,0 }  },	/* O stroke */
	{  { 0x00DF }, { 0,1,0 }  },	/* small Sh */
	{  { 0x00E0 }, { 0,1,0 }  },	/* a grave  */
	{  { 0x00F6 }, { 0,1,0 }  },	/* o dia    */
	{  { 0x00F7 }, { 0,1,0 }  },	/* division */
	{  { 0x00F8 }, { 0,1,0 }  },	/* o stroke */
	{  { 0x00FF }, { 0,1,0 }  },	/* y dia    */
	{ .is_last = 1 }		/* Last element.  */
      }
  },
  {   TST_ISW_REC (enUS, space)
      {
	{  { WEOF   }, { 0,1,0 }  },
	{  { 0x0000 }, { 0,1,0 }  },
	{  { 0x0008 }, { 0,1,0 }  },
	{  { 0x0009 }, { 0,0,0 }  },
	{  { 0x000D }, { 0,0,0 }  },
	{  { 0x000E }, { 0,1,0 }  },
	{  { 0x001F }, { 0,1,0 }  },
	{  { 0x0020 }, { 0,0,0 }  },
	{  { 0x0021 }, { 0,1,0 }  },
	{  { 0x002F }, { 0,1,0 }  },
	{  { 0x0030 }, { 0,1,0 }  },
	{  { 0x0039 }, { 0,1,0 }  },
	{  { 0x003A }, { 0,1,0 }  },
	{  { 0x0040 }, { 0,1,0 }  },
	{  { 0x0041 }, { 0,1,0 }  },
	{  { 0x005A }, { 0,1,0 }  },
	{  { 0x005B }, { 0,1,0 }  },
	{  { 0x0060 }, { 0,1,0 }  },
	{  { 0x0061 }, { 0,1,0 }  },
	{  { 0x007A }, { 0,1,0 }  }, /* 20 */
	{  { 0x007B }, { 0,1,0 }  },
	{  { 0x007E }, { 0,1,0 }  },
	{  { 0x007F }, { 0,1,0 }  },
	{  { 0x0080 }, { 0,1,0 }  },
	{ .is_last = 1 }		/* Last element.  */
      }
  },
  {   TST_ISW_REC (eucJP, space)
      {
	{  { 0x3000 }, { 0,0,0 }  },	/* IDEO. SPACE	      */
	{  { 0x3020 }, { 0,1,0 }  },	/* POSTAL MARK FACE   */
	{  { 0x3029 }, { 0,1,0 }  },	/* Hangzhou NUM9      */
	{  { 0x302F }, { 0,1,0 }  },	/* Diacritics(Hangul) */
	{  { 0x3037 }, { 0,1,0 }  },	/* Separator Symbol   */
	{  { 0x303F }, { 0,1,0 }  },	/* IDEO. HALF SPACE   */  /* No JIS */
	{  { 0x3041 }, { 0,1,0 }  },	/* HIRAGANA a	      */
	{  { 0x3094 }, { 0,1,0 }  },	/* HIRAGANA u"	      */
	{  { 0x3099 }, { 0,1,0 }  },	/* SOUND MARK	      */
	{  { 0x309E }, { 0,1,0 }  },	/* ITERATION MARK     */
	{  { 0x30A1 }, { 0,1,0 }  },	/* KATAKANA a	      */
	{  { 0x30FA }, { 0,1,0 }  },	/* KATAKANA wo"	      */
	{  { 0x30FB }, { 0,1,0 }  },	/* KATAKANA MID.DOT   */
	{  { 0x30FE }, { 0,1,0 }  },	/* KATAKANA ITERATION */
	{  { 0x3191 }, { 0,1,0 }  },	/* KANBUN REV.MARK    */
	{  { 0x3243 }, { 0,1,0 }  },	/* IDEO. MARK (reach) */
	{  { 0x32CB }, { 0,1,0 }  },	/* IDEO.TEL.SYM.DEC12 */
	{  { 0x32FE }, { 0,1,0 }  },	/* MARU KATAKANA wo   */
	{  { 0x33FE }, { 0,1,0 }  },	/* CJK IDEO.TEL.31th  */
	{  { 0x4E00 }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0x4E05 }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0x4E06 }, { 0,1,0 }  },	/* CJK UNI.IDEO.NON-J */
	{  { 0x4E07 }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0x4FFF }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0x9000 }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0x9006 }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0x9007 }, { 0,1,0 }  },	/* CJK UNI.IDEO.NON-J */
	{  { 0x9FA4 }, { 0,1,0 }  },	/* CJK UNI.IDEO.NON-J */
	{  { 0x9FA5 }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0xFE4F }, { 0,1,0 }  },	/* CJK UNI.IDEO.      */
	{  { 0xFF0F }, { 0,1,0 }  },	/* FULL SLASH	      */
	{  { 0xFF19 }, { 0,1,0 }  },	/* FULL 9	      */
	{  { 0xFF20 }, { 0,1,0 }  },	/* FULL @	      */
	{  { 0xFF3A }, { 0,1,0 }  },	/* FULL Z	      */
	{  { 0xFF40 }, { 0,1,0 }  },	/* FULL GRAVE ACC.    */
	{  { 0xFF5A }, { 0,1,0 }  },	/* FULL z	      */
	{  { 0xFF5E }, { 0,1,0 }  },	/* FULL ~ (tilde)     */
	{  { 0xFF61 }, { 0,1,0 }  },	/* HALF IDEO.STOP. .  */
	{  { 0xFF65 }, { 0,1,0 }  },	/* HALF KATA MID.DOT  */
	{  { 0xFF66 }, { 0,1,0 }  },	/* HALF KATA WO	      */
	{  { 0xFF6F }, { 0,1,0 }  },	/* HALF KATA tu	      */
	{  { 0xFF70 }, { 0,1,0 }  },	/* HALF KATA PL -     */
	{  { 0xFF71 }, { 0,1,0 }  },	/* HALF KATA A	      */
	{  { 0xFF9E }, { 0,1,0 }  },	/* HALF KATA MI	      */
	{ .is_last = 1 }		/* Last element.  */
      }
  },
  {   TST_ISW_REC (end, space) }
};
