109 lines
2.4 KiB
Go
109 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestScaleSI(t *testing.T) {
|
|
for _, c := range []struct {
|
|
in float64
|
|
want string
|
|
}{
|
|
{0, "0.00"},
|
|
{999, "999.00"},
|
|
{1000, "1.00 k"},
|
|
{1234567, "1.23 M"},
|
|
{1e12, "1.00 T"},
|
|
{1e15, "1.00 P"},
|
|
} {
|
|
if got := scaleSI(c.in); got != c.want {
|
|
t.Errorf("scaleSI(%v) = %q, want %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Below a thousand a count is the count, since two decimals on a quantity that
|
|
// cannot have them read as precision that is not there.
|
|
func TestScaleCount(t *testing.T) {
|
|
for _, c := range []struct {
|
|
in uint64
|
|
want string
|
|
}{
|
|
{0, "0"},
|
|
{999, "999"},
|
|
{1000, "1.00 k"},
|
|
} {
|
|
if got := scaleCount(c.in); got != c.want {
|
|
t.Errorf("scaleCount(%d) = %q, want %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestScaleTime(t *testing.T) {
|
|
for _, c := range []struct {
|
|
in time.Duration
|
|
want string
|
|
}{
|
|
{1500 * time.Millisecond, "1s"},
|
|
{90 * time.Second, "1m30s"},
|
|
{90 * time.Minute, "1h30m"},
|
|
{36 * time.Hour, "1d12h"},
|
|
} {
|
|
if got := scaleTime(c.in); got != c.want {
|
|
t.Errorf("scaleTime(%v) = %q, want %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCommas(t *testing.T) {
|
|
for _, c := range []struct {
|
|
in uint64
|
|
want string
|
|
}{
|
|
{0, "0"},
|
|
{999, "999"},
|
|
{1000, "1,000"},
|
|
{1234567, "1,234,567"},
|
|
} {
|
|
if got := commas(c.in); got != c.want {
|
|
t.Errorf("commas(%d) = %q, want %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// The table only lines up if colour codes are not counted as width.
|
|
func TestPadIgnoresColour(t *testing.T) {
|
|
if got := visWidth(paint("ok", cGreen)); got != 2 {
|
|
t.Errorf("visWidth = %d, want 2", got)
|
|
}
|
|
if got := visWidth(pad(paint("ok", cGreen), 6, true)); got != 6 {
|
|
t.Errorf("padded width = %d, want 6", got)
|
|
}
|
|
}
|
|
|
|
// The break between the two halves of the row has to be the same width on the
|
|
// header, the rule and every value line, or the columns drift apart.
|
|
func TestStreamTableBreakAligns(t *testing.T) {
|
|
tbl := &streamTable{cols: intervalCols}
|
|
lines := tbl.headerLines()
|
|
row := tbl.emit(make([]string, len(intervalCols)))
|
|
widths := map[string]int{}
|
|
for _, l := range append(lines, row...) {
|
|
widths[l] = visWidth(l)
|
|
}
|
|
var first int
|
|
for _, w := range widths {
|
|
if first == 0 {
|
|
first = w
|
|
continue
|
|
}
|
|
if w != first {
|
|
t.Fatalf("header and value lines disagree on width: %v", widths)
|
|
}
|
|
}
|
|
if first != tbl.width() {
|
|
t.Errorf("lines are %d wide, width() reports %d", first, tbl.width())
|
|
}
|
|
}
|