mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-26 09:28:21 +00:00
Add support for hexadecimal floating point format specifiers a and A.
This commit is contained in:
parent
546b62e74f
commit
03776dd988
16
format.cc
16
format.cc
@ -393,7 +393,7 @@ void fmt::BasicWriter<Char>::FormatDouble(
|
|||||||
case 0:
|
case 0:
|
||||||
type = 'g';
|
type = 'g';
|
||||||
break;
|
break;
|
||||||
case 'e': case 'f': case 'g':
|
case 'e': case 'f': case 'g': case 'a':
|
||||||
break;
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@ -401,7 +401,7 @@ void fmt::BasicWriter<Char>::FormatDouble(
|
|||||||
type = 'f';
|
type = 'f';
|
||||||
#endif
|
#endif
|
||||||
// Fall through.
|
// Fall through.
|
||||||
case 'E': case 'G':
|
case 'E': case 'G': case 'A':
|
||||||
upper = true;
|
upper = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -707,17 +707,11 @@ void fmt::BasicWriter<Char>::PrintfParser::Format(
|
|||||||
spec.width_ = 0;
|
spec.width_ = 0;
|
||||||
ParseFlags(spec, s, *arg);
|
ParseFlags(spec, s, *arg);
|
||||||
|
|
||||||
/*
|
|
||||||
if (*s == '#') {
|
|
||||||
if (arg.type > LAST_NUMERIC_TYPE)
|
|
||||||
ReportError(s, "format specifier '#' requires numeric argument");
|
|
||||||
spec.flags_ |= HASH_FLAG;
|
|
||||||
++s;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// Parse width and zero flag.
|
// Parse width and zero flag.
|
||||||
if (*s < '0' || *s > '9')
|
if (*s < '0' || *s > '9') {
|
||||||
|
// TODO: parse '*' width
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
spec.width_ = internal::ParseNonnegativeInt(s, error);
|
spec.width_ = internal::ParseNonnegativeInt(s, error);
|
||||||
}
|
}
|
||||||
// Fall through.
|
// Fall through.
|
||||||
|
@ -1201,7 +1201,7 @@ TEST(FormatterTest, FormatFloat) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(FormatterTest, FormatDouble) {
|
TEST(FormatterTest, FormatDouble) {
|
||||||
CheckUnknownTypes(1.2, "eEfFgG", "double");
|
CheckUnknownTypes(1.2, "eEfFgGaA", "double");
|
||||||
EXPECT_EQ("0", str(Format("{0:}") << 0.0));
|
EXPECT_EQ("0", str(Format("{0:}") << 0.0));
|
||||||
EXPECT_EQ("0.000000", str(Format("{0:f}") << 0.0));
|
EXPECT_EQ("0.000000", str(Format("{0:f}") << 0.0));
|
||||||
EXPECT_EQ("392.65", str(Format("{0:}") << 392.65));
|
EXPECT_EQ("392.65", str(Format("{0:}") << 392.65));
|
||||||
@ -1215,6 +1215,8 @@ TEST(FormatterTest, FormatDouble) {
|
|||||||
SPrintf(buffer, "%E", 392.65);
|
SPrintf(buffer, "%E", 392.65);
|
||||||
EXPECT_EQ(buffer, str(Format("{0:E}") << 392.65));
|
EXPECT_EQ(buffer, str(Format("{0:E}") << 392.65));
|
||||||
EXPECT_EQ("+0000392.6", str(Format("{0:+010.4g}") << 392.65));
|
EXPECT_EQ("+0000392.6", str(Format("{0:+010.4g}") << 392.65));
|
||||||
|
EXPECT_EQ("-0x1.5p+5", str(Format("{:a}") << -42.0));
|
||||||
|
EXPECT_EQ("-0X1.5P+5", str(Format("{:A}") << -42.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(FormatterTest, FormatNaN) {
|
TEST(FormatterTest, FormatNaN) {
|
||||||
|
@ -210,9 +210,8 @@ TEST(PrintfTest, HashFlag) {
|
|||||||
EXPECT_PRINTF("-42.0000", "%#g", -42.0);
|
EXPECT_PRINTF("-42.0000", "%#g", -42.0);
|
||||||
EXPECT_PRINTF("-42.0000", "%#G", -42.0);
|
EXPECT_PRINTF("-42.0000", "%#G", -42.0);
|
||||||
|
|
||||||
// TODO
|
EXPECT_PRINTF("0x1.p+4", "%#a", 16.0);
|
||||||
//EXPECT_PRINTF("-0x1.5p+5", "%#a", -42.0);
|
EXPECT_PRINTF("0X1.P+4", "%#A", 16.0);
|
||||||
//EXPECT_PRINTF("-0x1.5A+5", "%#A", -42.0);
|
|
||||||
|
|
||||||
// '#' flag is ignored for non-numeric types.
|
// '#' flag is ignored for non-numeric types.
|
||||||
EXPECT_PRINTF("x", "%#c", 'x');
|
EXPECT_PRINTF("x", "%#c", 'x');
|
||||||
|
Loading…
Reference in New Issue
Block a user