]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/std/localization/locale.categories/category.ctype/locale.ctype.byname/narrow_many.pass.cpp
Vendor import of libc++ trunk r351319 (just before the release_80
[FreeBSD/FreeBSD.git] / test / std / localization / locale.categories / category.ctype / locale.ctype.byname / narrow_many.pass.cpp
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 // REQUIRES: locale.en_US.UTF-8
11 // REQUIRES: locale.fr_CA.ISO8859-1
12
13 // <locale>
14
15 // template <class charT> class ctype_byname;
16
17 // const charT* narrow(const charT* low, const charT*, char dfault, char* to) const;
18
19 #include <locale>
20 #include <string>
21 #include <vector>
22 #include <cassert>
23
24 #include "platform_support.h" // locale name macros
25
26 int main()
27 {
28     {
29         std::locale l(LOCALE_fr_CA_ISO8859_1);
30         {
31             typedef std::ctype<wchar_t> F;
32             const F& f = std::use_facet<F>(l);
33             std::wstring in(L" A\x07.a1\xDA");
34             std::vector<char> v(in.size());
35
36             assert(f.narrow(&in[0], in.data() + in.size(), '*', v.data()) == in.data() + in.size());
37             assert(v[0] == ' ');
38             assert(v[1] == 'A');
39             assert(v[2] == '\x07');
40             assert(v[3] == '.');
41             assert(v[4] == 'a');
42             assert(v[5] == '1');
43             assert(v[6] == '\xDA');
44         }
45     }
46     {
47         std::locale l(LOCALE_en_US_UTF_8);
48         {
49             typedef std::ctype<wchar_t> F;
50             const F& f = std::use_facet<F>(l);
51             std::wstring in(L" A\x07.a1\xDA");
52             std::vector<char> v(in.size());
53
54             assert(f.narrow(&in[0], in.data() + in.size(), '*', v.data()) == in.data() + in.size());
55             assert(v[0] == ' ');
56             assert(v[1] == 'A');
57             assert(v[2] == '\x07');
58             assert(v[3] == '.');
59             assert(v[4] == 'a');
60             assert(v[5] == '1');
61             assert(v[6] == '*');
62         }
63     }
64 }