mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-23 23:10:04 +00:00
Test double formatting.
This commit is contained in:
parent
27b8ba06e8
commit
d73306bdce
@ -157,11 +157,14 @@ void fmt::Formatter::FormatDouble(
|
||||
T value, unsigned flags, int width, int precision, char type) {
|
||||
// Check type.
|
||||
switch (type) {
|
||||
case 0:
|
||||
type = 'g';
|
||||
break;
|
||||
case 'e': case 'E': case 'f': case 'F': case 'g': case 'G':
|
||||
break;
|
||||
default:
|
||||
// TODO: error
|
||||
break;
|
||||
throw FormatError(
|
||||
str(fmt::Format("unknown format code '{0}' for double") << type));
|
||||
}
|
||||
|
||||
// Build format string.
|
||||
@ -181,7 +184,7 @@ void fmt::Formatter::FormatDouble(
|
||||
}
|
||||
if (IsLongDouble<T>::VALUE)
|
||||
*format_ptr++ = 'L';
|
||||
*format_ptr++ = type ? type : 'g';
|
||||
*format_ptr++ = type;
|
||||
*format_ptr = '\0';
|
||||
|
||||
// Format using snprintf.
|
||||
|
@ -258,11 +258,19 @@ TEST(FormatterTest, Precision) {
|
||||
FormatError, "precision specifier requires floating-point argument");
|
||||
}
|
||||
|
||||
TEST(FormatterTest, Type) {
|
||||
TEST(FormatterTest, FormatInt) {
|
||||
EXPECT_THROW_MSG(Format("{0:v") << 42,
|
||||
FormatError, "unmatched '{' in format");
|
||||
EXPECT_THROW_MSG(Format("{0:v}") << 42,
|
||||
FormatError, "unknown format code 'v' for integer");
|
||||
EXPECT_THROW_MSG(Format("{0:c}") << 42,
|
||||
FormatError, "unknown format code 'c' for integer");
|
||||
EXPECT_THROW_MSG(Format("{0:e}") << 42,
|
||||
FormatError, "unknown format code 'e' for integer");
|
||||
EXPECT_THROW_MSG(Format("{0:f}") << 42,
|
||||
FormatError, "unknown format code 'f' for integer");
|
||||
EXPECT_THROW_MSG(Format("{0:g}") << 42,
|
||||
FormatError, "unknown format code 'g' for integer");
|
||||
}
|
||||
|
||||
TEST(FormatterTest, FormatDec) {
|
||||
@ -333,6 +341,40 @@ TEST(FormatterTest, FormatOct) {
|
||||
EXPECT_EQ(buffer, str(Format("{0:o}") << ULONG_MAX));
|
||||
}
|
||||
|
||||
TEST(FormatterTest, FormatDouble) {
|
||||
EXPECT_THROW_MSG(Format("{0:c}") << 1.2,
|
||||
FormatError, "unknown format code 'c' for double");
|
||||
EXPECT_THROW_MSG(Format("{0:d}") << 1.2,
|
||||
FormatError, "unknown format code 'd' for double");
|
||||
EXPECT_THROW_MSG(Format("{0:o}") << 1.2,
|
||||
FormatError, "unknown format code 'o' for double");
|
||||
EXPECT_THROW_MSG(Format("{0:x}") << 1.2,
|
||||
FormatError, "unknown format code 'x' for double");
|
||||
EXPECT_EQ("0", str(Format("{0:}") << 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:g}") << 392.65));
|
||||
EXPECT_EQ("392.65", str(Format("{0:G}") << 392.65));
|
||||
EXPECT_EQ("392.650000", str(Format("{0:f}") << 392.65));
|
||||
EXPECT_EQ("392.650000", str(Format("{0:F}") << 392.65));
|
||||
EXPECT_EQ("3.926500e+02", str(Format("{0:e}") << 392.65));
|
||||
EXPECT_EQ("3.926500E+02", str(Format("{0:E}") << 392.65));
|
||||
EXPECT_EQ("+0000392.6", str(Format("{0:+010.4g}") << 392.65));
|
||||
}
|
||||
|
||||
TEST(FormatterTest, FormatLongDouble) {
|
||||
EXPECT_EQ("0", str(Format("{0:}") << 0.0l));
|
||||
EXPECT_EQ("0.000000", str(Format("{0:f}") << 0.0l));
|
||||
EXPECT_EQ("392.65", str(Format("{0:}") << 392.65l));
|
||||
EXPECT_EQ("392.65", str(Format("{0:g}") << 392.65l));
|
||||
EXPECT_EQ("392.65", str(Format("{0:G}") << 392.65l));
|
||||
EXPECT_EQ("392.650000", str(Format("{0:f}") << 392.65l));
|
||||
EXPECT_EQ("392.650000", str(Format("{0:F}") << 392.65l));
|
||||
EXPECT_EQ("3.926500e+02", str(Format("{0:e}") << 392.65l));
|
||||
EXPECT_EQ("3.926500E+02", str(Format("{0:E}") << 392.65l));
|
||||
EXPECT_EQ("+0000392.6", str(Format("{0:+010.4g}") << 392.65l));
|
||||
}
|
||||
|
||||
TEST(FormatterTest, FormatChar) {
|
||||
EXPECT_EQ("a*b", str(Format("{0}{1}{2}") << 'a' << '*' << 'b'));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user