721ce95315
* fix(all): introduce and use iox.CopyContext This PR is part of https://github.com/ooni/probe/issues/1417. In https://github.com/ooni/probe-cli/pull/379 we introduced a context aware wrapper for io.ReadAll (formerly ioutil.ReadAll). Here we introduce a context aware wrapper for io.Copy. * fix(humanize): more significant digits * fix: rename humanize files to follow the common pattern * fix aligment * fix test
30 lines
678 B
Go
30 lines
678 B
Go
// Package humanize is like dustin/go-humanize.
|
|
package humanize
|
|
|
|
import "fmt"
|
|
|
|
// SI is like dustin/go-humanize.SI but its implementation is
|
|
// specially tailored for printing download speeds.
|
|
func SI(value float64, unit string) string {
|
|
value, prefix := reduce(value)
|
|
return fmt.Sprintf("%6.2f %s%s", value, prefix, unit)
|
|
}
|
|
|
|
// reduce reduces value to a base value and a unit prefix. For
|
|
// example, reduce(1055) returns (1.055, "k").
|
|
func reduce(value float64) (float64, string) {
|
|
if value < 1e03 {
|
|
return value, " "
|
|
}
|
|
value /= 1e03
|
|
if value < 1e03 {
|
|
return value, "k"
|
|
}
|
|
value /= 1e03
|
|
if value < 1e03 {
|
|
return value, "M"
|
|
}
|
|
value /= 1e03
|
|
return value, "G"
|
|
}
|