stoull.pass.cpp revision 4dc5b2198d1aa4ab585a3d4a87ee9626d681f9f7
1a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant//===----------------------------------------------------------------------===// 2a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// 3a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// The LLVM Compiler Infrastructure 4a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// 8a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant//===----------------------------------------------------------------------===// 9d7cddf651933c246f4b2c4b3de4a4751a9a050dbHoward Hinnant// 104dc5b2198d1aa4ab585a3d4a87ee9626d681f9f7Dan Albert// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 114dc5b2198d1aa4ab585a3d4a87ee9626d681f9f7Dan Albert// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 12a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 13a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// <string> 14a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 15a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10); 16a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// unsigned long long stoull(const wstring& str, size_t *idx = 0, int base = 10); 17a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 18a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <string> 19a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <cassert> 20a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 21a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnantint main() 22a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant{ 23a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull("0") == 0); 24a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull(L"0") == 0); 25a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull("-0") == 0); 26a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull(L"-0") == 0); 27a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull(" 10") == 10); 28a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull(L" 10") == 10); 29a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant size_t idx = 0; 30a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull("10g", &idx, 16) == 16); 31a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 32a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 33a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stoull(L"10g", &idx, 16) == 16); 34a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 35a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 36a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 37a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 38a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stoull("", &idx); 39a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 40a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 41a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 42a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 43a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 44a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 45a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 46a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 47a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 48a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stoull(L"", &idx); 49a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 50a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 51a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 52a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 53a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 54a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 55a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 56a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 57a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stoull(" - 8", &idx); 58a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 59a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 60a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 61a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 62a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 63a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 64a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 65a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 66a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stoull(L" - 8", &idx); 67a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 68a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 69a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 70a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 71a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 72a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 73a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 74a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 75a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stoull("a1", &idx); 76a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 77a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 78a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 79a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 80a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 81a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 82a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 83a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 84a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stoull(L"a1", &idx); 85a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 86a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 87a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 88a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 89a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 90a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 91bf6eda0b1e50f1194ed07df89840e4e9c5f05fddMarshall Clow// LWG issue #2009 928634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow try 938634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 948634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow std::stoull("9999999999999999999999999999999999999999999999999", &idx); 958634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(false); 968634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 978634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow catch (const std::out_of_range&) 988634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 998634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(idx == 0); 1008634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 1018634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow try 1028634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 1038634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow std::stoull(L"9999999999999999999999999999999999999999999999999", &idx); 1048634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(false); 1058634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 1068634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow catch (const std::out_of_range&) 1078634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 1088634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(idx == 0); 1098634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 110a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant} 111