Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 14 additions & 19 deletions headers/validation.h
Original file line number Diff line number Diff line change
Expand Up @@ -1232,15 +1232,14 @@ class Validator {
WA(name, ": Want integer, found nothing");
}
long long v;
try {
auto begin = s.c_str(), end = begin + s.size();
auto [ptr, ec] = std::from_chars(begin, end, v);
if(ptr != end or ec != std::errc{})
WA(name, ": Parsing " + s + " as long long failed! Did not process all characters");
} catch(const std::out_of_range& e) {
auto begin = s.c_str(), end = begin + s.size();
auto [ptr, ec] = std::from_chars(begin, end, v);
if(ec == std::errc::result_out_of_range) {
WA(name, ": Number " + s + " does not fit in a long long!");
} catch(const std::invalid_argument& e) {
WA("Parsing " + s + " as long long failed!");
} else if(ptr != end) {
WA(name, ": Parsing " + s + " as long long failed! Did not process all characters");
} else if(ec != std::errc{}) {
WA(name, ": Parsing " + s + " as long long failed!");
}
// Check for leading zero.
if(v == 0) {
Expand All @@ -1260,18 +1259,14 @@ class Validator {
assert(!gen);
std::string s = get_string("long double");
long double v;
try {
size_t chars_processed;
v = stold(s, &chars_processed);
if(chars_processed != s.size())
WA(name, ": Parsing ", s,
" as long double failed! Did not process all characters.");
if(strict_float && !std::regex_match(s, float_regex))
WA(name, ": Parsing ", s, " failed, because it does not match the strict float_regex!");
} catch(const std::out_of_range& e) {
auto begin = s.c_str(), end = begin + s.size();
auto [ptr, ec] = std::from_chars(begin, end, v);
if(ec == std::errc::result_out_of_range) {
WA(name, ": Number " + s + " does not fit in a long double!");
} catch(const std::invalid_argument& e) {
WA("Parsing " + s + " as long double failed!");
} else if(ptr != end) {
WA(name, ": Parsing " + s + " as long double failed! Did not process all characters");
} else if(ec != std::errc{}) {
WA(name, ": Parsing " + s + " as long double failed!");
}
return v;
}
Expand Down
Loading