3 // Copyright 2019 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
7 // This test makes sure the text output for bounds check failures is as expected.
18 // Testing with length 3 slices, arrays, and strings.
19 // A large (>1<<32) value is included to test 32-bit platforms.
20 var indexes = []uint64{0, 2, 3, 1<<32 - 1, 1<<64 - 1}
21 var slices = []uint64{0, 3, 4, 1<<32 - 1, 1<<64 - 1}
23 var w *tabwriter.Writer
26 w = tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.AlignRight)
34 for _, i := range indexes {
35 printPanic(fmt.Sprintf("slice[%d]", i), func() {
40 for _, i := range indexes {
41 printPanic(fmt.Sprintf("array[%d]", i), func() {
46 for _, i := range indexes {
47 printPanic(fmt.Sprintf("string[%d]", i), func() {
55 for _, i := range slices {
56 for _, j := range slices {
57 printPanic(fmt.Sprintf("slice[%d:%d]", i, j), func() {
63 for _, i := range slices {
64 for _, j := range slices {
65 printPanic(fmt.Sprintf("array[%d:%d]", i, j), func() {
71 for _, i := range slices {
72 for _, j := range slices {
73 printPanic(fmt.Sprintf("string[%d:%d]", i, j), func() {
82 for _, i := range slices {
83 for _, j := range slices {
84 for _, k := range slices {
85 printPanic(fmt.Sprintf("slice[%d:%d:%d]", i, j, k), func() {
92 for _, i := range slices {
93 for _, j := range slices {
94 for _, k := range slices {
95 printPanic(fmt.Sprintf("array[%d:%d:%d]", i, j, k), func() {
103 func printPanic(msg string, f func()) {
106 if e := recover(); e != nil {
107 res = e.(runtime.Error).Error()
109 fmt.Fprintf(w, "%s\t %s\n", msg, res)