diff options
| author | Franck Cuny <franck@fcuny.net> | 2022-06-19 15:11:59 -0700 |
|---|---|---|
| committer | Franck Cuny <franck@fcuny.net> | 2022-06-19 15:17:50 -0700 |
| commit | c4c1b7af140c1dd99c7b0520178eea02edd63e2b (patch) | |
| tree | ad5a5a0244b921d09cfedbd72be758a0c5f9e867 /tools/seqstat/sequence_test.go | |
| parent | feat(tools/numap): add a tool to report NUMA topology of a host (diff) | |
| download | infra-c4c1b7af140c1dd99c7b0520178eea02edd63e2b.tar.gz | |
feat(tools/seqstat): add a tool to report stats about a sequence
For example:
```
% echo 1 20 12 32 19 2 | ./seqstat -S
▁▅▃█▅▁
min: 1.000000
max: 32.000000
avg: 14.333333
p50: 19.000000
p90: 32.000000
p99: 32.000000
p999: 32.000000
ordered sequence: [1 2 12 19 20 32]
```
Change-Id: I9303bd7d0e964948143e77c868de8777cd7a9951
Reviewed-on: https://cl.fcuny.net/c/world/+/454
Tested-by: CI
Reviewed-by: Franck Cuny <franck@fcuny.net>
Diffstat (limited to 'tools/seqstat/sequence_test.go')
| -rw-r--r-- | tools/seqstat/sequence_test.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/seqstat/sequence_test.go b/tools/seqstat/sequence_test.go new file mode 100644 index 0000000..1299086 --- /dev/null +++ b/tools/seqstat/sequence_test.go @@ -0,0 +1,49 @@ +package main + +import ( + "testing" +) + +func TestHistogram(t *testing.T) { + cases := []struct { + in []float64 + histogram []rune + }{ + {[]float64{1, 2}, []rune{'▁', '█'}}, + {[]float64{1, 10, 4}, []rune{'▁', '█', '▃'}}, + {[]float64{1, 5, 22, 13, 53}, []rune{'▁', '▁', '▃', '▂', '█'}}, + } + + for _, c := range cases { + seq := newSequence(c.in) + if string(seq.histogram()) != string(c.histogram) { + t.Errorf("Not matching: got %q, want %q", string(seq.histogram()), string(c.histogram)) + } + } +} + +func TestStats(t *testing.T) { + cases := []struct { + in []float64 + min float64 + max float64 + p999 float64 + }{ + {[]float64{1, 10, 52, 12}, 1, 52, 52}, + } + + for _, c := range cases { + seq := newSequence(c.in) + if seq.min != c.min { + t.Errorf("Not matching: got min %f want %f", seq.min, c.min) + } + if seq.max != c.max { + if seq.max != c.max { + t.Errorf("Not matching: got max %f want %f", seq.max, c.max) + } + if seq.p999() != c.p999 { + t.Errorf("Not matching: got p999 %f want %f", seq.p999(), c.p999) + } + } + } +} |
