1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
943807c2fbad2eb788250dccfc4c61205efb6b7aaDaniel Dunbar//
1043807c2fbad2eb788250dccfc4c61205efb6b7aaDaniel Dunbar// XFAIL: apple-darwin
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale>
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class moneypunct_byname<charT, International>
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// string grouping() const;
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale>
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <limits>
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
2283e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "platform_support.h" // locale name macros
23c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fnf
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : public std::moneypunct_byname<char, false>
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic:
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    explicit Fnf(const std::string& nm, std::size_t refs = 0)
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : std::moneypunct_byname<char, false>(nm, refs) {}
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fnt
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : public std::moneypunct_byname<char, true>
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic:
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    explicit Fnt(const std::string& nm, std::size_t refs = 0)
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : std::moneypunct_byname<char, true>(nm, refs) {}
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fwf
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : public std::moneypunct_byname<wchar_t, false>
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic:
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    explicit Fwf(const std::string& nm, std::size_t refs = 0)
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : std::moneypunct_byname<wchar_t, false>(nm, refs) {}
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass Fwt
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : public std::moneypunct_byname<wchar_t, true>
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic:
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    explicit Fwt(const std::string& nm, std::size_t refs = 0)
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        : std::moneypunct_byname<wchar_t, true>(nm, refs) {}
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant};
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
58e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall    // Monetary grouping strings may be terminated with 0 or CHAR_MAX, defining
59e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall    // how the grouping is repeated.
60e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall    std::string s = std::string(1, CHAR_MAX);
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        Fnf f("C", 1);
63e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall        assert(f.grouping() == s || f.grouping() == "");
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        Fnt f("C", 1);
67e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall        assert(f.grouping() == s || f.grouping() == "");
68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        Fwf f("C", 1);
71e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall        assert(f.grouping() == s || f.grouping() == "");
72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        Fwt f("C", 1);
75e2f2a15066552758a508e8a7325e0ccad4a5389bDavid Chisnall        assert(f.grouping() == s || f.grouping() == "");
76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
79c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnf f(LOCALE_en_US_UTF_8, 1);
80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
83c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnt f(LOCALE_en_US_UTF_8, 1);
84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
87c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwf f(LOCALE_en_US_UTF_8, 1);
88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
91c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwt f(LOCALE_en_US_UTF_8, 1);
92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
96c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnf f(LOCALE_fr_FR_UTF_8, 1);
97558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
100c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnt f(LOCALE_fr_FR_UTF_8, 1);
101558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
104c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwf f(LOCALE_fr_FR_UTF_8, 1);
105558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
108c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwt f(LOCALE_fr_FR_UTF_8, 1);
109558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
113c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnf f(LOCALE_ru_RU_UTF_8, 1);
114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
117c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnt f(LOCALE_ru_RU_UTF_8, 1);
118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
121c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwf f(LOCALE_ru_RU_UTF_8, 1);
122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
125c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwt f(LOCALE_ru_RU_UTF_8, 1);
126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(f.grouping() == "\3\3");
127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
130c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnf f(LOCALE_zh_CN_UTF_8, 1);
131558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
134c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fnt f(LOCALE_zh_CN_UTF_8, 1);
135558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
138c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwf f(LOCALE_zh_CN_UTF_8, 1);
139558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
142c0d0cbad9ed434267a7af9531bdeeae52eb6d706Howard Hinnant        Fwt f(LOCALE_zh_CN_UTF_8, 1);
143558ae17391455e18d3cc63ead57ba0b8aba49a3fJeffrey Yasskin        assert(f.grouping() == "\3");
144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
146