core: Fix handling of 0-padded floats with precision in #fmt
This commit is contained in:
parent
630c084da6
commit
7b862a5278
2 changed files with 9 additions and 4 deletions
|
|
@ -339,7 +339,7 @@ mod rt {
|
|||
s = " " + s;
|
||||
}
|
||||
}
|
||||
ret pad(cv, s, pad_signed);
|
||||
ret pad(cv, s, pad_float);
|
||||
}
|
||||
fn conv_poly<T>(cv: conv, v: T) -> str {
|
||||
let s = sys::log_str(v);
|
||||
|
|
@ -376,7 +376,7 @@ mod rt {
|
|||
count_implied { 1u }
|
||||
};
|
||||
}
|
||||
enum pad_mode { pad_signed, pad_unsigned, pad_nozero, }
|
||||
enum pad_mode { pad_signed, pad_unsigned, pad_nozero, pad_float }
|
||||
fn pad(cv: conv, &s: str, mode: pad_mode) -> str unsafe {
|
||||
let uwidth : uint = alt cv.width {
|
||||
count_implied { ret s; }
|
||||
|
|
@ -396,6 +396,7 @@ mod rt {
|
|||
let {might_zero_pad, signed} = alt mode {
|
||||
pad_nozero { {might_zero_pad:false, signed:false} }
|
||||
pad_signed { {might_zero_pad:true, signed:true } }
|
||||
pad_float { {might_zero_pad:true, signed:true } }
|
||||
pad_unsigned { {might_zero_pad:true, signed:false} }
|
||||
};
|
||||
fn have_precision(cv: conv) -> bool {
|
||||
|
|
@ -403,7 +404,7 @@ mod rt {
|
|||
}
|
||||
let zero_padding = {
|
||||
if might_zero_pad && have_flag(cv.flags, flag_left_zero_pad) &&
|
||||
!have_precision(cv) {
|
||||
(!have_precision(cv) || mode == pad_float) {
|
||||
padchar = '0';
|
||||
true
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ fn part5() {
|
|||
}
|
||||
fn part6() {
|
||||
// Precision overrides 0-padding
|
||||
// FIXME #2481: Recent gcc's report some of these as warnings
|
||||
|
||||
test(#fmt["%06.5d", 0], " 00000");
|
||||
test(#fmt["%06.5u", 0u], " 00000");
|
||||
|
|
@ -211,7 +212,10 @@ fn part6() {
|
|||
test(#fmt["%06.5x", 127u], " 0007f");
|
||||
test(#fmt["%06.5X", 127u], " 0007F");
|
||||
test(#fmt["%06.5o", 10u], " 00012");
|
||||
test(#fmt["%08.5f", 5.82], " 5.82000");
|
||||
|
||||
// Precision does not override zero-padding for floats
|
||||
test(#fmt["%08.5f", 5.82], "05.82000");
|
||||
|
||||
// Signed combinations
|
||||
|
||||
test(#fmt["% 5d", 1], " 1");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue