...

Source file src/golang.org/x/tools/go/ssa/interp/testdata/rangeoverint.go

Documentation: golang.org/x/tools/go/ssa/interp/testdata

     1  package main
     2  
     3  // Range over integers.
     4  
     5  // Currently requires 1.22 and GOEXPERIMENT=range.
     6  
     7  import "fmt"
     8  
     9  func f() {
    10  	s := "AB"
    11  	for range 5 {
    12  		s += s
    13  	}
    14  	if s != "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB" {
    15  		panic(s)
    16  	}
    17  
    18  	var t []int
    19  	for i := range 10 {
    20  		t = append(t, i)
    21  	}
    22  	if got, want := fmt.Sprint(t), "[0 1 2 3 4 5 6 7 8 9]"; got != want {
    23  		panic(got)
    24  	}
    25  
    26  	var u []uint
    27  	for i := range uint(3) {
    28  		u = append(u, i)
    29  	}
    30  	if got, want := fmt.Sprint(u), "[0 1 2]"; got != want {
    31  		panic(got)
    32  	}
    33  
    34  	for i := range 0 {
    35  		panic(i)
    36  	}
    37  
    38  	for i := range int(-1) {
    39  		panic(i)
    40  	}
    41  
    42  	for _, test := range []struct {
    43  		x    int
    44  		b, c bool
    45  		want string
    46  	}{
    47  		{-1, false, false, "[-123 -123]"},
    48  		{0, false, false, "[-123 -123]"},
    49  		{1, false, false, "[-123 0 333 333]"},
    50  		{2, false, false, "[-123 0 333 1 333 333]"},
    51  		{2, false, true, "[-123 0 222 1 222 222]"},
    52  		{2, true, false, "[-123 0 111 111]"},
    53  		{3, false, false, "[-123 0 333 1 333 2 333 333]"},
    54  	} {
    55  		got := fmt.Sprint(valueSequence(test.x, test.b, test.c))
    56  		if got != test.want {
    57  			panic(fmt.Sprint(test, got))
    58  		}
    59  	}
    60  }
    61  
    62  // valueSequence returns a sequence of the values of i.
    63  // b causes an early break and c causes a continue.
    64  func valueSequence(x int, b, c bool) []int {
    65  	var vals []int
    66  	var i int = -123
    67  	vals = append(vals, i)
    68  	for i = range x {
    69  		vals = append(vals, i)
    70  		if b {
    71  			i = 111
    72  			vals = append(vals, i)
    73  			break
    74  		} else if c {
    75  			i = 222
    76  			vals = append(vals, i)
    77  			continue
    78  		}
    79  		i = 333
    80  		vals = append(vals, i)
    81  	}
    82  	vals = append(vals, i)
    83  	return vals
    84  }
    85  
    86  func main() { f() }
    87  

View as plain text