Home | History | Annotate | Download | only in facet.ctype.char.members
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <locale>
     11 
     12 // template <> class ctype<char>;
     13 
     14 // const char* is(const char* low, const char* high, mask* vec) const;
     15 
     16 #include <locale>
     17 #include <string>
     18 #include <vector>
     19 #include <cassert>
     20 
     21 #include <stdio.h>
     22 
     23 int main()
     24 {
     25     std::locale l = std::locale::classic();
     26     {
     27         typedef std::ctype<char> F;
     28         const F& f = std::use_facet<F>(l);
     29         const std::string in(" A\x07.a1");
     30         std::vector<F::mask> m(in.size());
     31         const char* h = f.is(in.data(), in.data() + in.size(), m.data());
     32         assert(h == in.data() + in.size());
     33 
     34         // ' '
     35         assert( (m[0] & F::space));
     36         assert( (m[0] & F::print));
     37         assert(!(m[0] & F::cntrl));
     38         assert(!(m[0] & F::upper));
     39         assert(!(m[0] & F::lower));
     40         assert(!(m[0] & F::alpha));
     41         assert(!(m[0] & F::digit));
     42         assert(!(m[0] & F::punct));
     43         assert(!(m[0] & F::xdigit));
     44         assert( (m[0] & F::blank));
     45         assert(!(m[0] & F::alnum));
     46         assert(!(m[0] & F::graph));
     47 
     48         // 'A'
     49         assert(!(m[1] & F::space));
     50         assert( (m[1] & F::print));
     51         assert(!(m[1] & F::cntrl));
     52         assert( (m[1] & F::upper));
     53         assert(!(m[1] & F::lower));
     54         assert( (m[1] & F::alpha));
     55         assert(!(m[1] & F::digit));
     56         assert(!(m[1] & F::punct));
     57         assert( (m[1] & F::xdigit));
     58         assert(!(m[1] & F::blank));
     59         assert( (m[1] & F::alnum));
     60         assert( (m[1] & F::graph));
     61 
     62         // '\x07'
     63         assert(!(m[2] & F::space));
     64         assert(!(m[2] & F::print));
     65         assert( (m[2] & F::cntrl));
     66         assert(!(m[2] & F::upper));
     67         assert(!(m[2] & F::lower));
     68         assert(!(m[2] & F::alpha));
     69         assert(!(m[2] & F::digit));
     70         assert(!(m[2] & F::punct));
     71         assert(!(m[2] & F::xdigit));
     72         assert(!(m[2] & F::blank));
     73         assert(!(m[2] & F::alnum));
     74         assert(!(m[2] & F::graph));
     75 
     76         // '.'
     77         assert(!(m[3] & F::space));
     78         assert( (m[3] & F::print));
     79         assert(!(m[3] & F::cntrl));
     80         assert(!(m[3] & F::upper));
     81         assert(!(m[3] & F::lower));
     82         assert(!(m[3] & F::alpha));
     83         assert(!(m[3] & F::digit));
     84         assert( (m[3] & F::punct));
     85         assert(!(m[3] & F::xdigit));
     86         assert(!(m[3] & F::blank));
     87         assert(!(m[3] & F::alnum));
     88         assert( (m[3] & F::graph));
     89 
     90         // 'a'
     91         assert(!(m[4] & F::space));
     92         assert( (m[4] & F::print));
     93         assert(!(m[4] & F::cntrl));
     94         assert(!(m[4] & F::upper));
     95         assert( (m[4] & F::lower));
     96         assert( (m[4] & F::alpha));
     97         assert(!(m[4] & F::digit));
     98         assert(!(m[4] & F::punct));
     99         assert( (m[4] & F::xdigit));
    100         assert(!(m[4] & F::blank));
    101         assert( (m[4] & F::alnum));
    102         assert( (m[4] & F::graph));
    103 
    104         // '1'
    105         assert(!(m[5] & F::space));
    106         assert( (m[5] & F::print));
    107         assert(!(m[5] & F::cntrl));
    108         assert(!(m[5] & F::upper));
    109         assert(!(m[5] & F::lower));
    110         assert(!(m[5] & F::alpha));
    111         assert( (m[5] & F::digit));
    112         assert(!(m[5] & F::punct));
    113         assert( (m[5] & F::xdigit));
    114         assert(!(m[5] & F::blank));
    115         assert( (m[5] & F::alnum));
    116         assert( (m[5] & F::graph));
    117     }
    118 }
    119