1// { dg-options "-std=gnu++0x" } 2// { dg-require-string-conversions "" } 3// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com> 4 5// Copyright (C) 2008, 2009 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// 21.4 Numeric Conversions [string.conversions] 23 24#include <string> 25#include <limits> 26#include <stdexcept> 27#include <testsuite_hooks.h> 28 29void 30test01() 31{ 32#ifdef _GLIBCXX_USE_C99 33 34 bool test __attribute__((unused)) = false; 35 using namespace std; 36 37 try 38 { 39 wstring one; 40 stoull(one); 41 } 42 catch(std::invalid_argument) 43 { 44 test = true; 45 } 46 catch(...) 47 { 48 } 49 VERIFY( test ); 50 51 test = false; 52 try 53 { 54 wstring one(L"a"); 55 stoull(one); 56 } 57 catch(std::invalid_argument) 58 { 59 test = true; 60 } 61 catch(...) 62 { 63 } 64 VERIFY( test ); 65 66 unsigned long long ull1 = 0; 67 try 68 { 69 wstring one(L"a"); 70 ull1 = stoull(one, 0, 16); 71 } 72 catch(...) 73 { 74 test = false; 75 } 76 VERIFY( test ); 77 VERIFY( ull1 == 10 ); 78 79 size_t idx1 = 0; 80 try 81 { 82 wstring one(L"78"); 83 ull1 = stoull(one, &idx1, 8); 84 } 85 catch(...) 86 { 87 test = false; 88 } 89 VERIFY( test ); 90 VERIFY( ull1 == 7 ); 91 VERIFY( idx1 = 1 ); 92 93 try 94 { 95 wstring one(L"10112"); 96 ull1 = stoull(one, &idx1, 2); 97 } 98 catch(...) 99 { 100 test = false; 101 } 102 VERIFY( test ); 103 VERIFY( ull1 == 11 ); 104 VERIFY( idx1 == 4 ); 105 106 try 107 { 108 wstring one(L"0XE"); 109 ull1 = stoull(one, &idx1, 0); 110 } 111 catch(...) 112 { 113 test = false; 114 } 115 VERIFY( test ); 116 VERIFY( ull1 == 14 ); 117 VERIFY( idx1 == 3 ); 118 119 test = false; 120 try 121 { 122 wstring one(1000, L'9'); 123 ull1 = stoull(one); 124 } 125 catch(std::out_of_range) 126 { 127 test = true; 128 } 129 catch(...) 130 { 131 } 132 VERIFY( test ); 133 VERIFY( ull1 == 14 ); 134 135 try 136 { 137 ull1 = numeric_limits<unsigned long long>::max(); 138 wstring one(to_wstring(ull1)); 139 ull1 = stoull(one); 140 } 141 catch(...) 142 { 143 test = false; 144 } 145 VERIFY( test ); 146 VERIFY( ull1 == numeric_limits<unsigned long long>::max() ); 147 148#endif 149} 150 151int main() 152{ 153 test01(); 154 return 0; 155} 156