stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From se...@apache.org
Subject svn commit: r369156 - in /incubator/stdcxx/trunk/tests/strings: 21.cctype.cpp 21.cwctype.cpp
Date Sun, 15 Jan 2006 01:43:47 GMT
Author: sebor
Date: Sat Jan 14 17:43:42 2006
New Revision: 369156

URL: http://svn.apache.org/viewcvs?rev=369156&view=rev
Log:
2006-01-14  Martin Sebor  <sebor@roguewave.com>

	* 21.cctype.cpp: New test exercising lib.c.strings, the contents
	of the header <cctype>.
	* 21.cwctype.cpp: New test exercising lib.c.strings, the contents
	of the header <cwctype>.

Added:
    incubator/stdcxx/trunk/tests/strings/21.cctype.cpp   (with props)
    incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp   (with props)

Added: incubator/stdcxx/trunk/tests/strings/21.cctype.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/strings/21.cctype.cpp?rev=369156&view=auto
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.cctype.cpp (added)
+++ incubator/stdcxx/trunk/tests/strings/21.cctype.cpp Sat Jan 14 17:43:42 2006
@@ -0,0 +1,692 @@
+/***************************************************************************
+ *
+ * 21.cctype.cpp - test exercising clause lib.string.c.strings,
+ *                 header <cctype>
+ *
+ * $Id$
+ *
+ ***************************************************************************
+ *
+ * Copyright (c) 1994-2005 Quovadx,  Inc., acting through its  Rogue Wave
+ * Software division. Licensed under the Apache License, Version 2.0 (the
+ * "License");  you may  not use this file except  in compliance with the
+ * License.    You    may   obtain   a   copy   of    the   License    at
+ * http://www.apache.org/licenses/LICENSE-2.0.    Unless   required    by
+ * applicable law  or agreed to  in writing,  software  distributed under
+ * the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR
+ * CONDITIONS OF  ANY KIND, either  express or implied.  See  the License
+ * for the specific language governing permissions  and limitations under
+ * the License.
+ * 
+ **************************************************************************/
+
+#include <cctype>
+#include <driver.h>
+
+/**************************************************************************/
+
+// detect masking macros
+const char* const cctype_macros [] = {
+
+#ifdef isalnum
+    "isalnum",
+#else
+    "",
+#endif
+
+#ifdef isalpha
+    "isalpha",
+#else
+    "",
+#endif
+
+#ifdef iscntrl
+    "iscntrl",
+#else
+    "",
+#endif
+
+#ifdef isdigit
+    "isdigit",
+#else
+    "",
+#endif
+
+#ifdef isgraph
+    "isgraph",
+#else
+    "",
+#endif
+
+#ifdef islower
+    "islower",
+#else
+    "",
+#endif
+
+#ifdef isprint
+    "isprint",
+#else
+    "",
+#endif
+
+#ifdef ispunct
+    "ispunct",
+#else
+    "",
+#endif
+
+#ifdef isspace
+    "isspace",
+#else
+    "",
+#endif
+
+#ifdef isupper
+    "isupper",
+#else
+    "",
+#endif
+
+#ifdef isxdigit
+    "isxdigit",
+#else
+    "",
+#endif
+
+#ifdef tolower
+    "tolower",
+#else
+    "",
+#endif
+
+#ifdef toupper
+    "toupper",
+#else
+    "",
+#endif
+
+    0
+};
+
+/**************************************************************************/
+
+// define function template overloads for the <cctype> functions with
+// the same name to detect whether the C versions are declared or not
+#define TEST_FUNCTION(name)                                             \
+    template <class T> int name (T) { function_called = 0; return 0; }  \
+    typedef void rw_unused_typedef
+
+int function_called;
+
+_RWSTD_NAMESPACE (std) {
+
+TEST_FUNCTION (isalnum);
+TEST_FUNCTION (isalpha);
+TEST_FUNCTION (iscntrl);
+TEST_FUNCTION (isdigit);
+TEST_FUNCTION (isprint);
+TEST_FUNCTION (isupper);
+TEST_FUNCTION (tolower);
+TEST_FUNCTION (isgraph);
+TEST_FUNCTION (ispunct);
+TEST_FUNCTION (isxdigit);
+TEST_FUNCTION (toupper);
+
+}   // namespace std
+
+/**************************************************************************/
+
+enum {
+    bit_alnum  = 1,
+    bit_alpha  = 1 << 1,
+    bit_cntrl  = 1 << 2,
+    bit_digit  = 1 << 3,
+    bit_graph  = 1 << 4,
+    bit_lower  = 1 << 5,
+    bit_print  = 1 << 6,
+    bit_punct  = 1 << 7,
+    bit_space  = 1 << 8,
+    bit_upper  = 1 << 9,
+    bit_xdigit = 1 << 10
+};
+
+
+static char*
+get_bitmask (int mask, char *str)
+{
+    char *str_save = str;
+
+#define APPEND(bit)                                     \
+    if (mask & bit_ ## bit) {                           \
+        for (const char *s = #bit; *s; ++s, ++str)      \
+            *str = *s;                                  \
+        *str++ = '|';                                   \
+    } else (void)0
+
+    APPEND (alnum);
+    APPEND (alpha);
+    APPEND (cntrl);
+    APPEND (digit);
+    APPEND (graph);
+    APPEND (lower);
+    APPEND (print);
+    APPEND (punct);
+    APPEND (space);
+    APPEND (upper);
+    APPEND (xdigit);
+
+    if (str == str_save)
+        *str = '\0';
+    else
+        str [-1] = '\0';
+
+    return str_save;
+}
+
+
+static const int
+char_mask [256] = {
+
+#undef  LETTER
+#define LETTER(bits) bit_alpha | bit_alnum | bit_print | bit_graph | bits
+
+#if 'A' == 0x41
+
+    /* 0x00 */ bit_cntrl,
+    /* 0x01 */ bit_cntrl,
+    /* 0x02 */ bit_cntrl,
+    /* 0x03 */ bit_cntrl,
+    /* 0x04 */ bit_cntrl,
+    /* 0x05 */ bit_cntrl,
+    /* 0x06 */ bit_cntrl,
+    /* 0x07 */ bit_cntrl,
+    /* 0x08 */ bit_cntrl,
+    /* 0x09 */ bit_space | bit_cntrl,
+    /* 0x0a */ bit_space | bit_cntrl,
+    /* 0x0b */ bit_space | bit_cntrl,
+    /* 0x0c */ bit_space | bit_cntrl,
+    /* 0x0d */ bit_space | bit_cntrl,
+    /* 0x0e */ bit_cntrl,
+    /* 0x0f */ bit_cntrl,
+    /* 0x10 */ bit_cntrl,
+    /* 0x11 */ bit_cntrl,
+    /* 0x12 */ bit_cntrl,
+    /* 0x13 */ bit_cntrl,
+    /* 0x14 */ bit_cntrl,
+    /* 0x15 */ bit_cntrl,
+    /* 0x16 */ bit_cntrl,
+    /* 0x17 */ bit_cntrl,
+    /* 0x18 */ bit_cntrl,
+    /* 0x19 */ bit_cntrl,
+    /* 0x1a */ bit_cntrl,
+    /* 0x1b */ bit_cntrl,
+    /* 0x1c */ bit_cntrl,
+    /* 0x1d */ bit_cntrl,
+    /* 0x1e */ bit_cntrl,
+    /* 0x1f */ bit_cntrl,
+    /* ' '  */ bit_space | bit_print,
+    /* '!'  */ bit_print | bit_punct | bit_graph,
+    /* '"'  */ bit_print | bit_punct | bit_graph,
+    /* '#'  */ bit_print | bit_punct | bit_graph,
+    /* '$'  */ bit_print | bit_punct | bit_graph,
+    /* '%'  */ bit_print | bit_punct | bit_graph,
+    /* '&'  */ bit_print | bit_punct | bit_graph,
+    /* '\'' */ bit_print | bit_punct | bit_graph,
+    /* '('  */ bit_print | bit_punct | bit_graph,
+    /* ')'  */ bit_print | bit_punct | bit_graph,
+    /* '*'  */ bit_print | bit_punct | bit_graph,
+    /* '+'  */ bit_print | bit_punct | bit_graph,
+    /* ','  */ bit_print | bit_punct | bit_graph,
+    /* '-'  */ bit_print | bit_punct | bit_graph,
+    /* '.'  */ bit_print | bit_punct | bit_graph,
+    /* '/'  */ bit_print | bit_punct | bit_graph,
+    /* '0'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '1'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '2'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '3'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '4'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '5'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '6'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '7'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '8'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '9'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* ':'  */ bit_print | bit_punct | bit_graph,
+    /* ';'  */ bit_print | bit_punct | bit_graph,
+    /* '<'  */ bit_print | bit_punct | bit_graph,
+    /* '='  */ bit_print | bit_punct | bit_graph,
+    /* '>'  */ bit_print | bit_punct | bit_graph,
+    /* '?'  */ bit_print | bit_punct | bit_graph,
+    /* '@'  */ bit_print | bit_punct | bit_graph,
+
+    /* 'A'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'B'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'C'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'D'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'E'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'F'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'G'  */ LETTER (bit_upper),
+    /* 'H'  */ LETTER (bit_upper),
+    /* 'I'  */ LETTER (bit_upper),
+    /* 'J'  */ LETTER (bit_upper),
+    /* 'K'  */ LETTER (bit_upper),
+    /* 'L'  */ LETTER (bit_upper),
+    /* 'M'  */ LETTER (bit_upper),
+    /* 'N'  */ LETTER (bit_upper),
+    /* 'O'  */ LETTER (bit_upper),
+    /* 'P'  */ LETTER (bit_upper),
+    /* 'Q'  */ LETTER (bit_upper),
+    /* 'R'  */ LETTER (bit_upper),
+    /* 'S'  */ LETTER (bit_upper),
+    /* 'T'  */ LETTER (bit_upper),
+    /* 'U'  */ LETTER (bit_upper),
+    /* 'V'  */ LETTER (bit_upper),
+    /* 'W'  */ LETTER (bit_upper),
+    /* 'X'  */ LETTER (bit_upper),
+    /* 'Y'  */ LETTER (bit_upper),
+    /* 'Z'  */ LETTER (bit_upper),
+    /* '['  */ bit_print | bit_punct | bit_graph,
+    /* '\\' */ bit_print | bit_punct | bit_graph,
+    /* ']'  */ bit_print | bit_punct | bit_graph,
+    /* '^'  */ bit_print | bit_punct | bit_graph,
+    /* '_'  */ bit_print | bit_punct | bit_graph,
+    /* '`'  */ bit_print | bit_punct | bit_graph,
+    /* 'a'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'b'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'c'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'd'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'e'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'f'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'g'  */ LETTER (bit_lower),
+    /* 'h'  */ LETTER (bit_lower),
+    /* 'i'  */ LETTER (bit_lower),
+    /* 'j'  */ LETTER (bit_lower),
+    /* 'k'  */ LETTER (bit_lower),
+    /* 'l'  */ LETTER (bit_lower),
+    /* 'm'  */ LETTER (bit_lower),
+    /* 'n'  */ LETTER (bit_lower),
+    /* 'o'  */ LETTER (bit_lower),
+    /* 'p'  */ LETTER (bit_lower),
+    /* 'q'  */ LETTER (bit_lower),
+    /* 'r'  */ LETTER (bit_lower),
+    /* 's'  */ LETTER (bit_lower),
+    /* 't'  */ LETTER (bit_lower),
+    /* 'u'  */ LETTER (bit_lower),
+    /* 'v'  */ LETTER (bit_lower),
+    /* 'w'  */ LETTER (bit_lower),
+    /* 'x'  */ LETTER (bit_lower),
+    /* 'y'  */ LETTER (bit_lower),
+    /* 'z'  */ LETTER (bit_lower),
+    /* '{'  */ bit_print | bit_punct | bit_graph,
+    /* '|'  */ bit_print | bit_punct | bit_graph,
+    /* '}'  */ bit_print | bit_punct | bit_graph,
+    /* '~'  */ bit_print | bit_punct | bit_graph,
+    /* 0x7f */ bit_cntrl
+
+#elif 'A' == 0xc1
+
+    /* NUL */ bit_cntrl,
+    /* SOH */ bit_cntrl,
+    /* STX */ bit_cntrl,
+    /* ETX */ bit_cntrl,
+    /* PF  */ bit_cntrl,
+    /* HT  */ bit_cntrl,
+    /* LC  */ bit_cntrl,
+    /* DEL */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /* SMM */ bit_cntrl,
+    /* VT  */ bit_cntrl,
+    /* FF  */ bit_cntrl,
+    /* CR  */ bit_cntrl,
+    /* SO  */ bit_cntrl,
+    /* SI  */ bit_cntrl,
+    /* DLE */ bit_cntrl,
+    /* DC1 */ bit_cntrl,
+    /* DC2 */ bit_cntrl,
+    /* TM  */ bit_cntrl,
+    /* RES */ bit_cntrl,
+    /* NL  */ bit_cntrl,
+    /* BS  */ bit_cntrl,
+    /* IL  */ bit_cntrl,
+    /* CAN */ bit_cntrl,
+    /* EM  */ bit_cntrl,
+    /* CC  */ bit_cntrl,
+    /* CU1 */ bit_cntrl,
+    /* IFS */ bit_cntrl,
+    /* IGS */ bit_cntrl,
+    /* IRS */ bit_cntrl,
+    /* IUS */ bit_cntrl,
+    /* DS  */ bit_cntrl,
+    /* SOS */ bit_cntrl,
+    /* FS  */ bit_cntrl,
+    /*     */ 0,
+    /* BYP */ bit_cntrl,
+    /* LF  */ bit_cntrl,
+    /* ETB */ bit_cntrl,
+    /* ESC */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /* SM  */ bit_cntrl,
+    /* CU2 */ bit_cntrl,
+    /*     */ 0,
+    /* ENQ */ bit_cntrl,
+    /* ACK */ bit_cntrl,
+    /* BEL */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /* SYN */ bit_cntrl,
+    /*     */ 0,
+    /* PN  */ bit_cntrl,
+    /* RS  */ bit_cntrl,
+    /* UC  */ bit_cntrl,
+    /* EOT */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* CU3 */ bit_cntrl,
+    /* DC4 */ bit_cntrl,
+    /* NAK */ bit_cntrl,
+    /*     */ 0,
+    /* SUB */ bit_cntrl,
+    /* SP  */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* ct. */ bit_print | bit_punct | bit_graph,
+    /* '.' */ bit_print | bit_punct | bit_graph,
+    /* '<' */ bit_print | bit_punct | bit_graph,
+    /* '(' */ bit_print | bit_punct | bit_graph,
+    /* '+' */ bit_print | bit_punct | bit_graph,
+    /* '|' */ bit_print | bit_punct | bit_graph,
+    /* '&' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* '!' */ bit_print | bit_punct | bit_graph,
+    /* '$' */ bit_print | bit_punct | bit_graph,
+    /* '*' */ bit_print | bit_punct | bit_graph,
+    /* ')' */ bit_print | bit_punct | bit_graph,
+    /* ';' */ bit_print | bit_punct | bit_graph,
+    /* '~' */ bit_print | bit_punct | bit_graph,
+    /* '-' */ bit_print | bit_punct | bit_graph,
+    /* '/' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* ',' */ bit_print | bit_punct | bit_graph,
+    /* '%' */ bit_print | bit_punct | bit_graph,
+    /* '_' */ bit_print | bit_punct | bit_graph,
+    /* '>' */ bit_print | bit_punct | bit_graph,
+    /* '?' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* ':' */ bit_print | bit_punct | bit_graph,
+    /* '#' */ bit_print | bit_punct | bit_graph,
+    /* '@' */ bit_print | bit_punct | bit_graph,
+    /* ''' */ bit_print | bit_punct | bit_graph,
+    /* '=' */ bit_print | bit_punct | bit_graph,
+    /* '"' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /* 'a' */ LETTER (bit_lower | bit_xdigit),
+    /* 'b' */ LETTER (bit_lower | bit_xdigit),
+    /* 'c' */ LETTER (bit_lower | bit_xdigit),
+    /* 'd' */ LETTER (bit_lower | bit_xdigit),
+    /* 'e' */ LETTER (bit_lower | bit_xdigit),
+    /* 'f' */ LETTER (bit_lower | bit_xdigit),
+    /* 'g' */ LETTER (bit_lower),
+    /* 'h' */ LETTER (bit_lower),
+    /* 'i' */ LETTER (bit_lower),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'j' */ LETTER (bit_lower),
+    /* 'k' */ LETTER (bit_lower),
+    /* 'l' */ LETTER (bit_lower),
+    /* 'm' */ LETTER (bit_lower),
+    /* 'n' */ LETTER (bit_lower),
+    /* 'o' */ LETTER (bit_lower),
+    /* 'p' */ LETTER (bit_lower),
+    /* 'q' */ LETTER (bit_lower),
+    /* 'r' */ LETTER (bit_lower),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 's' */ LETTER (bit_lower),
+    /* 't' */ LETTER (bit_lower),
+    /* 'u' */ LETTER (bit_lower),
+    /* 'v' */ LETTER (bit_lower),
+    /* 'w' */ LETTER (bit_lower),
+    /* 'x' */ LETTER (bit_lower),
+    /* 'y' */ LETTER (bit_lower),
+    /* 'z' */ LETTER (bit_lower),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* '`' */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'A' */ LETTER (bit_upper | bit_xdigit),
+    /* 'B' */ LETTER (bit_upper | bit_xdigit),
+    /* 'C' */ LETTER (bit_upper | bit_xdigit),
+    /* 'D' */ LETTER (bit_upper | bit_xdigit),
+    /* 'E' */ LETTER (bit_upper | bit_xdigit),
+    /* 'F' */ LETTER (bit_upper | bit_xdigit),
+    /* 'G' */ LETTER (bit_upper),
+    /* 'H' */ LETTER (bit_upper),
+    /* 'I' */ LETTER (bit_upper),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'J' */ LETTER (bit_upper),
+    /* 'K' */ LETTER (bit_upper),
+    /* 'L' */ LETTER (bit_upper),
+    /* 'M' */ LETTER (bit_upper),
+    /* 'N' */ LETTER (bit_upper),
+    /* 'O' */ LETTER (bit_upper),
+    /* 'P' */ LETTER (bit_upper),
+    /* 'Q' */ LETTER (bit_upper),
+    /* 'R' */ LETTER (bit_upper),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'S' */ LETTER (bit_upper),
+    /* 'T' */ LETTER (bit_upper),
+    /* 'U' */ LETTER (bit_upper),
+    /* 'V' */ LETTER (bit_upper),
+    /* 'W' */ LETTER (bit_upper),
+    /* 'X' */ LETTER (bit_upper),
+    /* 'Y' */ LETTER (bit_upper),
+    /* 'Z' */ LETTER (bit_upper),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* '0' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '1' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '2' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '3' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '4' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '5' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '6' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '7' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '8' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '9' */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0
+
+#else   // 'A' != 0x41 && 'A' != 0xc1
+#  error unknown character set (neither ASCII nor EBCDIC)
+#endif   // ASCII or EBCDIC
+
+};
+
+
+static void
+test_behavior ()
+{
+    rw_info (0, 0, 0, "behavior of <cctype> functions in the \"C\" locale");
+
+    char extra_str [80];
+    char missing_str [80];
+
+    for (int i = 0; i != 256; ++i) {
+
+        typedef unsigned char UChar;
+
+        const int c = UChar (i);
+
+        int mask = 0;
+
+        mask |= std::isalnum (c) ? bit_alnum : 0;
+        mask |= std::isalpha (c) ? bit_alpha : 0;
+        mask |= std::iscntrl (c) ? bit_cntrl : 0;
+        mask |= std::isdigit (c) ? bit_digit : 0;
+        mask |= std::isgraph (c) ? bit_graph : 0;
+        mask |= std::islower (c) ? bit_lower : 0;
+        mask |= std::isprint (c) ? bit_print : 0;
+        mask |= std::ispunct (c) ? bit_punct : 0;
+        mask |= std::isspace (c) ? bit_space : 0;
+        mask |= std::isupper (c) ? bit_upper : 0;
+        mask |= std::isxdigit (c) ? bit_xdigit : 0;
+
+        const int extra_bits   = mask & ~char_mask [i];
+        const int missing_bits = ~mask & char_mask [i];
+
+        rw_assert (mask == char_mask [i], 0, 0,
+                   "%#c mask%{?} missing bits %s (%#x)%{;}"
+                   "%{?} extra bits %s (%#x)%{;}",
+                   c,
+                   missing_bits,
+                   get_bitmask (missing_bits, missing_str), missing_bits,
+                   extra_bits,
+                   get_bitmask (extra_bits, extra_str), extra_bits);
+    }
+}
+
+/**************************************************************************/
+
+static int rw_opt_no_behavior;   // for --no-behavior
+
+static int
+run_test (int, char**)
+{
+    //////////////////////////////////////////////////////////////////
+    rw_info (0, 0, 0, "checking for the absence of masking macros");
+
+    // verify the shadow macros are not #defined (explicitly
+    // disallowed by 17.4.1.2, p6 and Footnote 159 of C++ '03)
+    for (unsigned i = 0; cctype_macros [i]; ++i) {
+        rw_assert ('\0' == cctype_macros [i][0], 0, 0,
+                   "macro %s unexpectedly #defined", cctype_macros [i]);
+    }
+
+    //////////////////////////////////////////////////////////////////
+    // verify that each function is defined
+#define TEST(function)                                          \
+    do {                                                        \
+        rw_info (0, 0, 0, "%s(int) definition", #function);     \
+        function (function_called = 1);                         \
+        rw_assert (1 == function_called, 0, __LINE__,           \
+                   "%s (int) not defined", #function);          \
+    } while (0)
+
+    TEST (std::isalnum);
+    TEST (std::isalpha);
+    TEST (std::iscntrl);
+    TEST (std::isdigit);
+    TEST (std::isgraph);
+    TEST (std::islower);
+    TEST (std::isprint);
+    TEST (std::ispunct);
+    TEST (std::isupper);
+    TEST (std::isxdigit);
+    TEST (std::tolower);
+    TEST (std::toupper);
+
+    //////////////////////////////////////////////////////////////////
+    if (rw_opt_no_behavior)
+        rw_note (0, 0, 0, "behavior test disabled (use --test-behavior)");
+    else
+        test_behavior ();
+
+    return 0;
+}
+
+/**************************************************************************/
+
+int main (int argc, char *argv[])
+{
+    return rw_test (argc, argv, __FILE__,
+                    "lib.c.strings",
+                    "header <cctype>",
+                    run_test,
+                    "|-no-behavior#0-1 ",
+                    &rw_opt_no_behavior);
+}

Propchange: incubator/stdcxx/trunk/tests/strings/21.cctype.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/stdcxx/trunk/tests/strings/21.cctype.cpp
------------------------------------------------------------------------------
    svn:keywords = Id

Added: incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp?rev=369156&view=auto
==============================================================================
--- incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp (added)
+++ incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp Sat Jan 14 17:43:42 2006
@@ -0,0 +1,704 @@
+/***************************************************************************
+ *
+ * 21.cwctype.cpp - test exercising clause lib.string.c.strings,
+ *                  header <cwctype>
+ *
+ * $Id$
+ *
+ ***************************************************************************
+ *
+ * Copyright (c) 1994-2005 Quovadx,  Inc., acting through its  Rogue Wave
+ * Software division. Licensed under the Apache License, Version 2.0 (the
+ * "License");  you may  not use this file except  in compliance with the
+ * License.    You    may   obtain   a   copy   of    the   License    at
+ * http://www.apache.org/licenses/LICENSE-2.0.    Unless   required    by
+ * applicable law  or agreed to  in writing,  software  distributed under
+ * the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR
+ * CONDITIONS OF  ANY KIND, either  express or implied.  See  the License
+ * for the specific language governing permissions  and limitations under
+ * the License.
+ * 
+ **************************************************************************/
+
+#include <cwctype>
+#include <driver.h>
+
+/**************************************************************************/
+
+// detect masking macros
+const char* const cwctype_macros [] = {
+
+#ifdef iswalnum
+    "iswalnum",
+#else
+    "",
+#endif
+
+#ifdef iswalpha
+    "iswalpha",
+#else
+    "",
+#endif
+
+#ifdef iswcntrl
+    "iswcntrl",
+#else
+    "",
+#endif
+
+#ifdef iswdigit
+    "iswdigit",
+#else
+    "",
+#endif
+
+#ifdef iswgraph
+    "iswgraph",
+#else
+    "",
+#endif
+
+#ifdef iswlower
+    "iswlower",
+#else
+    "",
+
+#ifdef iswprint
+    "iswprint",
+#else
+    "",
+#endif
+
+#ifdef iswpunct
+    "iswpunct",
+#else
+    "",
+#endif
+
+#ifdef iswspace
+    "iswspace",
+#else
+    "",
+#endif
+
+#ifdef iswupper
+    "iswupper",
+#else
+    "",
+#endif
+
+#ifdef iswxdigit
+    "iswxdigit",
+#else
+    "",
+#endif
+
+#endif
+
+#ifdef tolower
+    "tolower",
+#else
+    "",
+#endif
+
+#ifdef toupper
+    "toupper",
+#else
+    "",
+#endif
+
+    0
+};
+
+/**************************************************************************/
+
+// define function template overloads for the <cctype> functions with
+// the same name to detect whether the C versions are declared or not
+#define TEST_FUNCTION(name)                                             \
+    template <class T> int name (T) { function_called = 0; return 0; }  \
+    typedef void rw_unused_typedef
+
+int function_called;
+
+_RWSTD_NAMESPACE (std) {
+
+TEST_FUNCTION (iswalnum);
+TEST_FUNCTION (iswalpha);
+TEST_FUNCTION (iswcntrl);
+TEST_FUNCTION (iswdigit);
+TEST_FUNCTION (iswgraph);
+TEST_FUNCTION (iswprint);
+TEST_FUNCTION (iswpunct);
+TEST_FUNCTION (iswspace);
+TEST_FUNCTION (iswupper);
+TEST_FUNCTION (iswxdigit);
+TEST_FUNCTION (towlower);
+TEST_FUNCTION (towupper);
+
+}   // namespace std
+
+/**************************************************************************/
+
+enum {
+    bit_alnum  = 1,
+    bit_alpha  = 1 << 1,
+    bit_cntrl  = 1 << 2,
+    bit_digit  = 1 << 3,
+    bit_graph  = 1 << 4,
+    bit_lower  = 1 << 5,
+    bit_print  = 1 << 6,
+    bit_punct  = 1 << 7,
+    bit_space  = 1 << 8,
+    bit_upper  = 1 << 9,
+    bit_xdigit = 1 << 10
+};
+
+
+static char*
+get_bitmask (int mask, char *str)
+{
+    char *str_save = str;
+
+#define APPEND(bit)                                     \
+    if (mask & bit_ ## bit) {                           \
+        for (const char *s = #bit; *s; ++s, ++str)      \
+            *str = *s;                                  \
+        *str++ = '|';                                   \
+    } else (void)0
+
+    APPEND (alnum);
+    APPEND (alpha);
+    APPEND (cntrl);
+    APPEND (digit);
+    APPEND (graph);
+    APPEND (lower);
+    APPEND (print);
+    APPEND (punct);
+    APPEND (space);
+    APPEND (upper);
+    APPEND (xdigit);
+
+    if (str == str_save)
+        *str = '\0';
+    else
+        str [-1] = '\0';
+
+    return str_save;
+}
+
+
+static const int
+char_mask [256] = {
+
+#undef  LETTER
+#define LETTER(bits) bit_alpha | bit_alnum | bit_print | bit_graph | bits
+
+#if 'A' == 0x41
+
+    /* 0x00 */ bit_cntrl,
+    /* 0x01 */ bit_cntrl,
+    /* 0x02 */ bit_cntrl,
+    /* 0x03 */ bit_cntrl,
+    /* 0x04 */ bit_cntrl,
+    /* 0x05 */ bit_cntrl,
+    /* 0x06 */ bit_cntrl,
+    /* 0x07 */ bit_cntrl,
+    /* 0x08 */ bit_cntrl,
+    /* 0x09 */ bit_space | bit_cntrl,
+    /* 0x0a */ bit_space | bit_cntrl,
+    /* 0x0b */ bit_space | bit_cntrl,
+    /* 0x0c */ bit_space | bit_cntrl,
+    /* 0x0d */ bit_space | bit_cntrl,
+    /* 0x0e */ bit_cntrl,
+    /* 0x0f */ bit_cntrl,
+    /* 0x10 */ bit_cntrl,
+    /* 0x11 */ bit_cntrl,
+    /* 0x12 */ bit_cntrl,
+    /* 0x13 */ bit_cntrl,
+    /* 0x14 */ bit_cntrl,
+    /* 0x15 */ bit_cntrl,
+    /* 0x16 */ bit_cntrl,
+    /* 0x17 */ bit_cntrl,
+    /* 0x18 */ bit_cntrl,
+    /* 0x19 */ bit_cntrl,
+    /* 0x1a */ bit_cntrl,
+    /* 0x1b */ bit_cntrl,
+    /* 0x1c */ bit_cntrl,
+    /* 0x1d */ bit_cntrl,
+    /* 0x1e */ bit_cntrl,
+    /* 0x1f */ bit_cntrl,
+    /* ' '  */ bit_space | bit_print,
+    /* '!'  */ bit_print | bit_punct | bit_graph,
+    /* '"'  */ bit_print | bit_punct | bit_graph,
+    /* '#'  */ bit_print | bit_punct | bit_graph,
+    /* '$'  */ bit_print | bit_punct | bit_graph,
+    /* '%'  */ bit_print | bit_punct | bit_graph,
+    /* '&'  */ bit_print | bit_punct | bit_graph,
+    /* '\'' */ bit_print | bit_punct | bit_graph,
+    /* '('  */ bit_print | bit_punct | bit_graph,
+    /* ')'  */ bit_print | bit_punct | bit_graph,
+    /* '*'  */ bit_print | bit_punct | bit_graph,
+    /* '+'  */ bit_print | bit_punct | bit_graph,
+    /* ','  */ bit_print | bit_punct | bit_graph,
+    /* '-'  */ bit_print | bit_punct | bit_graph,
+    /* '.'  */ bit_print | bit_punct | bit_graph,
+    /* '/'  */ bit_print | bit_punct | bit_graph,
+    /* '0'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '1'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '2'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '3'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '4'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '5'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '6'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '7'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '8'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '9'  */ bit_alnum | bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* ':'  */ bit_print | bit_punct | bit_graph,
+    /* ';'  */ bit_print | bit_punct | bit_graph,
+    /* '<'  */ bit_print | bit_punct | bit_graph,
+    /* '='  */ bit_print | bit_punct | bit_graph,
+    /* '>'  */ bit_print | bit_punct | bit_graph,
+    /* '?'  */ bit_print | bit_punct | bit_graph,
+    /* '@'  */ bit_print | bit_punct | bit_graph,
+
+    /* 'A'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'B'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'C'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'D'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'E'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'F'  */ LETTER (bit_upper | bit_xdigit),
+    /* 'G'  */ LETTER (bit_upper),
+    /* 'H'  */ LETTER (bit_upper),
+    /* 'I'  */ LETTER (bit_upper),
+    /* 'J'  */ LETTER (bit_upper),
+    /* 'K'  */ LETTER (bit_upper),
+    /* 'L'  */ LETTER (bit_upper),
+    /* 'M'  */ LETTER (bit_upper),
+    /* 'N'  */ LETTER (bit_upper),
+    /* 'O'  */ LETTER (bit_upper),
+    /* 'P'  */ LETTER (bit_upper),
+    /* 'Q'  */ LETTER (bit_upper),
+    /* 'R'  */ LETTER (bit_upper),
+    /* 'S'  */ LETTER (bit_upper),
+    /* 'T'  */ LETTER (bit_upper),
+    /* 'U'  */ LETTER (bit_upper),
+    /* 'V'  */ LETTER (bit_upper),
+    /* 'W'  */ LETTER (bit_upper),
+    /* 'X'  */ LETTER (bit_upper),
+    /* 'Y'  */ LETTER (bit_upper),
+    /* 'Z'  */ LETTER (bit_upper),
+    /* '['  */ bit_print | bit_punct | bit_graph,
+    /* '\\' */ bit_print | bit_punct | bit_graph,
+    /* ']'  */ bit_print | bit_punct | bit_graph,
+    /* '^'  */ bit_print | bit_punct | bit_graph,
+    /* '_'  */ bit_print | bit_punct | bit_graph,
+    /* '`'  */ bit_print | bit_punct | bit_graph,
+    /* 'a'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'b'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'c'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'd'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'e'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'f'  */ LETTER (bit_lower | bit_xdigit),
+    /* 'g'  */ LETTER (bit_lower),
+    /* 'h'  */ LETTER (bit_lower),
+    /* 'i'  */ LETTER (bit_lower),
+    /* 'j'  */ LETTER (bit_lower),
+    /* 'k'  */ LETTER (bit_lower),
+    /* 'l'  */ LETTER (bit_lower),
+    /* 'm'  */ LETTER (bit_lower),
+    /* 'n'  */ LETTER (bit_lower),
+    /* 'o'  */ LETTER (bit_lower),
+    /* 'p'  */ LETTER (bit_lower),
+    /* 'q'  */ LETTER (bit_lower),
+    /* 'r'  */ LETTER (bit_lower),
+    /* 's'  */ LETTER (bit_lower),
+    /* 't'  */ LETTER (bit_lower),
+    /* 'u'  */ LETTER (bit_lower),
+    /* 'v'  */ LETTER (bit_lower),
+    /* 'w'  */ LETTER (bit_lower),
+    /* 'x'  */ LETTER (bit_lower),
+    /* 'y'  */ LETTER (bit_lower),
+    /* 'z'  */ LETTER (bit_lower),
+    /* '{'  */ bit_print | bit_punct | bit_graph,
+    /* '|'  */ bit_print | bit_punct | bit_graph,
+    /* '}'  */ bit_print | bit_punct | bit_graph,
+    /* '~'  */ bit_print | bit_punct | bit_graph,
+    /* 0x7f */ bit_cntrl
+
+#elif 'A' == 0xc1
+
+    /* NUL */ bit_cntrl,
+    /* SOH */ bit_cntrl,
+    /* STX */ bit_cntrl,
+    /* ETX */ bit_cntrl,
+    /* PF  */ bit_cntrl,
+    /* HT  */ bit_cntrl,
+    /* LC  */ bit_cntrl,
+    /* DEL */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /* SMM */ bit_cntrl,
+    /* VT  */ bit_cntrl,
+    /* FF  */ bit_cntrl,
+    /* CR  */ bit_cntrl,
+    /* SO  */ bit_cntrl,
+    /* SI  */ bit_cntrl,
+    /* DLE */ bit_cntrl,
+    /* DC1 */ bit_cntrl,
+    /* DC2 */ bit_cntrl,
+    /* TM  */ bit_cntrl,
+    /* RES */ bit_cntrl,
+    /* NL  */ bit_cntrl,
+    /* BS  */ bit_cntrl,
+    /* IL  */ bit_cntrl,
+    /* CAN */ bit_cntrl,
+    /* EM  */ bit_cntrl,
+    /* CC  */ bit_cntrl,
+    /* CU1 */ bit_cntrl,
+    /* IFS */ bit_cntrl,
+    /* IGS */ bit_cntrl,
+    /* IRS */ bit_cntrl,
+    /* IUS */ bit_cntrl,
+    /* DS  */ bit_cntrl,
+    /* SOS */ bit_cntrl,
+    /* FS  */ bit_cntrl,
+    /*     */ 0,
+    /* BYP */ bit_cntrl,
+    /* LF  */ bit_cntrl,
+    /* ETB */ bit_cntrl,
+    /* ESC */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /* SM  */ bit_cntrl,
+    /* CU2 */ bit_cntrl,
+    /*     */ 0,
+    /* ENQ */ bit_cntrl,
+    /* ACK */ bit_cntrl,
+    /* BEL */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /* SYN */ bit_cntrl,
+    /*     */ 0,
+    /* PN  */ bit_cntrl,
+    /* RS  */ bit_cntrl,
+    /* UC  */ bit_cntrl,
+    /* EOT */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* CU3 */ bit_cntrl,
+    /* DC4 */ bit_cntrl,
+    /* NAK */ bit_cntrl,
+    /*     */ 0,
+    /* SUB */ bit_cntrl,
+    /* SP  */ bit_cntrl,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* ct. */ bit_print | bit_punct | bit_graph,
+    /* '.' */ bit_print | bit_punct | bit_graph,
+    /* '<' */ bit_print | bit_punct | bit_graph,
+    /* '(' */ bit_print | bit_punct | bit_graph,
+    /* '+' */ bit_print | bit_punct | bit_graph,
+    /* '|' */ bit_print | bit_punct | bit_graph,
+    /* '&' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* '!' */ bit_print | bit_punct | bit_graph,
+    /* '$' */ bit_print | bit_punct | bit_graph,
+    /* '*' */ bit_print | bit_punct | bit_graph,
+    /* ')' */ bit_print | bit_punct | bit_graph,
+    /* ';' */ bit_print | bit_punct | bit_graph,
+    /* '~' */ bit_print | bit_punct | bit_graph,
+    /* '-' */ bit_print | bit_punct | bit_graph,
+    /* '/' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* ',' */ bit_print | bit_punct | bit_graph,
+    /* '%' */ bit_print | bit_punct | bit_graph,
+    /* '_' */ bit_print | bit_punct | bit_graph,
+    /* '>' */ bit_print | bit_punct | bit_graph,
+    /* '?' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* ':' */ bit_print | bit_punct | bit_graph,
+    /* '#' */ bit_print | bit_punct | bit_graph,
+    /* '@' */ bit_print | bit_punct | bit_graph,
+    /* ''' */ bit_print | bit_punct | bit_graph,
+    /* '=' */ bit_print | bit_punct | bit_graph,
+    /* '"' */ bit_print | bit_punct | bit_graph,
+    /*     */ 0,
+    /* 'a' */ LETTER (bit_lower | bit_xdigit),
+    /* 'b' */ LETTER (bit_lower | bit_xdigit),
+    /* 'c' */ LETTER (bit_lower | bit_xdigit),
+    /* 'd' */ LETTER (bit_lower | bit_xdigit),
+    /* 'e' */ LETTER (bit_lower | bit_xdigit),
+    /* 'f' */ LETTER (bit_lower | bit_xdigit),
+    /* 'g' */ LETTER (bit_lower),
+    /* 'h' */ LETTER (bit_lower),
+    /* 'i' */ LETTER (bit_lower),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'j' */ LETTER (bit_lower),
+    /* 'k' */ LETTER (bit_lower),
+    /* 'l' */ LETTER (bit_lower),
+    /* 'm' */ LETTER (bit_lower),
+    /* 'n' */ LETTER (bit_lower),
+    /* 'o' */ LETTER (bit_lower),
+    /* 'p' */ LETTER (bit_lower),
+    /* 'q' */ LETTER (bit_lower),
+    /* 'r' */ LETTER (bit_lower),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 's' */ LETTER (bit_lower),
+    /* 't' */ LETTER (bit_lower),
+    /* 'u' */ LETTER (bit_lower),
+    /* 'v' */ LETTER (bit_lower),
+    /* 'w' */ LETTER (bit_lower),
+    /* 'x' */ LETTER (bit_lower),
+    /* 'y' */ LETTER (bit_lower),
+    /* 'z' */ LETTER (bit_lower),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* '`' */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'A' */ LETTER (bit_upper | bit_xdigit),
+    /* 'B' */ LETTER (bit_upper | bit_xdigit),
+    /* 'C' */ LETTER (bit_upper | bit_xdigit),
+    /* 'D' */ LETTER (bit_upper | bit_xdigit),
+    /* 'E' */ LETTER (bit_upper | bit_xdigit),
+    /* 'F' */ LETTER (bit_upper | bit_xdigit),
+    /* 'G' */ LETTER (bit_upper),
+    /* 'H' */ LETTER (bit_upper),
+    /* 'I' */ LETTER (bit_upper),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'J' */ LETTER (bit_upper),
+    /* 'K' */ LETTER (bit_upper),
+    /* 'L' */ LETTER (bit_upper),
+    /* 'M' */ LETTER (bit_upper),
+    /* 'N' */ LETTER (bit_upper),
+    /* 'O' */ LETTER (bit_upper),
+    /* 'P' */ LETTER (bit_upper),
+    /* 'Q' */ LETTER (bit_upper),
+    /* 'R' */ LETTER (bit_upper),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* 'S' */ LETTER (bit_upper),
+    /* 'T' */ LETTER (bit_upper),
+    /* 'U' */ LETTER (bit_upper),
+    /* 'V' */ LETTER (bit_upper),
+    /* 'W' */ LETTER (bit_upper),
+    /* 'X' */ LETTER (bit_upper),
+    /* 'Y' */ LETTER (bit_upper),
+    /* 'Z' */ LETTER (bit_upper),
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /* '0' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '1' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '2' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '3' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '4' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '5' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '6' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '7' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '8' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /* '9' */ bit_print | bit_digit | bit_graph | bit_xdigit,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0,
+    /*     */ 0
+
+#else   // 'A' != 0x41 && 'A' != 0xc1
+#  error unknown character set (neither ASCII nor EBCDIC)
+#endif   // ASCII or EBCDIC
+
+};
+
+
+static void
+test_behavior ()
+{
+    rw_info (0, 0, 0, "behavior of <cwctype> functions in the \"C\" locale");
+
+    char extra_str [80];
+    char missing_str [80];
+
+    for (int i = 0; i != 256; ++i) {
+
+        const std::wint_t c = i;
+
+        int mask = 0;
+
+        mask |= std::iswalnum (c) ? bit_alnum : 0;
+        mask |= std::iswalpha (c) ? bit_alpha : 0;
+        mask |= std::iswcntrl (c) ? bit_cntrl : 0;
+        mask |= std::iswdigit (c) ? bit_digit : 0;
+        mask |= std::iswgraph (c) ? bit_graph : 0;
+        mask |= std::iswlower (c) ? bit_lower : 0;
+        mask |= std::iswprint (c) ? bit_print : 0;
+        mask |= std::iswpunct (c) ? bit_punct : 0;
+        mask |= std::iswspace (c) ? bit_space : 0;
+        mask |= std::iswupper (c) ? bit_upper : 0;
+        mask |= std::iswxdigit (c) ? bit_xdigit : 0;
+
+        const int extra_bits   = mask & ~char_mask [i];
+        const int missing_bits = ~mask & char_mask [i];
+
+        rw_assert (mask == char_mask [i], 0, 0,
+                   "%#c mask%{?} missing bits %s (%#x)%{;}"
+                   "%{?} extra bits %s (%#x)%{;}",
+                   c,
+                   missing_bits,
+                   get_bitmask (missing_bits, missing_str), missing_bits,
+                   extra_bits,
+                   get_bitmask (extra_bits, extra_str), extra_bits);
+    }
+}
+
+/**************************************************************************/
+
+static int rw_opt_no_behavior;   // for --no-behavior
+
+static int
+run_test (int, char**)
+{
+    //////////////////////////////////////////////////////////////////
+    rw_info (0, 0, 0, "checking for the absence of masking macros");
+
+    // verify the shadow macros are not #defined (explicitly
+    // disallowed by 17.4.1.2, p6 and Footnote 159 of C++ '03)
+    for (unsigned i = 0; cwctype_macros [i]; ++i) {
+        rw_assert ('\0' == cwctype_macros [i][0], 0, 0,
+                   "macro %s unexpectedly #defined", cwctype_macros [i]);
+    }
+
+    //////////////////////////////////////////////////////////////////
+#ifndef WEOF
+    const int weof_defined = 0;
+#else    // if defined (WEOF)
+    const int weof_defined = 1;
+#endif   // WEOF
+
+    rw_assert (weof_defined, 0, 0, "macro WEOF unexpectedly not #defined");
+
+    //////////////////////////////////////////////////////////////////
+    rw_warn (0, 0, 0, "types wctrans_t and wctype_t not exercised");
+
+    //////////////////////////////////////////////////////////////////
+    // verify that each function is defined
+#define TEST(function)                                                  \
+    do {                                                                \
+        rw_info (0, 0, 0, "%s(std::wint_t) definition", #function);     \
+        function (std::wint_t (function_called = 1));                   \
+        rw_assert (1 == function_called, 0, __LINE__,                   \
+                   "%s (std::wint_t) not defined", #function);          \
+    } while (0)
+
+    TEST (std::iswalnum);
+    TEST (std::iswalpha);
+    TEST (std::iswcntrl);
+    TEST (std::iswdigit);
+    TEST (std::iswgraph);
+    TEST (std::iswlower);
+    TEST (std::iswprint);
+    TEST (std::iswpunct);
+    TEST (std::iswupper);
+    TEST (std::iswxdigit);
+    TEST (std::towlower);
+    TEST (std::towupper);
+
+    //////////////////////////////////////////////////////////////////
+    if (rw_opt_no_behavior)
+        rw_note (0, 0, 0, "behavior test disabled (use --test-behavior)");
+    else
+        test_behavior ();
+
+    return 0;
+}
+
+/**************************************************************************/
+
+int main (int argc, char *argv[])
+{
+    return rw_test (argc, argv, __FILE__,
+                    "lib.c.strings",
+                    "header <cwctype>",
+                    run_test,
+                    "|-no-behavior#0-1 ",
+                    &rw_opt_no_behavior);
+}

Propchange: incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/stdcxx/trunk/tests/strings/21.cwctype.cpp
------------------------------------------------------------------------------
    svn:keywords = Id



Mime
View raw message