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// 1033459617e77c6c1917660b2885c376377db5841dJonathan Roelofs// XFAIL: with_system_cxx_lib=x86_64-apple-darwin11 1133459617e77c6c1917660b2885c376377db5841dJonathan Roelofs// XFAIL: with_system_cxx_lib=x86_64-apple-darwin12 12a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 13a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// <string> 14a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 15a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// long stol(const string& str, size_t *idx = 0, int base = 10); 16a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// long stol(const wstring& str, size_t *idx = 0, int base = 10); 17a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 18a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <string> 19a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <cassert> 20a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 21bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#include "test_macros.h" 22bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez 23a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnantint main() 24a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant{ 25a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol("0") == 0); 26a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol(L"0") == 0); 27a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol("-0") == 0); 28a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol(L"-0") == 0); 29a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol("-10") == -10); 30a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol(L"-10") == -10); 31a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol(" 10") == 10); 32a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol(L" 10") == 10); 33a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant size_t idx = 0; 34a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol("10g", &idx, 16) == 16); 35a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 36a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 37a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stol(L"10g", &idx, 16) == 16); 38a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 39bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 40a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 41a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 42a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 43a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stol("", &idx); 44a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 45a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 46a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 47a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 48a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 49a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 50a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 51a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 52a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stol(L"", &idx); 53a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 54a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 55a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 56a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 57a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 58a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 59a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 60a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 61a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stol(" - 8", &idx); 62a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 63a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 64a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 65a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 66a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 67a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 68a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 69a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 70a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stol(L" - 8", &idx); 71a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 72a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 73a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 74a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 75a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 76a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 77a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 78a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 79a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stol("a1", &idx); 80a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 81a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 82a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 83a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 84a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 85a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 86a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 87a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 88a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stol(L"a1", &idx); 89a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 90a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 91a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 92a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 93a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 94a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 95bf6eda0b1e50f1194ed07df89840e4e9c5f05fddMarshall Clow// LWG issue #2009 968634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow try 978634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 988634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow std::stol("9999999999999999999999999999999999999999999999999", &idx); 998634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(false); 1008634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 1018634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow catch (const std::out_of_range&) 1028634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 1038634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(idx == 0); 1048634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 1058634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow try 1068634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 1078634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow std::stol(L"9999999999999999999999999999999999999999999999999", &idx); 1088634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(false); 1098634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 1108634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow catch (const std::out_of_range&) 1118634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow { 1128634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow assert(idx == 0); 1138634fc5494641850c89eab7a1f2357a55d694c0cMarshall Clow } 114bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 115a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant} 116