grouping.pass.cpp revision e2f2a15066552758a508e8a7325e0ccad4a5389b
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// <locale>
11
12// class moneypunct_byname<charT, International>
13
14// string grouping() const;
15
16#include <locale>
17#include <limits>
18#include <cassert>
19
20class Fnf
21    : public std::moneypunct_byname<char, false>
22{
23public:
24    explicit Fnf(const std::string& nm, std::size_t refs = 0)
25        : std::moneypunct_byname<char, false>(nm, refs) {}
26};
27
28class Fnt
29    : public std::moneypunct_byname<char, true>
30{
31public:
32    explicit Fnt(const std::string& nm, std::size_t refs = 0)
33        : std::moneypunct_byname<char, true>(nm, refs) {}
34};
35
36class Fwf
37    : public std::moneypunct_byname<wchar_t, false>
38{
39public:
40    explicit Fwf(const std::string& nm, std::size_t refs = 0)
41        : std::moneypunct_byname<wchar_t, false>(nm, refs) {}
42};
43
44class Fwt
45    : public std::moneypunct_byname<wchar_t, true>
46{
47public:
48    explicit Fwt(const std::string& nm, std::size_t refs = 0)
49        : std::moneypunct_byname<wchar_t, true>(nm, refs) {}
50};
51
52int main()
53{
54    // Monetary grouping strings may be terminated with 0 or CHAR_MAX, defining
55    // how the grouping is repeated.
56    std::string s = std::string(1, CHAR_MAX);
57    {
58        Fnf f("C", 1);
59        assert(f.grouping() == s || f.grouping() == "");
60    }
61    {
62        Fnt f("C", 1);
63        assert(f.grouping() == s || f.grouping() == "");
64    }
65    {
66        Fwf f("C", 1);
67        assert(f.grouping() == s || f.grouping() == "");
68    }
69    {
70        Fwt f("C", 1);
71        assert(f.grouping() == s || f.grouping() == "");
72    }
73
74    {
75        Fnf f("en_US.UTF-8", 1);
76        assert(f.grouping() == "\3\3");
77    }
78    {
79        Fnt f("en_US.UTF-8", 1);
80        assert(f.grouping() == "\3\3");
81    }
82    {
83        Fwf f("en_US.UTF-8", 1);
84        assert(f.grouping() == "\3\3");
85    }
86    {
87        Fwt f("en_US.UTF-8", 1);
88        assert(f.grouping() == "\3\3");
89    }
90
91    {
92        Fnf f("fr_FR.UTF-8", 1);
93        assert(f.grouping() == "\3\3");
94    }
95    {
96        Fnt f("fr_FR.UTF-8", 1);
97        assert(f.grouping() == "\3\3");
98    }
99    {
100        Fwf f("fr_FR.UTF-8", 1);
101        assert(f.grouping() == "\3\3");
102    }
103    {
104        Fwt f("fr_FR.UTF-8", 1);
105        assert(f.grouping() == "\3\3");
106    }
107
108    {
109        Fnf f("ru_RU.UTF-8", 1);
110        assert(f.grouping() == "\3\3");
111    }
112    {
113        Fnt f("ru_RU.UTF-8", 1);
114        assert(f.grouping() == "\3\3");
115    }
116    {
117        Fwf f("ru_RU.UTF-8", 1);
118        assert(f.grouping() == "\3\3");
119    }
120    {
121        Fwt f("ru_RU.UTF-8", 1);
122        assert(f.grouping() == "\3\3");
123    }
124
125    {
126        Fnf f("zh_CN.UTF-8", 1);
127        assert(f.grouping() == "\3\3");
128    }
129    {
130        Fnt f("zh_CN.UTF-8", 1);
131        assert(f.grouping() == "\3\3");
132    }
133    {
134        Fwf f("zh_CN.UTF-8", 1);
135        assert(f.grouping() == "\3\3");
136    }
137    {
138        Fwt f("zh_CN.UTF-8", 1);
139        assert(f.grouping() == "\3\3");
140    }
141}
142