#include "fast_float/fast_float.h" #include #include #include template bool test(std::string s, double expected) { std::basic_string input(s.begin(), s.end()); double result; auto answer = fast_float::from_chars(input.data(), input.data() + input.size(), result); if (answer.ec != std::errc()) { std::cerr << "parsing of \"" << s << "\" should succeed\n"; return false; } if (result != expected && !(std::isnan(result) && std::isnan(expected))) { std::cerr << "parsing of \"" << s << "\" succeeded, expected " << expected << " got " << result << "\n"; return false; } return true; } int main() { if (!test("4.2", 4.2)) { std::cout << "test failure for char" << std::endl; return EXIT_FAILURE; } if (!test("4.2", 4.2)) { std::cout << "test failure for wchar_t" << std::endl; return EXIT_FAILURE; } #ifdef __cpp_char8_t if (!test("4.2", 4.2)) { std::cout << "test failure for char8_t" << std::endl; return EXIT_FAILURE; } #endif if (!test("4.2", 4.2)) { std::cout << "test failure for char16_t" << std::endl; return EXIT_FAILURE; } if (!test("4.2", 4.2)) { std::cout << "test failure for char32_t" << std::endl; return EXIT_FAILURE; } std::cout << "all ok" << std::endl; return EXIT_SUCCESS; }