  ./testdata/hist.go
55:	func test() {
57:		l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
58:		tinycall()                // this forces l etc to stack
57:		l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
59:		dx := l.end.x - l.begin.x //gdb-dbg=(l.begin.x,l.end.y)//gdb-opt=(l,dx/O,dy/O)
60:		dy := l.end.y - l.begin.y //gdb-opt=(dx,dy/O)
61:		sink = dx + dy            //gdb-opt=(dx,dy)
63:		hist := make([]int, 7)                                //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
64:		var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
65:		if len(os.Args) > 1 {
73:		scanner := bufio.NewScanner(reader)
63:		hist := make([]int, 7)                                //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
76:			i, err := strconv.ParseInt(s, 10, 64)
77:			if err != nil { //gdb-dbg=(i) //gdb-opt=(err,hist,i)
76:			i, err := strconv.ParseInt(s, 10, 64)
81:			hist = ensure(int(i), hist)
82:			hist[int(i)]++
81:			hist = ensure(int(i), hist)
74:		for scanner.Scan() { //gdb-opt=(scanner/A)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
91:			n += a
90:			t += i * a
92:			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)
91:			n += a
92:			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)
90:			t += i * a
92:			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)
90:			t += i * a
92:			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)
86:		for i, a := range hist {
90:			t += i * a
91:			n += a
92:			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)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
91:			n += a
90:			t += i * a
92:			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)
91:			n += a
92:			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)
90:			t += i * a
92:			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)
90:			t += i * a
92:			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)
86:		for i, a := range hist {
90:			t += i * a
91:			n += a
92:			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)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
91:			n += a
90:			t += i * a
92:			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)
91:			n += a
92:			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)
90:			t += i * a
92:			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)
90:			t += i * a
92:			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)
86:		for i, a := range hist {
90:			t += i * a
91:			n += a
92:			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)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
91:			n += a
90:			t += i * a
92:			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)
91:			n += a
92:			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)
90:			t += i * a
92:			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)
90:			t += i * a
92:			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)
86:		for i, a := range hist {
90:			t += i * a
91:			n += a
92:			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)
86:		for i, a := range hist {
87:			if a == 0 { //gdb-opt=(a,n,t)
86:		for i, a := range hist {
99:	}
