diff --git a/decor/size_type.go b/decor/size_type.go index c5f3a53..e4b9740 100644 --- a/decor/size_type.go +++ b/decor/size_type.go @@ -5,7 +5,6 @@ "io" "math" "strconv" - "strings" ) //go:generate stringer -type=SizeB1024 -trimprefix=_i @@ -52,29 +51,12 @@ unit = _iTiB } - var b strings.Builder - b.WriteString(strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) + io.WriteString(st, strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) if st.Flag(' ') { - b.WriteString(" ") + io.WriteString(st, " ") } - b.WriteString(unit.String()) - - if w, ok := st.Width(); ok { - if l := b.Len(); l < w { - pad := strings.Repeat(" ", w-l) - if st.Flag('-') { - b.WriteString(pad) - } else { - tmp := b.String() - b.Reset() - b.WriteString(pad) - b.WriteString(tmp) - } - } - } - - io.WriteString(st, b.String()) + io.WriteString(st, unit.String()) } const ( @@ -118,27 +100,10 @@ unit = _TB } - var b strings.Builder - b.WriteString(strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) + io.WriteString(st, strconv.FormatFloat(float64(self)/float64(unit), 'f', prec, 64)) if st.Flag(' ') { - b.WriteString(" ") + io.WriteString(st, " ") } - b.WriteString(unit.String()) - - if w, ok := st.Width(); ok { - if l := b.Len(); l < w { - pad := strings.Repeat(" ", w-l) - if st.Flag('-') { - b.WriteString(pad) - } else { - tmp := b.String() - b.Reset() - b.WriteString(pad) - b.WriteString(tmp) - } - } - } - - io.WriteString(st, b.String()) + io.WriteString(st, unit.String()) } diff --git a/decor/size_type_test.go b/decor/size_type_test.go index 2bae4a6..8601e25 100644 --- a/decor/size_type_test.go +++ b/decor/size_type_test.go @@ -22,26 +22,6 @@ "verb % .1f": {12345678, "% .1f", "11.8 MiB"}, "verb % .2f": {12345678, "% .2f", "11.77 MiB"}, "verb % .3f": {12345678, "% .3f", "11.774 MiB"}, - - "verb %8.f": {12345678, "%8.f", " 12MiB"}, - "verb %8.0f": {12345678, "%8.0f", " 12MiB"}, - "verb %8.1f": {12345678, "%8.1f", " 11.8MiB"}, - "verb %8.2f": {12345678, "%8.2f", "11.77MiB"}, - "verb %8.3f": {12345678, "%8.3f", "11.774MiB"}, - - "verb % 8.f": {12345678, "% 8.f", " 12 MiB"}, - "verb % 8.0f": {12345678, "% 8.0f", " 12 MiB"}, - "verb % 8.1f": {12345678, "% 8.1f", "11.8 MiB"}, - - "verb %-8.f": {12345678, "%-8.f", "12MiB "}, - "verb %-8.0f": {12345678, "%-8.0f", "12MiB "}, - "verb %-8.1f": {12345678, "%-8.1f", "11.8MiB "}, - "verb %-8.2f": {12345678, "%8.2f", "11.77MiB"}, - "verb %-8.3f": {12345678, "%8.3f", "11.774MiB"}, - - "verb % -8.f": {12345678, "% -8.f", "12 MiB "}, - "verb % -8.0f": {12345678, "% -8.0f", "12 MiB "}, - "verb % -8.1f": {12345678, "% -8.1f", "11.8 MiB"}, "1000 %f": {1000, "%f", "1000.000000b"}, "1000 %d": {1000, "%d", "1000b"}, @@ -91,26 +71,6 @@ "verb % .2f": {12345678, "% .2f", "12.35 MB"}, "verb % .3f": {12345678, "% .3f", "12.346 MB"}, - "verb %8.f": {12345678, "%8.f", " 12MB"}, - "verb %8.0f": {12345678, "%8.0f", " 12MB"}, - "verb %8.1f": {12345678, "%8.1f", " 12.3MB"}, - "verb %8.2f": {12345678, "%8.2f", " 12.35MB"}, - "verb %8.3f": {12345678, "%8.3f", "12.346MB"}, - - "verb % 8.f": {12345678, "% 8.f", " 12 MB"}, - "verb % 8.0f": {12345678, "% 8.0f", " 12 MB"}, - "verb % 8.1f": {12345678, "% 8.1f", " 12.3 MB"}, - - "verb %-8.f": {12345678, "%-8.f", "12MB "}, - "verb %-8.0f": {12345678, "%-8.0f", "12MB "}, - "verb %-8.1f": {12345678, "%-8.1f", "12.3MB "}, - "verb %-8.2f": {12345678, "%8.2f", " 12.35MB"}, - "verb %-8.3f": {12345678, "%8.3f", "12.346MB"}, - - "verb % -8.f": {12345678, "% -8.f", "12 MB "}, - "verb % -8.0f": {12345678, "% -8.0f", "12 MB "}, - "verb % -8.1f": {12345678, "% -8.1f", "12.3 MB "}, - "1000 %f": {1000, "%f", "1.000000KB"}, "1000 %d": {1000, "%d", "1KB"}, "1000 %s": {1000, "%s", "1KB"}, diff --git a/decor/speed.go b/decor/speed.go index e90b0ff..2512e01 100644 --- a/decor/speed.go +++ b/decor/speed.go @@ -2,11 +2,33 @@ import ( "fmt" + "io" "math" "time" "github.com/VividCortex/ewma" ) + +const ( + perSecond = "/s" +) + +type speedType struct { + sizeT fmt.Formatter + perSecond string +} + +func (self *speedType) Format(st fmt.State, verb rune) { + self.sizeT.Format(st, verb) + io.WriteString(st, self.perSecond) +} + +func sizePerSecond(sizeT fmt.Formatter) fmt.Formatter { + return &speedType{ + sizeT: sizeT, + perSecond: perSecond, + } +} // EwmaSpeed exponential-weighted-moving-average based speed decorator. // Note that it's necessary to supply bar.Incr* methods with incremental @@ -42,9 +64,6 @@ wc.Init() if fmt == "" { fmt = "%.0f" - } - if unit > 0 { - fmt += "/s" } d := &movingAverageSpeed{ WC: wc, @@ -135,9 +154,6 @@ if fmt == "" { fmt = "%.0f" } - if unit > 0 { - fmt += "/s" - } d := &averageSpeed{ WC: wc, unit: unit, @@ -169,9 +185,9 @@ switch d.unit { case UnitKiB: - d.msg = fmt.Sprintf(d.fmt, SizeB1024(math.Round(speed))) + d.msg = fmt.Sprintf(d.fmt, sizePerSecond(SizeB1024(math.Round(speed)))) case UnitKB: - d.msg = fmt.Sprintf(d.fmt, SizeB1000(math.Round(speed))) + d.msg = fmt.Sprintf(d.fmt, sizePerSecond(SizeB1000(math.Round(speed)))) default: d.msg = fmt.Sprintf(d.fmt, speed) }