Home | History | Annotate | Download | only in locale.ctype.byname
      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 charT> class ctype_byname;
     13 
     14 // const charT* do_is(const charT* low, const charT* high, mask* vec) const;
     15 
     16 #include <locale>
     17 #include <string>
     18 #include <vector>
     19 #include <cassert>
     20 
     21 #include <stdio.h>
     22 
     23 #include "platform_support.h" // locale name macros
     24 
     25 int main()
     26 {
     27     {
     28         std::locale l(LOCALE_en_US_UTF_8);
     29         {
     30             typedef std::ctype<wchar_t> F;
     31             const F& f = std::use_facet<F>(l);
     32             const std::wstring in(L"\x00DA A\x07.a1");
     33             std::vector<F::mask> m(in.size());
     34             const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data());
     35             assert(h == in.data() + in.size());
     36 
     37             // L'\x00DA'
     38             assert(!(m[0] & F::space));
     39             assert( (m[0] & F::print));
     40             assert(!(m[0] & F::cntrl));
     41             assert( (m[0] & F::upper));
     42             assert(!(m[0] & F::lower));
     43             assert( (m[0] & F::alpha));
     44             assert(!(m[0] & F::digit));
     45             assert(!(m[0] & F::punct));
     46             assert(!(m[0] & F::xdigit));
     47             assert(!(m[0] & F::blank));
     48             assert( (m[0] & F::alnum));
     49             assert( (m[0] & F::graph));
     50 
     51             // L' '
     52             assert( (m[1] & F::space));
     53             assert( (m[1] & F::print));
     54             assert(!(m[1] & F::cntrl));
     55             assert(!(m[1] & F::upper));
     56             assert(!(m[1] & F::lower));
     57             assert(!(m[1] & F::alpha));
     58             assert(!(m[1] & F::digit));
     59             assert(!(m[1] & F::punct));
     60             assert(!(m[1] & F::xdigit));
     61             assert( (m[1] & F::blank));
     62             assert(!(m[1] & F::alnum));
     63             assert(!(m[1] & F::graph));
     64 
     65             // L'A'
     66             assert(!(m[2] & F::space));
     67             assert( (m[2] & F::print));
     68             assert(!(m[2] & F::cntrl));
     69             assert( (m[2] & F::upper));
     70             assert(!(m[2] & F::lower));
     71             assert( (m[2] & F::alpha));
     72             assert(!(m[2] & F::digit));
     73             assert(!(m[2] & F::punct));
     74             assert( (m[2] & F::xdigit));
     75             assert(!(m[2] & F::blank));
     76             assert( (m[2] & F::alnum));
     77             assert( (m[2] & F::graph));
     78 
     79             // L'\x07'
     80             assert(!(m[3] & F::space));
     81             assert(!(m[3] & F::print));
     82             assert( (m[3] & F::cntrl));
     83             assert(!(m[3] & F::upper));
     84             assert(!(m[3] & F::lower));
     85             assert(!(m[3] & F::alpha));
     86             assert(!(m[3] & F::digit));
     87             assert(!(m[3] & F::punct));
     88             assert(!(m[3] & F::xdigit));
     89             assert(!(m[3] & F::blank));
     90             assert(!(m[3] & F::alnum));
     91             assert(!(m[3] & F::graph));
     92 
     93             // L'.'
     94             assert(!(m[4] & F::space));
     95             assert( (m[4] & F::print));
     96             assert(!(m[4] & F::cntrl));
     97             assert(!(m[4] & F::upper));
     98             assert(!(m[4] & F::lower));
     99             assert(!(m[4] & F::alpha));
    100             assert(!(m[4] & F::digit));
    101             assert( (m[4] & F::punct));
    102             assert(!(m[4] & F::xdigit));
    103             assert(!(m[4] & F::blank));
    104             assert(!(m[4] & F::alnum));
    105             assert( (m[4] & F::graph));
    106 
    107             // L'a'
    108             assert(!(m[5] & F::space));
    109             assert( (m[5] & F::print));
    110             assert(!(m[5] & F::cntrl));
    111             assert(!(m[5] & F::upper));
    112             assert( (m[5] & F::lower));
    113             assert( (m[5] & F::alpha));
    114             assert(!(m[5] & F::digit));
    115             assert(!(m[5] & F::punct));
    116             assert( (m[5] & F::xdigit));
    117             assert(!(m[5] & F::blank));
    118             assert( (m[5] & F::alnum));
    119             assert( (m[5] & F::graph));
    120 
    121             // L'1'
    122             assert(!(m[6] & F::space));
    123             assert( (m[6] & F::print));
    124             assert(!(m[6] & F::cntrl));
    125             assert(!(m[6] & F::upper));
    126             assert(!(m[6] & F::lower));
    127             assert(!(m[6] & F::alpha));
    128             assert( (m[6] & F::digit));
    129             assert(!(m[6] & F::punct));
    130             assert( (m[6] & F::xdigit));
    131             assert(!(m[6] & F::blank));
    132             assert( (m[6] & F::alnum));
    133             assert( (m[6] & F::graph));
    134         }
    135     }
    136     {
    137         std::locale l("C");
    138         {
    139             typedef std::ctype<wchar_t> F;
    140             const F& f = std::use_facet<F>(l);
    141             const std::wstring in(L"\x00DA A\x07.a1");
    142             std::vector<F::mask> m(in.size());
    143             const wchar_t* h = f.is(in.data(), in.data() + in.size(), m.data());
    144             assert(h == in.data() + in.size());
    145 
    146             // L'\x00DA'
    147             assert(!(m[0] & F::space));
    148             assert(!(m[0] & F::print));
    149             assert(!(m[0] & F::cntrl));
    150             assert(!(m[0] & F::upper));
    151             assert(!(m[0] & F::lower));
    152             assert(!(m[0] & F::alpha));
    153             assert(!(m[0] & F::digit));
    154             assert(!(m[0] & F::punct));
    155             assert(!(m[0] & F::xdigit));
    156             assert(!(m[0] & F::blank));
    157             assert(!(m[0] & F::alnum));
    158             assert(!(m[0] & F::graph));
    159 
    160             // L' '
    161             assert( (m[1] & F::space));
    162             assert( (m[1] & F::print));
    163             assert(!(m[1] & F::cntrl));
    164             assert(!(m[1] & F::upper));
    165             assert(!(m[1] & F::lower));
    166             assert(!(m[1] & F::alpha));
    167             assert(!(m[1] & F::digit));
    168             assert(!(m[1] & F::punct));
    169             assert(!(m[1] & F::xdigit));
    170             assert( (m[1] & F::blank));
    171             assert(!(m[1] & F::alnum));
    172             assert(!(m[1] & F::graph));
    173 
    174             // L'A'
    175             assert(!(m[2] & F::space));
    176             assert( (m[2] & F::print));
    177             assert(!(m[2] & F::cntrl));
    178             assert( (m[2] & F::upper));
    179             assert(!(m[2] & F::lower));
    180             assert( (m[2] & F::alpha));
    181             assert(!(m[2] & F::digit));
    182             assert(!(m[2] & F::punct));
    183             assert( (m[2] & F::xdigit));
    184             assert(!(m[2] & F::blank));
    185             assert( (m[2] & F::alnum));
    186             assert( (m[2] & F::graph));
    187 
    188             // L'\x07'
    189             assert(!(m[3] & F::space));
    190             assert(!(m[3] & F::print));
    191             assert( (m[3] & F::cntrl));
    192             assert(!(m[3] & F::upper));
    193             assert(!(m[3] & F::lower));
    194             assert(!(m[3] & F::alpha));
    195             assert(!(m[3] & F::digit));
    196             assert(!(m[3] & F::punct));
    197             assert(!(m[3] & F::xdigit));
    198             assert(!(m[3] & F::blank));
    199             assert(!(m[3] & F::alnum));
    200             assert(!(m[3] & F::graph));
    201 
    202             // L'.'
    203             assert(!(m[4] & F::space));
    204             assert( (m[4] & F::print));
    205             assert(!(m[4] & F::cntrl));
    206             assert(!(m[4] & F::upper));
    207             assert(!(m[4] & F::lower));
    208             assert(!(m[4] & F::alpha));
    209             assert(!(m[4] & F::digit));
    210             assert( (m[4] & F::punct));
    211             assert(!(m[4] & F::xdigit));
    212             assert(!(m[4] & F::blank));
    213             assert(!(m[4] & F::alnum));
    214             assert( (m[4] & F::graph));
    215 
    216             // L'a'
    217             assert(!(m[5] & F::space));
    218             assert( (m[5] & F::print));
    219             assert(!(m[5] & F::cntrl));
    220             assert(!(m[5] & F::upper));
    221             assert( (m[5] & F::lower));
    222             assert( (m[5] & F::alpha));
    223             assert(!(m[5] & F::digit));
    224             assert(!(m[5] & F::punct));
    225             assert( (m[5] & F::xdigit));
    226             assert(!(m[5] & F::blank));
    227             assert( (m[5] & F::alnum));
    228             assert( (m[5] & F::graph));
    229 
    230             // L'1'
    231             assert(!(m[6] & F::space));
    232             assert( (m[6] & F::print));
    233             assert(!(m[6] & F::cntrl));
    234             assert(!(m[6] & F::upper));
    235             assert(!(m[6] & F::lower));
    236             assert(!(m[6] & F::alpha));
    237             assert( (m[6] & F::digit));
    238             assert(!(m[6] & F::punct));
    239             assert( (m[6] & F::xdigit));
    240             assert(!(m[6] & F::blank));
    241             assert( (m[6] & F::alnum));
    242             assert( (m[6] & F::graph));
    243         }
    244     }
    245 }
    246