Skip to content
Snippets Groups Projects
Commit 1d063756 authored by namark's avatar namark
Browse files

Unit tests for to_<Number> function.

parent 6864048d
Branches up_movement
No related tags found
No related merge requests found
...@@ -77,14 +77,14 @@ namespace simple::support ...@@ -77,14 +77,14 @@ namespace simple::support
return ston<N>(s, &start_index); return ston<N>(s, &start_index);
} }
template <typename N> template <typename Number>
std::optional<N> to_(const std::string& s) std::optional<Number> to_(const std::string& s)
{ {
static_assert(std::is_arithmetic_v<N>, "simple::support::to_number expects an arithmetic type!"); static_assert(std::is_arithmetic_v<Number>, "simple::support::to_<Number> expects an arithmetic type!");
errno = 0; errno = 0;
const char* start = s.c_str(); const char* start = s.c_str();
char* end; char* end;
N result = strton<N>(start, &end); Number result = strton<Number>(start, &end);
if(ERANGE == errno) if(ERANGE == errno)
return std::nullopt; return std::nullopt;
auto diff = end - start; auto diff = end - start;
......
...@@ -83,10 +83,29 @@ void NumericRangeToString() ...@@ -83,10 +83,29 @@ void NumericRangeToString()
assert( tos(-12.34) + '-' + tos(12.34) == tos(range<double>{-12.34,12.34}) ); assert( tos(-12.34) + '-' + tos(12.34) == tos(range<double>{-12.34,12.34}) );
} }
void SimplifiedToNumber()
{
assert( 123 == *to_<int>("123") );
assert( -0xabc == *to_<int>("-0xabc") );
assert( -0123 == *to_<int>("-0123") );
assert( 123.123f == *to_<float>(tos(123.123f)) );
assert( -123.123 == *to_<double>(tos(-123.123)) );
assert( 123.123l == *to_<long double>(tos(123.123l)) );
assert( 123 == *to_<int>("123xyz") );
assert(std::nullopt == to_<int>("abc123"));
assert(std::nullopt ==
to_<signed char>(std::to_string(std::numeric_limits<signed char>::max()) + '0'));
assert(std::nullopt ==
to_<unsigned char>(std::to_string(std::numeric_limits<unsigned char>::max()) + '0'));
}
int main() int main()
{ {
StringToNumber(); StringToNumber();
StringToNumericRange(); StringToNumericRange();
NumericRangeToString(); NumericRangeToString();
SimplifiedToNumber();
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment