1// { dg-require-swprintf "" }
2
3// Copyright (C) 2005-2015 Free Software Foundation, Inc.
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 3, 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 COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20#include <cstdio> // for swprintf
21#include <iostream>
22#include <iomanip>
23#include <sstream>
24#include <limits>
25#include <testsuite_hooks.h>
26
27void
28test02()
29{
30  using namespace std;
31  bool test __attribute__((unused)) = true;
32
33  // make sure we can output a very long float
34  long double val = numeric_limits<long double>::max();
35  int prec = numeric_limits<long double>::digits10;
36
37  wostringstream os;
38  os.precision(prec);
39  os.setf(wios::scientific);
40  os << val;
41
42  wchar_t largebuf[512];
43  swprintf(largebuf, 512, L"%.*Le", prec, val);
44#ifdef TEST_NUMPUT_VERBOSE
45  wcout << "expect: " << largebuf << endl;
46  wcout << "result: " << os.str() << endl;
47#endif
48  VERIFY( os && os.str() == largebuf );
49
50  // Make sure we can output a long float in fixed format
51  // without seg-faulting (libstdc++/4402)
52  double val2 = numeric_limits<double>::max();
53
54  wostringstream os2;
55  os2.precision(3);
56  os2.setf(wios::fixed);
57  os2 << val2;
58
59  swprintf(largebuf, 512, L"%.*f", 3, val2);
60#ifdef TEST_NUMPUT_VERBOSE
61  wcout << "expect: " << largebuf << endl;
62  wcout << "result: " << os2.str() << endl;
63#endif
64  VERIFY( os2 && os2.str() == largebuf );
65}
66
67int
68main()
69{
70  test02();
71  return 0;
72}
73