1// 1999-11-15 Kevin Ediger <kediger@licor.com> 2// test the floating point inserters (facet num_put) 3 4// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 5// 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#include <cstdio> // for sprintf 23#include <iostream> 24#include <iomanip> 25#include <sstream> 26#include <limits> 27#include <testsuite_hooks.h> 28 29void 30test02() 31{ 32 using namespace std; 33 bool test __attribute__((unused)) = true; 34 35 // make sure we can output a very long float 36 long double val = numeric_limits<long double>::max(); 37 int prec = numeric_limits<long double>::digits10; 38 39 ostringstream os; 40 os.precision(prec); 41 os.setf(ios::scientific); 42 os << val; 43 44 char largebuf[512]; 45 sprintf(largebuf, "%.*Le", prec, val); 46#ifdef TEST_NUMPUT_VERBOSE 47 cout << "expect: " << largebuf << endl; 48 cout << "result: " << os.str() << endl; 49#endif 50 VERIFY( os && os.str() == largebuf ); 51 52 // Make sure we can output a long float in fixed format 53 // without seg-faulting (libstdc++/4402) 54 double val2 = numeric_limits<double>::max(); 55 56 ostringstream os2; 57 os2.precision(3); 58 os2.setf(ios::fixed); 59 os2 << val2; 60 61 sprintf(largebuf, "%.*f", 3, val2); 62#ifdef TEST_NUMPUT_VERBOSE 63 cout << "expect: " << largebuf << endl; 64 cout << "result: " << os2.str() << endl; 65#endif 66 VERIFY( os2 && os2.str() == largebuf ); 67} 68 69int 70main() 71{ 72 test02(); 73 return 0; 74} 75