1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// The LLVM Compiler Infrastructure 4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open 6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details. 7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// 8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===// 9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <string> 11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// double stod(const string& str, size_t *idx = 0); 13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// double stod(const wstring& str, size_t *idx = 0); 14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <string> 16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cmath> 17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert> 18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner 19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main() 20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{ 21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("0") == 0); 22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"0") == 0); 23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("-0") == 0); 24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"-0") == 0); 25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("-10") == -10); 26b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"-10.5") == -10.5); 27b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(" 10") == 10); 28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L" 10") == 10); 29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner size_t idx = 0; 30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("10g", &idx) == 10); 31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 2); 32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner idx = 0; 33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"10g", &idx) == 10); 34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 2); 35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("1.e60", &idx) == 1.e60); 38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 5); 39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"1.e60", &idx) == 1.e60); 47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 5); 48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner idx = 0; 54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("1.e360", &idx) == INFINITY); 57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"1.e360", &idx) == INFINITY); 66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod("INF", &idx) == INFINITY); 75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 3); 76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner idx = 0; 82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 84b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::stod(L"INF", &idx) == INFINITY); 85b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 3); 86b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 87b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 89b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 90b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 91b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner idx = 0; 92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 94b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::isnan(std::stod("NAN", &idx))); 95b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 3); 96b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 98b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 99b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 100b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 101b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner idx = 0; 102b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 103b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 104b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(std::isnan(std::stod(L"NAN", &idx))); 105b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 3); 106b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 107b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::out_of_range&) 108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 109b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 110b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 111b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner idx = 0; 112b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 113b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 114b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::stod("", &idx); 115b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 116b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::invalid_argument&) 118b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 119b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 120b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 121b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 122b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 123b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::stod(L"", &idx); 124b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 125b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 126b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::invalid_argument&) 127b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 128b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 129b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 130b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 131b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 132b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::stod(" - 8", &idx); 133b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 134b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 135b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::invalid_argument&) 136b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 137b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 138b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 139b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 140b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 141b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::stod(L" - 8", &idx); 142b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 143b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 144b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::invalid_argument&) 145b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 146b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 147b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 148b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 149b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 150b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::stod("a1", &idx); 151b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 152b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 153b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::invalid_argument&) 154b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 155b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 156b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 157b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner try 158b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 159b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner std::stod(L"a1", &idx); 160b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(false); 161b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 162b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner catch (const std::invalid_argument&) 163b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner { 164b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner assert(idx == 0); 165b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner } 166b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner} 167