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