mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 12:41:17 +00:00
Fixed negative infinity parsing
This commit is contained in:
@@ -23,9 +23,11 @@ namespace YAML
|
|||||||
YAML_CPP_API bool Convert(const std::string& input, _Null& output);
|
YAML_CPP_API bool Convert(const std::string& input, _Null& output);
|
||||||
|
|
||||||
inline bool IsInfinity(const std::string& input) {
|
inline bool IsInfinity(const std::string& input) {
|
||||||
return input == ".inf" || input == ".Inf" || input == ".INF" ||
|
return input == ".inf" || input == ".Inf" || input == ".INF" || input == "+.inf" || input == "+.Inf" || input == "+.INF";
|
||||||
input == "+.inf" || input == "+.Inf" || input == "+.INF" ||
|
}
|
||||||
input == "-.inf" || input == "-.Inf" || input == "-.INF";
|
|
||||||
|
inline bool IsNegativeInfinity(const std::string& input) {
|
||||||
|
return input == "-.inf" || input == "-.Inf" || input == "-.INF";
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool IsNaN(const std::string& input) {
|
inline bool IsNaN(const std::string& input) {
|
||||||
@@ -41,9 +43,14 @@ namespace YAML
|
|||||||
if(!!stream)
|
if(!!stream)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if(std::numeric_limits<T>::has_infinity && IsInfinity(input)) {
|
if(std::numeric_limits<T>::has_infinity) {
|
||||||
output = std::numeric_limits<T>::infinity();
|
if(IsInfinity(input)) {
|
||||||
return true;
|
output = std::numeric_limits<T>::infinity();
|
||||||
|
return true;
|
||||||
|
} else if(IsNegativeInfinity(input)) {
|
||||||
|
output = -std::numeric_limits<T>::infinity();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(std::numeric_limits<T>::has_quiet_NaN && IsNaN(input)) {
|
if(std::numeric_limits<T>::has_quiet_NaN && IsNaN(input)) {
|
||||||
|
@@ -822,13 +822,13 @@ namespace Test
|
|||||||
parser.GetNextDocument(doc);
|
parser.GetNextDocument(doc);
|
||||||
|
|
||||||
for(unsigned i=0;i<doc.size();i++)
|
for(unsigned i=0;i<doc.size();i++)
|
||||||
if(doc[i].to<double>() != std::numeric_limits<double>::infinity())
|
if(doc[i].to<double>() != (i < 6 ? +1 : -1) * std::numeric_limits<double>::infinity())
|
||||||
return false;
|
return false;
|
||||||
for(unsigned i=0;i<doc.size();i++)
|
for(unsigned i=0;i<doc.size();i++)
|
||||||
if(doc[i].to<long double>() != std::numeric_limits<long double>::infinity())
|
if(doc[i].to<long double>() != (i < 6 ? +1 : -1) * std::numeric_limits<long double>::infinity())
|
||||||
return false;
|
return false;
|
||||||
for(unsigned i=0;i<doc.size();i++)
|
for(unsigned i=0;i<doc.size();i++)
|
||||||
if(doc[i].to<float>() != std::numeric_limits<float>::infinity())
|
if(doc[i].to<float>() != (i < 6 ? +1 : -1) * std::numeric_limits<float>::infinity())
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user