Commit 9cd294a7 authored by Praetorius, Simon's avatar Praetorius, Simon
Browse files

CI test configuration added

parent 428bde89
Pipeline #1597 canceled with stage
---
include:
- "https://gitlab.dune-project.org/core/ci-config/raw/master/config/common/master.yml"
- "https://gitlab.dune-project.org/core/ci-config/raw/master/jobs/common/master.yml"
before_script:
- . /duneci/bin/duneci-init-job
- duneci-install-module https://gitlab.dune-project.org/core/dune-common.git
...@@ -77,7 +77,9 @@ namespace Dune ...@@ -77,7 +77,9 @@ namespace Dune
{ {
std::istringstream s(std::string(first,last)); std::istringstream s(std::string(first,last));
s.imbue(std::locale::classic()); // make sure we are in locale "C" s.imbue(std::locale::classic()); // make sure we are in locale "C"
manipulator(s); auto manipulator_error = manipulator(s);
if (manipulator_error)
return from_chars_result{first, std::errc{manipulator_error.value()}};
try { try {
s >> value; // extract value s >> value; // extract value
...@@ -103,7 +105,9 @@ namespace Dune ...@@ -103,7 +105,9 @@ namespace Dune
{ {
std::ostringstream s; std::ostringstream s;
s.imbue(std::locale::classic()); // make sure we are in locale "C" s.imbue(std::locale::classic()); // make sure we are in locale "C"
manipulator(s); auto manipulator_error = manipulator(s);
if (manipulator_error)
return to_chars_result{last, std::errc{manipulator_error.value()}};
// negative integer values in base != 10 are not correctly converted // negative integer values in base != 10 are not correctly converted
bool sign = value < T(0); bool sign = value < T(0);
...@@ -132,7 +136,11 @@ namespace Dune ...@@ -132,7 +136,11 @@ namespace Dune
std::enable_if_t<std::is_integral<T>::value, int> = 0> std::enable_if_t<std::is_integral<T>::value, int> = 0>
from_chars_result from_chars (const char* first, const char* last, T& value, int base = 10) from_chars_result from_chars (const char* first, const char* last, T& value, int base = 10)
{ {
return Impl::fromCharsImpl(first, last, value, [base](auto& s) { s >> std::setbase(base); }); return Impl::fromCharsImpl(first, last, value, [base](auto& s) -> std::error_code
{
s >> std::setbase(base);
return {};
});
} }
/// \brief Converts a character sequence to a floating-point value /// \brief Converts a character sequence to a floating-point value
...@@ -141,7 +149,7 @@ namespace Dune ...@@ -141,7 +149,7 @@ namespace Dune
from_chars_result from_chars (const char* first, const char* last, T& value, from_chars_result from_chars (const char* first, const char* last, T& value,
chars_format fmt = chars_format::general) chars_format fmt = chars_format::general)
{ {
return Impl::fromCharsImpl(first, last, value, [fmt](auto& s) return Impl::fromCharsImpl(first, last, value, [fmt](auto& s) -> std::error_code
{ {
if ((int(fmt) & int(chars_format::scientific)) != 0) if ((int(fmt) & int(chars_format::scientific)) != 0)
s >> std::scientific; s >> std::scientific;
...@@ -149,9 +157,10 @@ namespace Dune ...@@ -149,9 +157,10 @@ namespace Dune
s >> std::fixed; s >> std::fixed;
if ((int(fmt) & int(chars_format::hex)) != 0) { if ((int(fmt) & int(chars_format::hex)) != 0) {
s >> std::hexfloat; s >> std::hexfloat;
DUNE_THROW(NotImplemented, return std::make_error_code(std::errc::not_supported);
"Reading hexfloat values not supported by many standard libraries currently."); // Reading hexfloat values not supported by many standard libraries currently
} }
return {};
}); });
} }
...@@ -161,7 +170,11 @@ namespace Dune ...@@ -161,7 +170,11 @@ namespace Dune
std::enable_if_t<std::is_integral<T>::value, int> = 0> std::enable_if_t<std::is_integral<T>::value, int> = 0>
to_chars_result to_chars (char* first, char* last, T value, int base = 10) to_chars_result to_chars (char* first, char* last, T value, int base = 10)
{ {
return Impl::toCharsImpl(first, last, value, [base](auto& s) { s << std::setbase(base); }); return Impl::toCharsImpl(first, last, value, [base](auto& s) -> std::error_code
{
s << std::setbase(base);
return {};
});
} }
/// \brief Converts a floating-point value to a character sequence /// \brief Converts a floating-point value to a character sequence
...@@ -169,7 +182,7 @@ namespace Dune ...@@ -169,7 +182,7 @@ namespace Dune
std::enable_if_t<std::is_floating_point<T>::value, int> = 0> std::enable_if_t<std::is_floating_point<T>::value, int> = 0>
to_chars_result to_chars (char* first, char* last, T value) to_chars_result to_chars (char* first, char* last, T value)
{ {
return Impl::toCharsImpl(first, last, value, [](auto& /*s*/) {}); return Impl::toCharsImpl(first, last, value, [](auto& /*s*/) -> std::error_code { return {}; });
} }
/// \brief Converts a floating-point value to a character sequence with additional format specifier /// \brief Converts a floating-point value to a character sequence with additional format specifier
...@@ -177,7 +190,7 @@ namespace Dune ...@@ -177,7 +190,7 @@ namespace Dune
std::enable_if_t<std::is_floating_point<T>::value, int> = 0> std::enable_if_t<std::is_floating_point<T>::value, int> = 0>
to_chars_result to_chars (char* first, char* last, T value, chars_format fmt) to_chars_result to_chars (char* first, char* last, T value, chars_format fmt)
{ {
return Impl::toCharsImpl(first, last, value, [fmt](auto& s) return Impl::toCharsImpl(first, last, value, [fmt](auto& s) -> std::error_code
{ {
if ((int(fmt) & int(chars_format::scientific)) != 0) if ((int(fmt) & int(chars_format::scientific)) != 0)
s << std::scientific; s << std::scientific;
...@@ -185,6 +198,7 @@ namespace Dune ...@@ -185,6 +198,7 @@ namespace Dune
s << std::fixed; s << std::fixed;
if ((int(fmt) & int(chars_format::hex)) != 0) if ((int(fmt) & int(chars_format::hex)) != 0)
s << std::hexfloat; s << std::hexfloat;
return {};
}); });
} }
...@@ -193,7 +207,7 @@ namespace Dune ...@@ -193,7 +207,7 @@ namespace Dune
std::enable_if_t<std::is_floating_point<T>::value, int> = 0> std::enable_if_t<std::is_floating_point<T>::value, int> = 0>
to_chars_result to_chars (char* first, char* last, T value, chars_format fmt, int precision) to_chars_result to_chars (char* first, char* last, T value, chars_format fmt, int precision)
{ {
return Impl::toCharsImpl(first, last, value, [fmt,precision](auto& s) return Impl::toCharsImpl(first, last, value, [fmt,precision](auto& s) -> std::error_code
{ {
s << std::setprecision(precision); s << std::setprecision(precision);
if ((int(fmt) & int(chars_format::scientific)) != 0) if ((int(fmt) & int(chars_format::scientific)) != 0)
...@@ -202,6 +216,7 @@ namespace Dune ...@@ -202,6 +216,7 @@ namespace Dune
s << std::fixed; s << std::fixed;
if ((int(fmt) & int(chars_format::hex)) != 0) if ((int(fmt) & int(chars_format::hex)) != 0)
s << std::hexfloat; s << std::hexfloat;
return {};
}); });
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment