#include #include #include void numberTests() { using format::parseNumber; static_assert(!parseNumber("", 0).first); static_assert(!parseNumber("-", 0).first); static_assert(parseNumber("1", 0).first == 1); static_assert(parseNumber("10", 0).first == 10); static_assert(parseNumber("10907", 0).first == 10907); static_assert(parseNumber("-1", 0).first == -1); static_assert(parseNumber("-11097", 0).first == -11097); } int main(int argc, char* argv[]) { using namespace format; using format::format; if (argc == 2) { std::string_view fmt{argv[1]}; format_nothrow_to(fmt, stdout, "Knirp", 's', argv[0], 42u, 1.337); putchar('\n'); return 0; } format_to("Hallo %%du %1$s %s%c %s %u = %4$#x = %4$#X = %4$#o %f!\n", std::cout, "Knirp", 's', argv[0], 42u, 1.337); assert(format("Hallo %%du %1$s %s%c %s %u = %4$#x = %4$#X = %4$#o %f!\n", "Knirp", 's', argv[0], 42u, 1.337) == "Hallo %%du %1$s %s%c %s %u = %4$#x = %4$#X = %4$#o %f!\n"_format("Knirp", 's', argv[0], 42u, 1.337)); "-%20g-\n"_format_to(stdout, 0x1.8p0); "-%20.0a-\n"_format_to(stdout, 0.0); "-%#+20.0a-\n"_format_to(stdout, 1.0); "-%#+20.0e-\n"_format_to(stdout, 1.0); "-%#+20.0f-\n"_format_to(stdout, 1.0); "-%#+20.0g-\n"_format_to(stdout, 1.0); "-%#+20.3g-\n"_format_to(stdout, 1.0); "-%+20.0a-\n"_format_to(stdout, 1.0); "-%+20.0e-\n"_format_to(stdout, 1.0); "-%+20.0f-\n"_format_to(stdout, 1.0); "-%+20.3g-\n"_format_to(stdout, 1.0); "-%020.3e-\n"_format_to(stdout, 1.2); "-%020.3f-\n"_format_to(stdout, 1.2); "-%020.3g-\n"_format_to(stdout, 1.2); "-%020.3a-\n"_format_to(stdout, 1.2); "-%020.3a-\n"_format_to(stdout, -1.2); "-%20.3a-\n"_format_to(stdout, -1.2); "-%-20.3a-\n"_format_to(stdout, -1.2); "-%+020.3a-\n"_format_to(stdout, -1.2); "-%+020.3a-\n"_format_to(stdout, 1.2); "-% 020.3a-\n"_format_to(stdout, 1.2); "-%20.3e-%20.3e-\n"_format_to(stdout, 1.234567890123456789, 1.2); "-%p-\n"_format_to(stdout, nullptr); "-%p-\n"_format_to(stdout, argv); "-%p-\n"_format_to(stdout, argv[0]); "-%s-\n"_format_to(stdout, argv[0]); "-%#05x-\n"_format_to(stdout, 10u); "-%1$5.3s--%1$-5.3s-\n"_format_to(stdout, "Hallo"); "-%1$5.10s--%1$-5.10s-\n"_format_to(stdout, "Hallo"); "%1$d %1$-*3$d %1$d %2$d\n"_format_to(stdout, 1, 4, 10u); "%1$u %*d %1$u %d\n"_format_to(stdout, 5u, 2, 3); "%1$u %-*d %1$u %d\n"_format_to(stdout, 5u, 2, 3); "%1$u %0*d %1$u %d\n"_format_to(stdout, 5u, 2, 3); "%1$u %0-*d %1$u %d\n"_format_to(stdout, 5u, 2, 3); "%1$u %-0*d %1$u %d\n"_format_to(stdout, 5u, 2, 3); "%u % d % d %d\n"_format_to(stdout, 5u, 2, -2, 4); "%u %+d %+d %d\n"_format_to(stdout, 5u, 2, -2, 4); "%d %.0d %.d %0d\n"_format_to(stdout, 0, 0, 0, 1); std::cout << "Hallo %%du %1$s %s%c %s %u = %4$#x = %4$#X = %4$#o %f!\n"_format("Knirp", 's', argv[0], 42u, 1.337) << std::flush; "-%#09x-\n"_format_to(std::cout, 10u); #define TEST(fmt, ...) do{ char* plain; asprintf(&plain, fmt, __VA_ARGS__); assert(std::string_view{plain} == operator""_format()(__VA_ARGS__)); free(plain); }while(0) TEST("%d", 1); TEST("%1$d %1$-*3$d %1$d %2$d\n", 1, 2, 10u); TEST("%d %.0d %.d %0d\n", 0, 0, 0, 1); TEST("%1$a %1$A\n", 1.5); TEST("%1$a %1$A\n", 0.0/0.0); TEST("-%1$5.3s--%1$-5.3s-\n", "Hallo"); TEST("-%1$5.10s--%1$-5.10s-\n", "Hallo"); TEST("-%1$5c--%1$-5c-\n", 55); TEST("-%#09.3x-", 10u); TEST("-%#05x-\n", 10u); TEST("-%#05o-\n", 10u); TEST("-%.0o-\n", 0u); TEST("-%.0x-\n", 0u); TEST("-%.0X-\n", 0u); TEST("-%#.0o-\n", 0u); TEST("-%#.0x-\n", 0u); TEST("-%#.0X-\n", 0u); TEST("-%.0u-\n", 0u); TEST("-%.0i-\n", 0); TEST("-%.0d-\n", 0); TEST("-%020.3e-\n", -1.2); TEST("-%020.3f-\n", -1.2); TEST("-%020.3g-\n", -1.2); TEST("-%+020.3a-\n", 1.2); TEST("-% 020.3a-\n", 1.2); TEST("-% 20.3a-\n", 1.2); TEST("-%+20.3a-\n", 1.2); TEST("-% -20.3a-\n", 1.2); TEST("-%0.0a-\n", 0.0); TEST("-%#0.0e-\n", 0.0); TEST("-%0.0f-\n", 0.0); TEST("-%#020.3g-\n", -1.2); TEST("-%+-20.3a-\n", 1.2); TEST("-%#+20.3g-\n", 1.0); // these might fail, because %p format is implementation defined, although POSIX seems to define it as %#x TEST("-%p-\n", nullptr); TEST("-%p-\n", argv); TEST("-%p-\n", argv[0]); #undef TEST }