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<charT, International>
13
14// pattern neg_format() const;
15
16#include <locale>
17#include <limits>
18#include <cassert>
19
20typedef std::moneypunct<char> F;
21
22class Fnf
23    : public std::moneypunct<char, false>
24{
25public:
26    explicit Fnf(std::size_t refs = 0)
27        : std::moneypunct<char, false>(refs) {}
28};
29
30class Fnt
31    : public std::moneypunct<char, true>
32{
33public:
34    explicit Fnt(std::size_t refs = 0)
35        : std::moneypunct<char, true>(refs) {}
36};
37
38class Fwf
39    : public std::moneypunct<wchar_t, false>
40{
41public:
42    explicit Fwf(std::size_t refs = 0)
43        : std::moneypunct<wchar_t, false>(refs) {}
44};
45
46class Fwt
47    : public std::moneypunct<wchar_t, true>
48{
49public:
50    explicit Fwt(std::size_t refs = 0)
51        : std::moneypunct<wchar_t, true>(refs) {}
52};
53
54int main()
55{
56    {
57        Fnf f(1);
58        std::money_base::pattern p = f.neg_format();
59        assert(p.field[0] == std::money_base::symbol);
60        assert(p.field[1] == std::money_base::sign);
61        assert(p.field[2] == std::money_base::none);
62        assert(p.field[3] == std::money_base::value);
63    }
64    {
65        Fnt f(1);
66        std::money_base::pattern p = f.neg_format();
67        assert(p.field[0] == std::money_base::symbol);
68        assert(p.field[1] == std::money_base::sign);
69        assert(p.field[2] == std::money_base::none);
70        assert(p.field[3] == std::money_base::value);
71    }
72    {
73        Fwf f(1);
74        std::money_base::pattern p = f.neg_format();
75        assert(p.field[0] == std::money_base::symbol);
76        assert(p.field[1] == std::money_base::sign);
77        assert(p.field[2] == std::money_base::none);
78        assert(p.field[3] == std::money_base::value);
79    }
80    {
81        Fwt f(1);
82        std::money_base::pattern p = f.neg_format();
83        assert(p.field[0] == std::money_base::symbol);
84        assert(p.field[1] == std::money_base::sign);
85        assert(p.field[2] == std::money_base::none);
86        assert(p.field[3] == std::money_base::value);
87    }
88}
89