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


#include "dat_isw-funcs.h"


TST_ISW_LOC (PRINT, print) = {

  {   TST_ISW_REC (de, print)
      {
	{  { 0x0080 }, { 0,1,0 }  },  /* CTRL     */
	{  { 0x009F }, { 0,1,0 }  },  /* CTRL     */
#ifdef SHOJI_IS_RIGHT
	{  { 0x00A0 }, { 0,1,0 }  },  /* NB SPACE */
#else
	{  { 0x00A0 }, { 0,0,0 }  },  /* NB SPACE */
#endif
	{  { 0x00A1 }, { 0,0,0 }  },  /* UD !     */
	{  { 0x00B0 }, { 0,0,0 }  },  /* Degree   */
	{  { 0x00B1 }, { 0,0,0 }  },  /* +- sign  */
	{  { 0x00B2 }, { 0,0,0 }  },  /* SUP 2    */
	{  { 0x00B3 }, { 0,0,0 }  },  /* SUP 3    */
	{  { 0x00B4 }, { 0,0,0 }  },  /* ACUTE    */
	{  { 0x00B8 }, { 0,0,0 }  },  /* CEDILLA  */
	{  { 0x00B9 }, { 0,0,0 }  },  /* SUP 1    */
	{  { 0x00BB }, { 0,0,0 }  },  /* >>       */
	{  { 0x00BC }, { 0,0,0 }  },  /* 1/4      */
	{  { 0x00BD }, { 0,0,0 }  },  /* 1/2      */
	{  { 0x00BE }, { 0,0,0 }  },  /* 3/4      */
	{  { 0x00BF }, { 0,0,0 }  },  /* UD ?     */
	{  { 0x00C0 }, { 0,0,0 }  },  /* A Grave  */
	{  { 0x00D6 }, { 0,0,0 }  },  /* O dia    */
	{  { 0x00D7 }, { 0,0,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,0,0 }  },  /* division */
	{  { 0x00F8 }, { 0,0,0 }  },  /* o stroke */
	{  { 0x00FF }, { 0,0,0 }  },  /* y dia    */
	{ .is_last = 1 }		/* Last element.  */
      }
  },
  {   TST_ISW_REC (enUS, print)
      {
	{  { WEOF   }, { 0,1,0 }  }, /* 01 */
	{  { 0x0000 }, { 0,1,0 }  },
	{  { 0x001F }, { 0,1,0 }  },
	{  { 0x0020 }, { 0,0,0 }  },
	{  { 0x0021 }, { 0,0,0 }  },
	{  { 0x002F }, { 0,0,0 }  },
	{  { 0x0030 }, { 0,0,0 }  },
	{  { 0x0039 }, { 0,0,0 }  },
	{  { 0x003A }, { 0,0,0 }  },
	{  { 0x0040 }, { 0,0,0 }  },
	{  { 0x0041 }, { 0,0,0 }  },
	{  { 0x005A }, { 0,0,0 }  },
	{  { 0x005B }, { 0,0,0 }  },
	{  { 0x0060 }, { 0,0,0 }  },
	{  { 0x0061 }, { 0,0,0 }  },
	{  { 0x007A }, { 0,0,0 }  },
	{  { 0x007B }, { 0,0,0 }  },
	{  { 0x007E }, { 0,0,0 }  },
	{  { 0x007F }, { 0,1,0 }  },
	{  { 0x0080 }, { 0,1,0 }  }, /* 20 */
#ifdef NO_WAIVER
	{  { 0x3042 }, { 0,1,0 }  }, /* <WAIVER> */
#endif
	{ .is_last = 1 }		/* Last element.  */
      }
  },
  {   TST_ISW_REC (eucJP, print)
      {
	{  { 0x3000 }, { 0,0,0 }  },  /* IDEO. SPACE        */
#ifdef SHOJI_IS_RIGHT
	{  { 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   */
#else
	{  { 0x3020 }, { 0,0,0 }  },  /* POSTAL MARK FACE   */
	{  { 0x3029 }, { 0,0,0 }  },  /* Hangzhou NUM9      */
	{  { 0x302F }, { 0,0,0 }  },  /* Diacritics(Hangul) */
	{  { 0x3037 }, { 0,0,0 }  },  /* Separator Symbol   */
	{  { 0x303F }, { 0,0,0 }  },  /* IDEO. HALF SPACE   */
#endif
	{  { 0x3041 }, { 0,0,0 }  },  /* HIRAGANA a         */
#ifdef SHOJI_IS_RIGHT
	{  { 0x3094 }, { 0,1,0 }  },  /* HIRAGANA u"        */  /* non jis */
	{  { 0x3099 }, { 0,1,0 }  },  /* SOUND MARK         */
#else
	{  { 0x3094 }, { 0,0,0 }  },  /* HIRAGANA u"        */  /* non jis */
	{  { 0x3099 }, { 0,0,0 }  },  /* SOUND MARK         */
#endif
	{  { 0x309E }, { 0,0,0 }  },  /* ITERATION MARK     */  /* 10 */
	{  { 0x30A1 }, { 0,0,0 }  },  /* KATAKANA a         */
#ifdef SHOJI_IS_RIGHT
	{  { 0x30FA }, { 0,1,0 }  },  /* KATAKANA wo"       */  /* non jis */
#else
	{  { 0x30FA }, { 0,0,0 }  },  /* KATAKANA wo"       */  /* non jis */
#endif
	{  { 0x30FB }, { 0,0,0 }  },  /* KATAKANA MID.DOT   */
	{  { 0x30FE }, { 0,0,0 }  },  /* KATAKANA ITERATION */
#ifdef SHOJI_IS_RIGHT
	{  { 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  */
#else
	{  { 0x3191 }, { 0,0,0 }  },  /* KANBUN REV.MARK    */
	{  { 0x3243 }, { 0,0,0 }  },  /* IDEO. MARK (reach) */
	{  { 0x32CB }, { 0,0,0 }  },  /* IDEO.TEL.SYM.DEC12 */
	{  { 0x32FE }, { 0,0,0 }  },  /* MARU KATAKANA wo   */
	{  { 0x33FE }, { 0,0,0 }  },  /* CJK IDEO.TEL.31th  */
#endif
	{  { 0x4E00 }, { 0,0,0 }  },  /* CJK UNI.IDEO.      */  /* 20 */
	{  { 0x4E05 }, { 0,0,0 }  },  /* CJK UNI.IDEO.      */
#ifdef SHOJI_IS_RIGHT
	{  { 0x4E06 }, { 0,1,0 }  },  /* CJK UNI.IDEO.NON-J */
#else
	{  { 0x4E06 }, { 0,0,0 }  },  /* CJK UNI.IDEO.NON-J */
#endif
	{  { 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.      */
#ifdef SHOJI_IS_RIGHT
	{  { 0x9007 }, { 0,1,0 }  },  /* CJK UNI.IDEO.NON-J */
	{  { 0x9FA4 }, { 0,1,0 }  },  /* CJK UNI.IDEO.NON-J */
#else
	{  { 0x9007 }, { 0,0,0 }  },  /* CJK UNI.IDEO.NON-J */
	{  { 0x9FA4 }, { 0,0,0 }  },  /* CJK UNI.IDEO.NON-J */
#endif
	{  { 0x9FA5 }, { 0,0,0 }  },  /* CJK UNI.IDEO.      */
#ifdef SHOJI_IS_RIGHT
	{  { 0xFE4F }, { 0,1,0 }  },  /* WAVE LOW LINE      */  /* 30 */
#else
	{  { 0xFE4F }, { 0,0,0 }  },  /* WAVE LOW LINE      */  /* 30 */
#endif
	{  { 0xFF0F }, { 0,0,0 }  },  /* FULL SLASH         */
	{  { 0xFF19 }, { 0,0,0 }  },  /* FULL 9             */
	{  { 0xFF20 }, { 0,0,0 }  },  /* FULL @             */
	{  { 0xFF3A }, { 0,0,0 }  },  /* FULL Z             */
	{  { 0xFF40 }, { 0,0,0 }  },  /* FULL GRAVE ACC.    */
	{  { 0xFF5A }, { 0,0,0 }  },  /* FULL z             */
	{  { 0xFF5E }, { 0,0,0 }  },  /* FULL ~ (tilde)     */
	{  { 0xFF61 }, { 0,0,0 }  },  /* HALF IDEO.STOP. .  */
	{  { 0xFF65 }, { 0,0,0 }  },  /* HALF KATA MID.DOT  */
	{  { 0xFF66 }, { 0,0,0 }  },  /* HALF KATA WO       */  /* 40 */
	{  { 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, print) }
};
