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// charT tolower(charT) const;
15
16// XFAIL: with_system_lib=x86_64-apple-darwin11
17// XFAIL: with_system_lib=x86_64-apple-darwin12
18
19#include <locale>
20#include <cassert>
21
22#include "platform_support.h" // locale name macros
23
24int main()
25{
26    {
27        std::locale l(LOCALE_en_US_UTF_8);
28        {
29            typedef std::ctype<char> F;
30            const F& f = std::use_facet<F>(l);
31
32            assert(f.tolower(' ') == ' ');
33            assert(f.tolower('A') == 'a');
34            assert(f.tolower('\x07') == '\x07');
35            assert(f.tolower('.') == '.');
36            assert(f.tolower('a') == 'a');
37            assert(f.tolower('1') == '1');
38            assert(f.tolower('\xDA') == '\xFA');
39            assert(f.tolower('\xFA') == '\xFA');
40        }
41    }
42    {
43        std::locale l("C");
44        {
45            typedef std::ctype<char> F;
46            const F& f = std::use_facet<F>(l);
47
48            assert(f.tolower(' ') == ' ');
49            assert(f.tolower('A') == 'a');
50            assert(f.tolower('\x07') == '\x07');
51            assert(f.tolower('.') == '.');
52            assert(f.tolower('a') == 'a');
53            assert(f.tolower('1') == '1');
54            assert(f.tolower('\xDA') == '\xDA');
55            assert(f.tolower('\xFA') == '\xFA');
56        }
57    }
58    {
59        std::locale l(LOCALE_en_US_UTF_8);
60        {
61            typedef std::ctype<wchar_t> F;
62            const F& f = std::use_facet<F>(l);
63
64            assert(f.tolower(L' ') == L' ');
65            assert(f.tolower(L'A') == L'a');
66            assert(f.tolower(L'\x07') == L'\x07');
67            assert(f.tolower(L'.') == L'.');
68            assert(f.tolower(L'a') == L'a');
69            assert(f.tolower(L'1') == L'1');
70            assert(f.tolower(L'\xDA') == L'\xFA');
71            assert(f.tolower(L'\xFA') == L'\xFA');
72        }
73    }
74    {
75        std::locale l("C");
76        {
77            typedef std::ctype<wchar_t> F;
78            const F& f = std::use_facet<F>(l);
79
80            assert(f.tolower(L' ') == L' ');
81            assert(f.tolower(L'A') == L'a');
82            assert(f.tolower(L'\x07') == L'\x07');
83            assert(f.tolower(L'.') == L'.');
84            assert(f.tolower(L'a') == L'a');
85            assert(f.tolower(L'1') == L'1');
86            assert(f.tolower(L'\xDA') == L'\xDA');
87            assert(f.tolower(L'\xFA') == L'\xFA');
88        }
89    }
90}
91