From 1eb22b2cb23008db93240acffa43a71420b16bf9 Mon Sep 17 00:00:00 2001
From: Tibor Nagy <xnagytibor@gmail.com>
Date: Tue, 19 Feb 2019 20:48:25 +0100
Subject: [PATCH] ctype: Add tests for toascii, tolower, toupper

---
 tests/ctype.c | 532 +++++++++++++++++++++++++-------------------------
 1 file changed, 269 insertions(+), 263 deletions(-)

diff --git a/tests/ctype.c b/tests/ctype.c
index 1fe6c35b..46682640 100644
--- a/tests/ctype.c
+++ b/tests/ctype.c
@@ -16,270 +16,273 @@ struct test_case {
     int isspace;
     int isupper;
     int isxdigit;
+    int toascii;
+    int tolower;
+    int toupper;
 } test_cases[] = {
-    //      a  a  a  b  c  d  g  l  p  p  s  u  x
-    //      l  l  s  l  n  i  r  o  r  u  p  p  d
-    //      n  p  c  a  t  g  a  w  i  n  a  p  i
-    //      u  h  i  n  r  i  p  e  n  c  c  e  g
-    //      m  a  i  k  l  t  h  r  t  t  e  r  i
-    { 0x00, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x01, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x02, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x03, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x04, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x05, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x06, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x07, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x08, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x09, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0},
-    { 0x0A, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
-    { 0x0B, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
-    { 0x0C, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
-    { 0x0D, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
-    { 0x0E, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x0F, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x10, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x11, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x12, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x13, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x14, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x15, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x16, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x17, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x18, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x19, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x1A, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x1B, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x1C, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x1D, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x1E, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x1F, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    {  ' ', 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0},
-    {  '!', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '"', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '#', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '$', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '%', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '&', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    { '\'', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '(', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  ')', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '*', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '+', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  ',', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '-', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '.', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '/', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '0', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '1', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '2', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '3', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '4', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '5', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '6', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '7', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '8', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  '9', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1},
-    {  ':', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  ';', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '<', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '=', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '>', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '?', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '@', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  'A', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1},
-    {  'B', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1},
-    {  'C', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1},
-    {  'D', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1},
-    {  'E', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1},
-    {  'F', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1},
-    {  'G', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'H', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'I', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'J', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'K', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'L', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'M', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'N', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'O', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'P', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'Q', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'R', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'S', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'T', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'U', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'V', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'W', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'X', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'Y', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  'Z', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0},
-    {  '[', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    { '\\', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  ']', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '^', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '_', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '`', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  'a', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
-    {  'b', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
-    {  'c', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
-    {  'd', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
-    {  'e', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
-    {  'f', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1},
-    {  'g', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'h', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'i', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'j', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'k', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'l', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'm', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'n', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'o', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'p', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'q', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'r', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  's', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  't', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'u', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'v', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'w', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'x', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'y', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  'z', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
-    {  '{', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '|', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '}', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    {  '~', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
-    { 0x7F, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x8A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x8B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x8C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x8D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x8E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x8F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x9A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x9B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x9C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x9D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x9E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0x9F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xA9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xAA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xAB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xAC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xAD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xAE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xAF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xB9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xBA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xBB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xBC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xBD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xBE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xBF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xC9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xCA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xCB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xCC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xCD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xCE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xCF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xD9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xDA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xDB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xDC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xDD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xDE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xDF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xE9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xEA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xEB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xEC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xEE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xEF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xF9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xFA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xFB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xFC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xFD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xFE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    { 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-    // SUSv2 states that these isxxxxx functions should also accept EOF.
-    { EOF,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
+    //      a  a  a  b  c  d  g  l  p  p  s  u  x     t     t     t
+    //      l  l  s  l  n  i  r  o  r  u  p  p  d     o     o     o
+    //      n  p  c  a  t  g  a  w  i  n  a  p  i     a     l     u
+    //      u  h  i  n  r  i  p  e  n  c  c  e  g     s     o     p
+    //      m  a  i  k  l  t  h  r  t  t  e  r  i     c     w     p
+    { 0x00, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, 0x00 },
+    { 0x01, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x01, 0x01 },
+    { 0x02, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x02, 0x02, 0x02 },
+    { 0x03, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x03, 0x03, 0x03 },
+    { 0x04, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x04, 0x04, 0x04 },
+    { 0x05, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x05, 0x05, 0x05 },
+    { 0x06, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x06, 0x06, 0x06 },
+    { 0x07, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x07, 0x07, 0x07 },
+    { 0x08, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x08, 0x08 },
+    { 0x09, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0x09, 0x09, 0x09 },
+    { 0x0A, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0x0A, 0x0A, 0x0A },
+    { 0x0B, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0x0B, 0x0B, 0x0B },
+    { 0x0C, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0x0C, 0x0C, 0x0C },
+    { 0x0D, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0x0D, 0x0D, 0x0D },
+    { 0x0E, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x0E, 0x0E, 0x0E },
+    { 0x0F, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x0F, 0x0F, 0x0F },
+    { 0x10, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x10, 0x10, 0x10 },
+    { 0x11, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x11, 0x11, 0x11 },
+    { 0x12, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x12, 0x12, 0x12 },
+    { 0x13, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x13, 0x13, 0x13 },
+    { 0x14, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x14, 0x14, 0x14 },
+    { 0x15, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x15, 0x15, 0x15 },
+    { 0x16, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x16, 0x16, 0x16 },
+    { 0x17, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x17, 0x17, 0x17 },
+    { 0x18, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x18, 0x18, 0x18 },
+    { 0x19, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x19, 0x19, 0x19 },
+    { 0x1A, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x1A, 0x1A, 0x1A },
+    { 0x1B, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x1B, 0x1B, 0x1B },
+    { 0x1C, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x1C, 0x1C, 0x1C },
+    { 0x1D, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x1D, 0x1D, 0x1D },
+    { 0x1E, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x1E, 0x1E, 0x1E },
+    { 0x1F, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x1F, 0x1F, 0x1F },
+    {  ' ', 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0,  ' ',  ' ',  ' ' },
+    {  '!', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '!',  '!',  '!' },
+    {  '"', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '"',  '"',  '"' },
+    {  '#', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '#',  '#',  '#' },
+    {  '$', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '$',  '$',  '$' },
+    {  '%', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '%',  '%',  '%' },
+    {  '&', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '&',  '&',  '&' },
+    { '\'', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, '\'', '\'', '\'' },
+    {  '(', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '(',  '(',  '(' },
+    {  ')', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  ')',  ')',  ')' },
+    {  '*', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '*',  '*',  '*' },
+    {  '+', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '+',  '+',  '+' },
+    {  ',', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  ',',  ',',  ',' },
+    {  '-', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '-',  '-',  '-' },
+    {  '.', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '.',  '.',  '.' },
+    {  '/', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '/',  '/',  '/' },
+    {  '0', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '0',  '0',  '0' },
+    {  '1', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '1',  '1',  '1' },
+    {  '2', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '2',  '2',  '2' },
+    {  '3', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '3',  '3',  '3' },
+    {  '4', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '4',  '4',  '4' },
+    {  '5', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '5',  '5',  '5' },
+    {  '6', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '6',  '6',  '6' },
+    {  '7', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '7',  '7',  '7' },
+    {  '8', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '8',  '8',  '8' },
+    {  '9', 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1,  '9',  '9',  '9' },
+    {  ':', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  ':',  ':',  ':' },
+    {  ';', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  ';',  ';',  ';' },
+    {  '<', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '<',  '<',  '<' },
+    {  '=', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '=',  '=',  '=' },
+    {  '>', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '>',  '>',  '>' },
+    {  '?', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '?',  '?',  '?' },
+    {  '@', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '@',  '@',  '@' },
+    {  'A', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,  'A',  'a',  'A' },
+    {  'B', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,  'B',  'b',  'B' },
+    {  'C', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,  'C',  'c',  'C' },
+    {  'D', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,  'D',  'd',  'D' },
+    {  'E', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,  'E',  'e',  'E' },
+    {  'F', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1,  'F',  'f',  'F' },
+    {  'G', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'G',  'g',  'G' },
+    {  'H', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'H',  'h',  'H' },
+    {  'I', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'I',  'i',  'I' },
+    {  'J', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'J',  'j',  'J' },
+    {  'K', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'K',  'k',  'K' },
+    {  'L', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'L',  'l',  'L' },
+    {  'M', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'M',  'm',  'M' },
+    {  'N', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'N',  'n',  'N' },
+    {  'O', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'O',  'o',  'O' },
+    {  'P', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'P',  'p',  'P' },
+    {  'Q', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'Q',  'q',  'Q' },
+    {  'R', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'R',  'r',  'R' },
+    {  'S', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'S',  's',  'S' },
+    {  'T', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'T',  't',  'T' },
+    {  'U', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'U',  'u',  'U' },
+    {  'V', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'V',  'v',  'V' },
+    {  'W', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'W',  'w',  'W' },
+    {  'X', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'X',  'x',  'X' },
+    {  'Y', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'Y',  'y',  'Y' },
+    {  'Z', 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,  'Z',  'z',  'Z' },
+    {  '[', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '[',  '[',  '[' },
+    { '\\', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, '\\', '\\', '\\' },
+    {  ']', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  ']',  ']',  ']' },
+    {  '^', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '^',  '^',  '^' },
+    {  '_', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '_',  '_',  '_' },
+    {  '`', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '`',  '`',  '`' },
+    {  'a', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,  'a',  'a',  'A' },
+    {  'b', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,  'b',  'b',  'B' },
+    {  'c', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,  'c',  'c',  'C' },
+    {  'd', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,  'd',  'd',  'D' },
+    {  'e', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,  'e',  'e',  'E' },
+    {  'f', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,  'f',  'f',  'F' },
+    {  'g', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'g',  'g',  'G' },
+    {  'h', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'h',  'h',  'H' },
+    {  'i', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'i',  'i',  'I' },
+    {  'j', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'j',  'j',  'J' },
+    {  'k', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'k',  'k',  'K' },
+    {  'l', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'l',  'l',  'L' },
+    {  'm', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'm',  'm',  'M' },
+    {  'n', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'n',  'n',  'N' },
+    {  'o', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'o',  'o',  'O' },
+    {  'p', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'p',  'p',  'P' },
+    {  'q', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'q',  'q',  'Q' },
+    {  'r', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'r',  'r',  'R' },
+    {  's', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  's',  's',  'S' },
+    {  't', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  't',  't',  'T' },
+    {  'u', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'u',  'u',  'U' },
+    {  'v', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'v',  'v',  'V' },
+    {  'w', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'w',  'w',  'W' },
+    {  'x', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'x',  'x',  'X' },
+    {  'y', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'y',  'y',  'Y' },
+    {  'z', 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,  'z',  'z',  'Z' },
+    {  '{', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '{',  '{',  '{' },
+    {  '|', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '|',  '|',  '|' },
+    {  '}', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '}',  '}',  '}' },
+    {  '~', 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,  '~',  '~',  '~' },
+    { 0x7F, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F, 0x7F, 0x7F },
+    { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x80, 0x80 },
+    { 0x81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x81, 0x81 },
+    { 0x82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02, 0x82, 0x82 },
+    { 0x83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03, 0x83, 0x83 },
+    { 0x84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x04, 0x84, 0x84 },
+    { 0x85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x05, 0x85, 0x85 },
+    { 0x86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x06, 0x86, 0x86 },
+    { 0x87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07, 0x87, 0x87 },
+    { 0x88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x08, 0x88, 0x88 },
+    { 0x89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x09, 0x89, 0x89 },
+    { 0x8A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0A, 0x8A, 0x8A },
+    { 0x8B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0B, 0x8B, 0x8B },
+    { 0x8C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0C, 0x8C, 0x8C },
+    { 0x8D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0D, 0x8D, 0x8D },
+    { 0x8E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0E, 0x8E, 0x8E },
+    { 0x8F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0F, 0x8F, 0x8F },
+    { 0x90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10, 0x90, 0x90 },
+    { 0x91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x11, 0x91, 0x91 },
+    { 0x92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x12, 0x92, 0x92 },
+    { 0x93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x13, 0x93, 0x93 },
+    { 0x94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x14, 0x94, 0x94 },
+    { 0x95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x15, 0x95, 0x95 },
+    { 0x96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x16, 0x96, 0x96 },
+    { 0x97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x17, 0x97, 0x97 },
+    { 0x98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x18, 0x98, 0x98 },
+    { 0x99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x19, 0x99, 0x99 },
+    { 0x9A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1A, 0x9A, 0x9A },
+    { 0x9B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1B, 0x9B, 0x9B },
+    { 0x9C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1C, 0x9C, 0x9C },
+    { 0x9D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1D, 0x9D, 0x9D },
+    { 0x9E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1E, 0x9E, 0x9E },
+    { 0x9F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1F, 0x9F, 0x9F },
+    { 0xA0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  ' ', 0xA0, 0xA0 },
+    { 0xA1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '!', 0xA1, 0xA1 },
+    { 0xA2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '"', 0xA2, 0xA2 },
+    { 0xA3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '#', 0xA3, 0xA3 },
+    { 0xA4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '$', 0xA4, 0xA4 },
+    { 0xA5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '%', 0xA5, 0xA5 },
+    { 0xA6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '&', 0xA6, 0xA6 },
+    { 0xA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\'', 0xA7, 0xA7 },
+    { 0xA8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '(', 0xA8, 0xA8 },
+    { 0xA9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  ')', 0xA9, 0xA9 },
+    { 0xAA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '*', 0xAA, 0xAA },
+    { 0xAB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '+', 0xAB, 0xAB },
+    { 0xAC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  ',', 0xAC, 0xAC },
+    { 0xAD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '-', 0xAD, 0xAD },
+    { 0xAE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '.', 0xAE, 0xAE },
+    { 0xAF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '/', 0xAF, 0xAF },
+    { 0xB0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '0', 0xB0, 0xB0 },
+    { 0xB1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '1', 0xB1, 0xB1 },
+    { 0xB2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '2', 0xB2, 0xB2 },
+    { 0xB3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '3', 0xB3, 0xB3 },
+    { 0xB4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '4', 0xB4, 0xB4 },
+    { 0xB5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '5', 0xB5, 0xB5 },
+    { 0xB6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '6', 0xB6, 0xB6 },
+    { 0xB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '7', 0xB7, 0xB7 },
+    { 0xB8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '8', 0xB8, 0xB8 },
+    { 0xB9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '9', 0xB9, 0xB9 },
+    { 0xBA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  ':', 0xBA, 0xBA },
+    { 0xBB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  ';', 0xBB, 0xBB },
+    { 0xBC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '<', 0xBC, 0xBC },
+    { 0xBD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '=', 0xBD, 0xBD },
+    { 0xBE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '>', 0xBE, 0xBE },
+    { 0xBF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '?', 0xBF, 0xBF },
+    { 0xC0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '@', 0xC0, 0xC0 },
+    { 0xC1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'A', 0xC1, 0xC1 },
+    { 0xC2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'B', 0xC2, 0xC2 },
+    { 0xC3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'C', 0xC3, 0xC3 },
+    { 0xC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'D', 0xC4, 0xC4 },
+    { 0xC5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'E', 0xC5, 0xC5 },
+    { 0xC6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'F', 0xC6, 0xC6 },
+    { 0xC7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'G', 0xC7, 0xC7 },
+    { 0xC8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'H', 0xC8, 0xC8 },
+    { 0xC9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'I', 0xC9, 0xC9 },
+    { 0xCA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'J', 0xCA, 0xCA },
+    { 0xCB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'K', 0xCB, 0xCB },
+    { 0xCC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'L', 0xCC, 0xCC },
+    { 0xCD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'M', 0xCD, 0xCD },
+    { 0xCE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'N', 0xCE, 0xCE },
+    { 0xCF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'O', 0xCF, 0xCF },
+    { 0xD0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'P', 0xD0, 0xD0 },
+    { 0xD1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'Q', 0xD1, 0xD1 },
+    { 0xD2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'R', 0xD2, 0xD2 },
+    { 0xD3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'S', 0xD3, 0xD3 },
+    { 0xD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'T', 0xD4, 0xD4 },
+    { 0xD5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'U', 0xD5, 0xD5 },
+    { 0xD6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'V', 0xD6, 0xD6 },
+    { 0xD7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'W', 0xD7, 0xD7 },
+    { 0xD8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'X', 0xD8, 0xD8 },
+    { 0xD9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'Y', 0xD9, 0xD9 },
+    { 0xDA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'Z', 0xDA, 0xDA },
+    { 0xDB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '[', 0xDB, 0xDB },
+    { 0xDC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\\', 0xDC, 0xDC },
+    { 0xDD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  ']', 0xDD, 0xDD },
+    { 0xDE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '^', 0xDE, 0xDE },
+    { 0xDF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '_', 0xDF, 0xDF },
+    { 0xE0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '`', 0xE0, 0xE0 },
+    { 0xE1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'a', 0xE1, 0xE1 },
+    { 0xE2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'b', 0xE2, 0xE2 },
+    { 0xE3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'c', 0xE3, 0xE3 },
+    { 0xE4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'd', 0xE4, 0xE4 },
+    { 0xE5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'e', 0xE5, 0xE5 },
+    { 0xE6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'f', 0xE6, 0xE6 },
+    { 0xE7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'g', 0xE7, 0xE7 },
+    { 0xE8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'h', 0xE8, 0xE8 },
+    { 0xE9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'i', 0xE9, 0xE9 },
+    { 0xEA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'j', 0xEA, 0xEA },
+    { 0xEB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'k', 0xEB, 0xEB },
+    { 0xEC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'l', 0xEC, 0xEC },
+    { 0xED, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'm', 0xED, 0xED },
+    { 0xEE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'n', 0xEE, 0xEE },
+    { 0xEF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'o', 0xEF, 0xEF },
+    { 0xF0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'p', 0xF0, 0xF0 },
+    { 0xF1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'q', 0xF1, 0xF1 },
+    { 0xF2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'r', 0xF2, 0xF2 },
+    { 0xF3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  's', 0xF3, 0xF3 },
+    { 0xF4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  't', 0xF4, 0xF4 },
+    { 0xF5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'u', 0xF5, 0xF5 },
+    { 0xF6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'v', 0xF6, 0xF6 },
+    { 0xF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'w', 0xF7, 0xF7 },
+    { 0xF8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'x', 0xF8, 0xF8 },
+    { 0xF9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'y', 0xF9, 0xF9 },
+    { 0xFA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  'z', 0xFA, 0xFA },
+    { 0xFB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '{', 0xFB, 0xFB },
+    { 0xFC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '|', 0xFC, 0xFC },
+    { 0xFD, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '}', 0xFD, 0xFD },
+    { 0xFE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  '~', 0xFE, 0xFE },
+    { 0xFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F, 0xFF, 0xFF },
+    // SUSv2 states that these functions should also accept EOF.
+    { EOF,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x7F,  EOF,  EOF }
 };
 
 size_t num_test_cases = sizeof(test_cases) / sizeof(struct test_case);
@@ -308,6 +311,9 @@ int main(int argc, char* argv[]) {
         CHECK_TEST(tc, isspace, retval);
         CHECK_TEST(tc, isupper, retval);
         CHECK_TEST(tc, isxdigit, retval);
+        CHECK_TEST(tc, toascii, retval);
+        CHECK_TEST(tc, tolower, retval);
+        CHECK_TEST(tc, toupper, retval);
     }
 
     if (!retval) {
-- 
GitLab