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//===----------------------------------------------------------------------===// 9a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 10a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// <string> 11a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 12a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// long double stold(const string& str, size_t *idx = 0); 13a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant// long double stold(const wstring& str, size_t *idx = 0); 14a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 15a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <iostream> 16a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant 17a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <string> 18a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant#include <cmath> 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::stold("0") == 0); 26a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"0") == 0); 27a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("-0") == 0); 28a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"-0") == 0); 29a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("-10") == -10); 30a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"-10.5") == -10.5); 31a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(" 10") == 10); 32a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L" 10") == 10); 33a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant size_t idx = 0; 34a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("10g", &idx) == 10); 35a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 36a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 37a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"10g", &idx) == 10); 38a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 2); 39bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 40a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 41bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 42a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 43a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("1.e60", &idx) == 1.e60L); 44a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 5); 45a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 46bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 47a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 48a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 49a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 50a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 51a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 52bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 53a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 54a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"1.e60", &idx) == 1.e60L); 55a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 5); 56a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 57bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 58a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 59a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 60a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 61a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 62bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 63a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 64bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 65a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 66a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 67a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("1.e6000", &idx) == INFINITY); 68a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 69a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 70a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 71a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 72a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 73a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 74a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 75a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 76a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"1.e6000", &idx) == INFINITY); 77a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 78a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 79a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 80a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 81a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 82a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 83a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 84bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 85a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 86a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold("INF", &idx) == INFINITY); 87a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 88a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 89bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 90a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 91a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 92a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 93a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 94bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 95a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 96bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 97a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 98bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 99a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 100a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::stold(L"INF", &idx) == INFINITY); 101a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 102a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 103bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 104a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 105a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 106a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 107a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 108bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 109a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 110bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 111a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 112bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 113a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 114a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::isnan(std::stold("NAN", &idx))); 115a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 116a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 117bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 118a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 119a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 120a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 121a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 122bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 123a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 124bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 125a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 126bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 127a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 128a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(std::isnan(std::stold(L"NAN", &idx))); 129a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 3); 130a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 131bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 132a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::out_of_range&) 133a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 134a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 135a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 136a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant idx = 0; 137a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 138a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 139a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold("", &idx); 140a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 141a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 142a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 143a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 144a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 145a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 146a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 147a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 148a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(L"", &idx); 149a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 150a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 151a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 152a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 153a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 154a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 155a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 156a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 157a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(" - 8", &idx); 158a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 159a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 160a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 161a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 162a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 163a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 164a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 165a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 166a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(L" - 8", &idx); 167a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 168a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 169a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 170a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 171a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 172a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 173a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 174a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 175a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold("a1", &idx); 176a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 177a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 178a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 179a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 180a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 181a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 182a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant try 183a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 184a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant std::stold(L"a1", &idx); 185a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(false); 186a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 187a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant catch (const std::invalid_argument&) 188a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant { 189a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant assert(idx == 0); 190a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant } 191bc464e50e9cc2a48010e83973de3c1e53eeb0d38Roger Ferrer Ibanez#endif 192a6a062df66fe49704bd074464af30bf8c3db6ea5Howard Hinnant} 193