111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// The LLVM Compiler Infrastructure 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===// 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// <locale> 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// template <class charT> class ctype_byname; 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// bool is(mask m, charT c) const; 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <locale> 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <type_traits> 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "platform_support.h" // locale name macros 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::locale l(LOCALE_en_US_UTF_8); 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::ctype<wchar_t> F; 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const F& f = std::use_facet<F>(l); 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::space, L' ')); 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::space, L'A')); 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::print, L' ')); 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::print, L'\x07')); 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::cntrl, L'\x07')); 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::cntrl, L' ')); 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::upper, L'A')); 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::upper, L'a')); 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::lower, L'a')); 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::lower, L'A')); 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alpha, L'a')); 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alpha, L'1')); 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::digit, L'1')); 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::digit, L'a')); 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::punct, L'.')); 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::punct, L'a')); 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::xdigit, L'a')); 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::xdigit, L'g')); 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alnum, L'a')); 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alnum, L'.')); 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::graph, L'.')); 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::graph, L'\x07')); 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alpha, L'\x00DA')); 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::upper, L'\x00DA')); 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::locale l("C"); 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::ctype<wchar_t> F; 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const F& f = std::use_facet<F>(l); 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::space, L' ')); 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::space, L'A')); 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::print, L' ')); 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::print, L'\x07')); 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::cntrl, L'\x07')); 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::cntrl, L' ')); 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::upper, L'A')); 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::upper, L'a')); 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::lower, L'a')); 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::lower, L'A')); 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alpha, L'a')); 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alpha, L'1')); 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::digit, L'1')); 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::digit, L'a')); 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::punct, L'.')); 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::punct, L'a')); 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::xdigit, L'a')); 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::xdigit, L'g')); 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alnum, L'a')); 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alnum, L'.')); 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::graph, L'.')); 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::graph, L'\x07')); 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alpha, L'\x00DA')); 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::upper, L'\x00DA')); 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 111