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


#include "dat_isw-funcs.h"


TST_ISW_LOC (ALPHA, alpha)  = {

    {	TST_ISW_REC (de, alpha)
	{
	  {  { 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,0,0 }  },  /* A Grave  */
	  {  { 0x00D6 }, { 0,0,0 }  },  /* O dia    */
	  {  { 0x00D7 }, { 0,1,0 }  },  /* multipl. */
	  {  { 0x00D8 }, { 0,0,0 }  },  /* O stroke */
	  {  { 0x00DF }, { 0,0,0 }  },  /* small Sh */
	  {  { 0x00E0 }, { 0,0,0 }  },  /* a grave  */
	  {  { 0x00F6 }, { 0,0,0 }  },  /* o dia    */
	  {  { 0x00F7 }, { 0,1,0 }  },  /* division */
	  {  { 0x00F8 }, { 0,0,0 }  },  /* o stroke */
	  {  { 0x00FF }, { 0,0,0 }  },  /* y dia    */
	  {  .is_last = 1 }		  /* last element    */
	}
    },
    {	TST_ISW_REC (enUS, alpha)
	{
	  {  { WEOF   }, { 0,1,0 }  },
	  {  { 0x0000 }, { 0,1,0 }  },
	  {  { 0x001F }, { 0,1,0 }  },
	  {  { 0x0020 }, { 0,1,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,0,0 }  },
	  {  { 0x005A }, { 0,0,0 }  },
	  {  { 0x005B }, { 0,1,0 }  },
	  {  { 0x0060 }, { 0,1,0 }  },
	  {  { 0x0061 }, { 0,0,0 }  },
	  {  { 0x007A }, { 0,0,0 }  },
	  {  { 0x007B }, { 0,1,0 }  },
	  {  { 0x007E }, { 0,1,0 }  },
	  {  { 0x007F }, { 0,1,0 }  },
	  {  { 0x0080 }, { 0,1,0 }  },  /* 20 */
	  {  .is_last = 1 }		  /* last element    */
	}
    },
    {	TST_ISW_REC (eucJP, alpha)
	{
	  {  { 0x3000 }, { 0,1,0 }  },  /* IDEO. SPACE	*/
	  {  { 0x3020 }, { 0,1,0 }  },  /* POSTAL MARK FACE	*/
	  {  { 0x3029 }, { 0,0,0 }  },  /* Hangzhou NUM9	*/
	  {  { 0x302F }, { 0,1,0 }  },  /* Diacritics(Hangul) */
	  {  { 0x3037 }, { 0,1,0 }  },  /* Separator Symbol	*/
	  {  { 0x303F }, { 0,1,0 }  },  /* IDEO. HALF SPACE	*/
	  {  { 0x3041 }, { 0,0,0 }  },  /* HIRAGANA a		*/
	  {  { 0x3094 }, { 0,0,0 }  },  /* HIRAGANA u"		*/
	  {  { 0x3099 }, { 0,1,0 }  },  /* SOUND MARK		*/
	  {  { 0x309E }, { 0,0,0 }  },  /* ITERATION MARK	*/
	  {  { 0x30A1 }, { 0,0,0 }  },  /* KATAKANA a		*/
	  {  { 0x30FA }, { 0,0,0 }  },  /* KATAKANA wo"		*/
	  {  { 0x30FB }, { 0,1,0 }  },  /* KATAKANA MID.DOT	*/
	  {  { 0x30FE }, { 0,0,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,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0x4E05 }, { 0,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0x4E06 }, { 0,0,0 }  },  /* CJK UNI.IDEO.NON-J	*/
	  {  { 0x4E07 }, { 0,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0x4FFF }, { 0,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0x9000 }, { 0,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0x9006 }, { 0,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0x9007 }, { 0,0,0 }  },  /* CJK UNI.IDEO.NON-J	*/
	  {  { 0x9FA4 }, { 0,0,0 }  },  /* CJK UNI.IDEO.NON-J	*/
	  {  { 0x9FA5 }, { 0,0,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0xFE4F }, { 0,1,0 }  },  /* CJK UNI.IDEO.	*/
	  {  { 0xFF0F }, { 0,1,0 }  },  /* FULL SLASH		*/
	  {  { 0xFF19 }, { 0,0,0 }  },  /* FULL 9		*/
	  {  { 0xFF20 }, { 0,1,0 }  },  /* FULL @		*/
	  {  { 0xFF3A }, { 0,0,0 }  },  /* FULL Z		*/
	  {  { 0xFF40 }, { 0,1,0 }  },  /* FULL GRAVE ACC.	*/
	  {  { 0xFF5A }, { 0,0,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,0,0 }  },  /* HALF KATA WO		*/
	  {  { 0xFF6F }, { 0,0,0 }  },  /* HALF KATA tu		*/
	  {  { 0xFF70 }, { 0,0,0 }  },  /* HALF KATA PL -	*/
	  {  { 0xFF71 }, { 0,0,0 }  },  /* HALF KATA A		*/
	  {  { 0xFF9E }, { 0,0,0 }  },  /* HALF KATA MI		*/
	  {  .is_last = 1 }		  /* last element    */
	}
    },
    {	TST_ISW_REC (end, alpha) }
};
