1 // 1999-11-15 Kevin Ediger <kediger@licor.com> 2 // test the floating point inserters (facet num_put) 3 4 // Copyright (C) 1999-2020 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 28 void test02()29test02() 30 { 31 using namespace std; 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 ostringstream os; 38 os.precision(prec); 39 os.setf(ios::scientific); 40 os << val; 41 42 char largebuf[512]; 43 sprintf(largebuf, "%.*Le", prec, val); 44 #ifdef TEST_NUMPUT_VERBOSE 45 cout << "expect: " << largebuf << endl; 46 cout << "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 ostringstream os2; 55 os2.precision(3); 56 os2.setf(ios::fixed); 57 os2 << val2; 58 59 sprintf(largebuf, "%.*f", 3, val2); 60 #ifdef TEST_NUMPUT_VERBOSE 61 cout << "expect: " << largebuf << endl; 62 cout << "result: " << os2.str() << endl; 63 #endif 64 VERIFY( os2 && os2.str() == largebuf ); 65 } 66 67 int main()68main() 69 { 70 test02(); 71 return 0; 72 } 73