1// 2004-08-22  Paolo Carlini  <pcarlini@suse.de>
2
3// Copyright (C) 2004 Free Software Foundation
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING.  If not, write to the Free
18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19// USA.
20
21// 22.2.2.2.1  num_put members
22
23#include <locale>
24#include <sstream>
25#include <testsuite_hooks.h>
26
27// According to 22.2.2.2.2, p23 and the resolution of DR 359
28// val must be casted to a signed type: this can be revealed
29// by ios_base::showpos, which is effective only for signed
30// types (also see libstdc++/15565 about this).
31void test01()
32{
33  using namespace std;
34  bool test __attribute__((unused)) = true;
35
36  // basic construction
37  locale loc_c = locale::classic();
38
39  // sanity check the data is correct.
40  const string empty;
41
42  // cache the num_put facet
43  ostringstream oss;
44  oss.imbue(loc_c);
45  const num_put<char>& np = use_facet<num_put<char> >(oss.getloc());
46
47  bool b = true;
48  np.put(oss.rdbuf(), oss, ' ', b);
49  VERIFY( oss.str() == "1" );
50
51  oss.str(empty);
52  oss.clear();
53  oss.setf(ios_base::showpos);
54  np.put(oss.rdbuf(), oss, ' ', b);
55  VERIFY( oss.str() == "+1" );
56}
57
58int main()
59{
60  test01();
61  return 0;
62}
63