summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp b/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp
index bdb7696bbf0..b5690e3c6b2 100644
--- a/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.ctype/facet.ctype.special/facet.ctype.char.statics/classic_table.pass.cpp
@@ -20,4 +20,40 @@ int main()
{
typedef std::ctype<char> F;
assert(F::classic_table() != 0);
+ assert(F::table_size >= 256);
+
+ typedef F::mask mask;
+ const mask *p = F::classic_table();
+ const mask defined = F::space | F::print | F::cntrl | F::upper | F::lower
+ | F::alpha | F::digit | F::punct | F::xdigit | F::blank;
+
+ for ( size_t i = 0; i < 128; ++i ) // values above 128 are not consistent
+ {
+ mask set = 0;
+
+ if ( i < 32 || i > 126 ) set |= F::cntrl;
+ if ( i >= 32 && i <= 126 ) set |= F::print;
+
+ if (( i >= 9 && i <= 13) || i == 32 ) set |= F::space;
+ if ( i == 9 || i == 32 ) set |= F::blank;
+
+ if ( i >= 'A' && i <= 'Z' ) set |= F::alpha;
+ if ( i >= 'a' && i <= 'z' ) set |= F::alpha;
+ if ( i >= 'A' && i <= 'Z' ) set |= F::upper;
+ if ( i >= 'a' && i <= 'z' ) set |= F::lower;
+
+ if ( i >= '0' && i <= '9' ) set |= F::digit;
+ if ( i >= '0' && i <= '9' ) set |= F::xdigit;
+ if ( i >= 'A' && i <= 'F' ) set |= F::xdigit;
+ if ( i >= 'a' && i <= 'f' ) set |= F::xdigit;
+
+ if ( i >= 33 && i <= 47 ) set |= F::punct; // ' ' .. '/'
+ if ( i >= 58 && i <= 64 ) set |= F::punct; // ':' .. '@'
+ if ( i >= 91 && i <= 96 ) set |= F::punct; // '[' .. '`'
+ if ( i >= 123 && i <= 126 ) set |= F::punct; // '{' .. '~' }
+
+ assert(( p[i] & set) == set); // all the right bits set
+ assert(((p[i] & ~set) & defined) == 0); // no extra ones
+ }
+
}
OpenPOWER on IntegriCloud