1// 1999-11-15 Kevin Ediger  <kediger@licor.com>
2// test the floating point inserters (facet num_put)
3
4// Copyright (C) 1999-2015 Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3.  If not see
19// <http://www.gnu.org/licenses/>.
20
21#include <cstdio> // for sprintf
22#include <iostream>
23#include <iomanip>
24#include <sstream>
25#include <limits>
26#include <testsuite_hooks.h>
27
28void
29test02()
30{
31  using namespace std;
32  bool test __attribute__((unused)) = true;
33
34  // make sure we can output a very long float
35  long double val = numeric_limits<long double>::max();
36  int prec = numeric_limits<long double>::digits10;
37
38  ostringstream os;
39  os.precision(prec);
40  os.setf(ios::scientific);
41  os << val;
42
43  char largebuf[512];
44  sprintf(largebuf, "%.*Le", prec, val);
45#ifdef TEST_NUMPUT_VERBOSE
46  cout << "expect: " << largebuf << endl;
47  cout << "result: " << os.str() << endl;
48#endif
49  VERIFY( os && os.str() == largebuf );
50
51  // Make sure we can output a long float in fixed format
52  // without seg-faulting (libstdc++/4402)
53  double val2 = numeric_limits<double>::max();
54
55  ostringstream os2;
56  os2.precision(3);
57  os2.setf(ios::fixed);
58  os2 << val2;
59
60  sprintf(largebuf, "%.*f", 3, val2);
61#ifdef TEST_NUMPUT_VERBOSE
62  cout << "expect: " << largebuf << endl;
63  cout << "result: " << os2.str() << endl;
64#endif
65  VERIFY( os2 && os2.str() == largebuf );
66}
67
68int
69main()
70{
71  test02();
72  return 0;
73}
74