aboutsummaryrefslogtreecommitdiff
path: root/tools/seqstat/seqstat.go
diff options
context:
space:
mode:
Diffstat (limited to 'tools/seqstat/seqstat.go')
-rw-r--r--tools/seqstat/seqstat.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/tools/seqstat/seqstat.go b/tools/seqstat/seqstat.go
new file mode 100644
index 0000000..8709fa4
--- /dev/null
+++ b/tools/seqstat/seqstat.go
@@ -0,0 +1,63 @@
+package main
+
+import (
+ "bufio"
+ "flag"
+ "fmt"
+ "os"
+ "strconv"
+ "strings"
+)
+
+var (
+ stats = flag.Bool("S", false, "Display statistics about the sequence.")
+)
+
+func main() {
+ flag.Parse()
+
+ flag.Usage = func() {
+ fmt.Fprintf(os.Stderr, "usage: [-S] <INPUT>")
+ flag.PrintDefaults()
+ }
+
+ elements := argsToElements(flag.Args())
+
+ if len(elements) < 1 {
+ scanner := bufio.NewScanner(os.Stdin)
+ var e []string
+ for scanner.Scan() {
+ e = append(e, strings.Split(scanner.Text(), " ")...)
+ }
+ elements = argsToElements(e)
+ }
+
+ seq := newSequence(elements)
+
+ fmt.Println(string(seq.histogram()))
+
+ if *stats {
+ fmt.Printf("min: %f\n", seq.min)
+ fmt.Printf("max: %f\n", seq.max)
+ fmt.Printf("avg: %f\n", seq.avg())
+ fmt.Printf("p50: %f\n", seq.p50())
+ fmt.Printf("p90: %f\n", seq.p90())
+ fmt.Printf("p99: %f\n", seq.p99())
+ fmt.Printf("p999: %f\n", seq.p999())
+ fmt.Printf("ordered sequence: %v\n", seq.elementsSorted)
+ }
+}
+
+// converts the input to float64
+func argsToElements(args []string) []float64 {
+ elements := make([]float64, len(args))
+
+ for i, input := range args {
+ num, err := strconv.ParseFloat(input, 64)
+ if err != nil {
+ panic(err)
+ }
+ elements[i] = num
+ }
+ return elements
+}