diff options
Diffstat (limited to 'tools/seqstat/seqstat.go')
-rw-r--r-- | tools/seqstat/seqstat.go | 63 |
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 +} |