#include <format>
-#include "gtest.h"
+#include "gtest/gtest.h"
-TEST(StdFormatTest, Escaping) {
+TEST(std_format_test, escaping) {
using namespace std;
string s = format("{0}-{{", 8); // s == "8-{"
EXPECT_EQ(s, "8-{");
}
-TEST(StdFormatTest, Indexing) {
+TEST(std_format_test, indexing) {
using namespace std;
string s0 = format("{} to {}", "a", "b"); // OK: automatic indexing
string s1 = format("{1} to {0}", "a", "b"); // OK: manual indexing
EXPECT_THROW(string s3 = format("{} to {1}", "a", "b"), std::format_error);
}
-TEST(StdFormatTest, Alignment) {
+TEST(std_format_test, alignment) {
using namespace std;
char c = 120;
string s0 = format("{:6}", 42); // s0 == " 42"
EXPECT_EQ(s7, "true ");
}
-TEST(StdFormatTest, Float) {
+TEST(std_format_test, float) {
using namespace std;
double inf = numeric_limits<double>::infinity();
double nan = numeric_limits<double>::quiet_NaN();
EXPECT_EQ(s3, "nan +nan nan nan");
}
-TEST(StdFormatTest, Int) {
+TEST(std_format_test, int) {
using namespace std;
string s0 = format("{}", 42); // s0 == "42"
string s1 = format("{0:b} {0:d} {0:o} {0:x}", 42); // s1 == "101010 42 52 2a"
string s2 = format("{0:#x} {0:#X}", 42); // s2 == "0x2a 0X2A"
- string s3 = format("{:n}", 1234); // s3 == "1234" (depends on the locale)
+ string s3 = format("{:L}", 1234); // s3 == "1234" (depends on the locale)
EXPECT_EQ(s0, "42");
EXPECT_EQ(s1, "101010 42 52 2a");
EXPECT_EQ(s2, "0x2a 0X2A");
struct err {};
-TEST(StdFormatTest, Formatter) {
+TEST(std_format_test, formatter) {
std::string s0 = std::format("{}", 42); // OK: library-provided formatter
// std::string s1 = std::format("{}", L"foo"); // Ill-formed: disabled
// formatter
// Parses a width argument id in the format { <digit> }.
constexpr auto parse(format_parse_context& ctx) {
+ constexpr auto is_ascii_digit = [](const char c) {
+ return c >= '0' && c <= '9';
+ };
+
auto iter = ctx.begin();
// auto get_char = [&]() { return iter != ctx.end() ? *iter : 0; };
auto get_char = [&]() { return iter != ctx.end() ? *iter : '\0'; };
if (get_char() != '{') return iter;
++iter;
char c = get_char();
- if (!isdigit(c) || (++iter, get_char()) != '}')
+ if (!is_ascii_digit(c) || (++iter, get_char()) != '}')
throw format_error("invalid format");
- width_arg_id = c - '0';
+ width_arg_id = fmt::detail::to_unsigned(c - '0');
ctx.check_arg_id(width_arg_id);
return ++iter;
}
}
};
-TEST(StdFormatTest, Parsing) {
+TEST(std_format_test, parsing) {
std::string s = std::format("{0:{1}}", S{42}, 10); // s == " 42"
EXPECT_EQ(s, " 42");
}
}
};
-TEST(StdFormatTest, Int128) {
+TEST(std_format_test, int128) {
__int128_t n = 42;
auto s = std::format("{}", n);
EXPECT_EQ(s, "42");