1// { dg-require-namedlocale "en_HK" }
2
3// 2001-08-27 Benjamin Kosnik  <bkoz@redhat.com>
4
5// Copyright (C) 2001-2015 Free Software Foundation, Inc.
6//
7// This file is part of the GNU ISO C++ Library.  This library is free
8// software; you can redistribute it and/or modify it under the
9// terms of the GNU General Public License as published by the
10// Free Software Foundation; either version 3, or (at your option)
11// any later version.
12
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16// GNU General Public License for more details.
17
18// You should have received a copy of the GNU General Public License along
19// with this library; see the file COPYING3.  If not see
20// <http://www.gnu.org/licenses/>.
21
22// 22.2.6.2.1 money_put members
23
24#include <locale>
25#include <sstream>
26#include <testsuite_hooks.h>
27
28// test string version
29void test02()
30{
31  using namespace std;
32  typedef ostreambuf_iterator<char> iterator_type;
33
34  bool test __attribute__((unused)) = true;
35
36  // basic construction
37  locale loc_c = locale::classic();
38  locale loc_hk = locale("en_HK");
39  VERIFY( loc_c != loc_hk );
40
41  // sanity check the data is correct.
42  const string empty;
43
44  // total EPA budget FY 2002
45  const string digits1("720000000000");
46
47  // est. cost, national missile "defense", expressed as a loss in USD 2001
48  const string digits2("-10000000000000");
49
50  // not valid input
51  const string digits3("-A");
52
53  // input less than frac_digits
54  const string digits4("-1");
55
56  // cache the money_put facet
57  ostringstream oss;
58  oss.imbue(loc_hk);
59  const money_put<char>& mon_put = use_facet<money_put<char> >(oss.getloc());
60
61  // now try with showbase, to get currency symbol in format
62  oss.setf(ios_base::showbase);
63
64  // test sign of more than one digit, say hong kong.
65  oss.str(empty);
66  mon_put.put(oss.rdbuf(), false, oss, ' ', digits1);
67  string result5 = oss.str();
68  VERIFY( result5 == "HK$7,200,000,000.00");
69
70  oss.str(empty);
71  mon_put.put(oss.rdbuf(), true, oss, ' ', digits2);
72  string result6 = oss.str();
73  VERIFY( result6 == "(HKD 100,000,000,000.00)");
74
75  // test one-digit formats without zero padding
76  oss.imbue(loc_c);
77  oss.str(empty);
78  const money_put<char>& mon_put2 = use_facet<money_put<char> >(oss.getloc());
79  mon_put2.put(oss.rdbuf(), true, oss, ' ', digits4);
80  string result7 = oss.str();
81  VERIFY( result7 == "1");
82
83  // test one-digit formats with zero padding, zero frac widths
84  oss.imbue(loc_hk);
85  oss.str(empty);
86  const money_put<char>& mon_put3 = use_facet<money_put<char> >(oss.getloc());
87  mon_put3.put(oss.rdbuf(), true, oss, ' ', digits4);
88  string result8 = oss.str();
89  VERIFY( result8 == "(HKD .01)");
90
91  oss.unsetf(ios_base::showbase);
92
93  // test bunk input
94  oss.str(empty);
95  mon_put.put(oss.rdbuf(), true, oss, ' ', digits3);
96  string result9 = oss.str();
97  VERIFY( result9 == "");
98}
99
100int main()
101{
102  test02();
103  return 0;
104}
105