github.com/mattn/go@v0.0.0-20171011075504-07f7db3ea99f/src/cmd/compile/internal/ssa/testdata/hist.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "bufio" 9 "fmt" 10 "io" 11 "os" 12 "strconv" 13 "strings" 14 ) 15 16 func ensure(n int, sl []int) []int { 17 for len(sl) <= n { 18 sl = append(sl, 0) 19 } 20 return sl 21 } 22 23 var cannedInput string = `1 24 1 25 1 26 1 27 2 28 2 29 2 30 4 31 4 32 8 33 ` 34 35 func main() { 36 hist := make([]int, 10) 37 var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A,cannedInput/A) 38 if len(os.Args) > 1 { 39 var err error 40 reader, err = os.Open(os.Args[1]) 41 if err != nil { 42 fmt.Fprintf(os.Stderr, "There was an error opening %s: %v\n", os.Args[1], err) 43 return 44 } 45 } 46 scanner := bufio.NewScanner(reader) 47 for scanner.Scan() { 48 s := scanner.Text() 49 i, err := strconv.ParseInt(s, 10, 64) 50 if err != nil { //gdb-dbg=(i) 51 fmt.Fprintf(os.Stderr, "There was an error: %v\n", err) 52 return 53 } 54 hist = ensure(int(i), hist) 55 hist[int(i)]++ 56 } 57 t := 0 58 n := 0 59 for i, a := range hist { 60 if a == 0 { 61 continue 62 } 63 t += i * a 64 n += a 65 fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t) 66 } 67 68 }