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// REQUIRES: locale.en_US.UTF-8 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <locale> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <type_traits> 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert> 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "platform_support.h" // locale name macros 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main() 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::locale l(LOCALE_en_US_UTF_8); 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::ctype<wchar_t> F; 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const F& f = std::use_facet<F>(l); 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::space, L' ')); 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::space, L'A')); 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::print, L' ')); 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::print, L'\x07')); 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::cntrl, L'\x07')); 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::cntrl, L' ')); 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::upper, L'A')); 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::upper, L'a')); 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::lower, L'a')); 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::lower, L'A')); 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alpha, L'a')); 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alpha, L'1')); 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::digit, L'1')); 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::digit, L'a')); 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::punct, L'.')); 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::punct, L'a')); 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::xdigit, L'a')); 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::xdigit, L'g')); 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alnum, L'a')); 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alnum, L'.')); 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::graph, L'.')); 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::graph, L'\x07')); 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alpha, L'\x00DA')); 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::upper, L'\x00DA')); 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::locale l("C"); 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef std::ctype<wchar_t> F; 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const F& f = std::use_facet<F>(l); 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::space, L' ')); 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::space, L'A')); 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::print, L' ')); 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::print, L'\x07')); 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::cntrl, L'\x07')); 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::cntrl, L' ')); 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::upper, L'A')); 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::upper, L'a')); 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::lower, L'a')); 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::lower, L'A')); 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alpha, L'a')); 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alpha, L'1')); 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::digit, L'1')); 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::digit, L'a')); 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::punct, L'.')); 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::punct, L'a')); 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::xdigit, L'a')); 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::xdigit, L'g')); 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::alnum, L'a')); 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alnum, L'.')); 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(f.is(F::graph, L'.')); 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::graph, L'\x07')); 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::alpha, L'\x00DA')); 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert assert(!f.is(F::upper, L'\x00DA')); 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 113