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 neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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.neg_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