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 // XFAIL: apple-darwin
11
12 // REQUIRES: locale.en_US.UTF-8
13 // REQUIRES: locale.fr_FR.UTF-8
14 // REQUIRES: locale.ru_RU.UTF-8
15 // REQUIRES: locale.zh_CN.UTF-8
16
17 // <locale>
18
19 // class moneypunct_byname<charT, International>
20
21 // pattern pos_format() const;
22
23 #include <locale>
24 #include <limits>
25 #include <cassert>
26
27 #include "platform_support.h" // locale name macros
28
29 class Fnf
30 : public std::moneypunct_byname<char, false>
31 {
32 public:
Fnf(const std::string & nm,std::size_t refs=0)33 explicit Fnf(const std::string& nm, std::size_t refs = 0)
34 : std::moneypunct_byname<char, false>(nm, refs) {}
35 };
36
37 class Fnt
38 : public std::moneypunct_byname<char, true>
39 {
40 public:
Fnt(const std::string & nm,std::size_t refs=0)41 explicit Fnt(const std::string& nm, std::size_t refs = 0)
42 : std::moneypunct_byname<char, true>(nm, refs) {}
43 };
44
45 class Fwf
46 : public std::moneypunct_byname<wchar_t, false>
47 {
48 public:
Fwf(const std::string & nm,std::size_t refs=0)49 explicit Fwf(const std::string& nm, std::size_t refs = 0)
50 : std::moneypunct_byname<wchar_t, false>(nm, refs) {}
51 };
52
53 class Fwt
54 : public std::moneypunct_byname<wchar_t, true>
55 {
56 public:
Fwt(const std::string & nm,std::size_t refs=0)57 explicit Fwt(const std::string& nm, std::size_t refs = 0)
58 : std::moneypunct_byname<wchar_t, true>(nm, refs) {}
59 };
60
main()61 int main()
62 {
63 {
64 Fnf f("C", 1);
65 std::money_base::pattern p = f.pos_format();
66 assert(p.field[0] == std::money_base::symbol);
67 assert(p.field[1] == std::money_base::sign);
68 assert(p.field[2] == std::money_base::none);
69 assert(p.field[3] == std::money_base::value);
70 }
71 {
72 Fnt f("C", 1);
73 std::money_base::pattern p = f.pos_format();
74 assert(p.field[0] == std::money_base::symbol);
75 assert(p.field[1] == std::money_base::sign);
76 assert(p.field[2] == std::money_base::none);
77 assert(p.field[3] == std::money_base::value);
78 }
79 {
80 Fwf f("C", 1);
81 std::money_base::pattern p = f.pos_format();
82 assert(p.field[0] == std::money_base::symbol);
83 assert(p.field[1] == std::money_base::sign);
84 assert(p.field[2] == std::money_base::none);
85 assert(p.field[3] == std::money_base::value);
86 }
87 {
88 Fwt f("C", 1);
89 std::money_base::pattern p = f.pos_format();
90 assert(p.field[0] == std::money_base::symbol);
91 assert(p.field[1] == std::money_base::sign);
92 assert(p.field[2] == std::money_base::none);
93 assert(p.field[3] == std::money_base::value);
94 }
95
96 {
97 Fnf f(LOCALE_en_US_UTF_8, 1);
98 std::money_base::pattern p = f.pos_format();
99 assert(p.field[0] == std::money_base::sign);
100 assert(p.field[1] == std::money_base::symbol);
101 assert(p.field[2] == std::money_base::none);
102 assert(p.field[3] == std::money_base::value);
103 }
104 {
105 Fnt f(LOCALE_en_US_UTF_8, 1);
106 std::money_base::pattern p = f.pos_format();
107 assert(p.field[0] == std::money_base::sign);
108 assert(p.field[1] == std::money_base::symbol);
109 assert(p.field[2] == std::money_base::none);
110 assert(p.field[3] == std::money_base::value);
111 }
112 {
113 Fwf f(LOCALE_en_US_UTF_8, 1);
114 std::money_base::pattern p = f.pos_format();
115 assert(p.field[0] == std::money_base::sign);
116 assert(p.field[1] == std::money_base::symbol);
117 assert(p.field[2] == std::money_base::none);
118 assert(p.field[3] == std::money_base::value);
119 }
120 {
121 Fwt f(LOCALE_en_US_UTF_8, 1);
122 std::money_base::pattern p = f.pos_format();
123 assert(p.field[0] == std::money_base::sign);
124 assert(p.field[1] == std::money_base::symbol);
125 assert(p.field[2] == std::money_base::none);
126 assert(p.field[3] == std::money_base::value);
127 }
128
129 {
130 Fnf f(LOCALE_fr_FR_UTF_8, 1);
131 std::money_base::pattern p = f.pos_format();
132 assert(p.field[0] == std::money_base::sign);
133 assert(p.field[1] == std::money_base::value);
134 assert(p.field[2] == std::money_base::none);
135 assert(p.field[3] == std::money_base::symbol);
136 }
137 {
138 Fnt f(LOCALE_fr_FR_UTF_8, 1);
139 std::money_base::pattern p = f.pos_format();
140 assert(p.field[0] == std::money_base::sign);
141 assert(p.field[1] == std::money_base::value);
142 assert(p.field[2] == std::money_base::none);
143 assert(p.field[3] == std::money_base::symbol);
144 }
145 {
146 Fwf f(LOCALE_fr_FR_UTF_8, 1);
147 std::money_base::pattern p = f.pos_format();
148 assert(p.field[0] == std::money_base::sign);
149 assert(p.field[1] == std::money_base::value);
150 assert(p.field[2] == std::money_base::none);
151 assert(p.field[3] == std::money_base::symbol);
152 }
153 {
154 Fwt f(LOCALE_fr_FR_UTF_8, 1);
155 std::money_base::pattern p = f.pos_format();
156 assert(p.field[0] == std::money_base::sign);
157 assert(p.field[1] == std::money_base::value);
158 assert(p.field[2] == std::money_base::none);
159 assert(p.field[3] == std::money_base::symbol);
160 }
161
162 {
163 Fnf f(LOCALE_ru_RU_UTF_8, 1);
164 std::money_base::pattern p = f.pos_format();
165 assert(p.field[0] == std::money_base::sign);
166 assert(p.field[1] == std::money_base::value);
167 assert(p.field[2] == std::money_base::none);
168 assert(p.field[3] == std::money_base::symbol);
169 }
170 {
171 Fnt f(LOCALE_ru_RU_UTF_8, 1);
172 std::money_base::pattern p = f.pos_format();
173 assert(p.field[0] == std::money_base::sign);
174 assert(p.field[1] == std::money_base::value);
175 assert(p.field[2] == std::money_base::none);
176 assert(p.field[3] == std::money_base::symbol);
177 }
178 {
179 Fwf f(LOCALE_ru_RU_UTF_8, 1);
180 std::money_base::pattern p = f.pos_format();
181 assert(p.field[0] == std::money_base::sign);
182 assert(p.field[1] == std::money_base::value);
183 assert(p.field[2] == std::money_base::none);
184 assert(p.field[3] == std::money_base::symbol);
185 }
186 {
187 Fwt f(LOCALE_ru_RU_UTF_8, 1);
188 std::money_base::pattern p = f.pos_format();
189 assert(p.field[0] == std::money_base::sign);
190 assert(p.field[1] == std::money_base::value);
191 assert(p.field[2] == std::money_base::none);
192 assert(p.field[3] == std::money_base::symbol);
193 }
194
195 {
196 Fnf f(LOCALE_zh_CN_UTF_8, 1);
197 std::money_base::pattern p = f.pos_format();
198 assert(p.field[0] == std::money_base::symbol);
199 assert(p.field[1] == std::money_base::sign);
200 assert(p.field[2] == std::money_base::none);
201 assert(p.field[3] == std::money_base::value);
202 }
203 {
204 Fnt f(LOCALE_zh_CN_UTF_8, 1);
205 std::money_base::pattern p = f.pos_format();
206 assert(p.field[0] == std::money_base::sign);
207 assert(p.field[1] == std::money_base::symbol);
208 assert(p.field[2] == std::money_base::none);
209 assert(p.field[3] == std::money_base::value);
210 }
211 {
212 Fwf f(LOCALE_zh_CN_UTF_8, 1);
213 std::money_base::pattern p = f.pos_format();
214 assert(p.field[0] == std::money_base::symbol);
215 assert(p.field[1] == std::money_base::sign);
216 assert(p.field[2] == std::money_base::none);
217 assert(p.field[3] == std::money_base::value);
218 }
219 {
220 Fwt f(LOCALE_zh_CN_UTF_8, 1);
221 std::money_base::pattern p = f.pos_format();
222 assert(p.field[0] == std::money_base::sign);
223 assert(p.field[1] == std::money_base::symbol);
224 assert(p.field[2] == std::money_base::none);
225 assert(p.field[3] == std::money_base::value);
226 }
227 }
228