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  }