github.com/jd-ly/tools@v0.5.7/go/ssa/interp/testdata/range.go (about)

     1  package main
     2  
     3  // Tests of range loops.
     4  
     5  import "fmt"
     6  
     7  // Range over string.
     8  func init() {
     9  	if x := len("Hello, 世界"); x != 13 { // bytes
    10  		panic(x)
    11  	}
    12  	var indices []int
    13  	var runes []rune
    14  	for i, r := range "Hello, 世界" {
    15  		runes = append(runes, r)
    16  		indices = append(indices, i)
    17  	}
    18  	if x := fmt.Sprint(runes); x != "[72 101 108 108 111 44 32 19990 30028]" {
    19  		panic(x)
    20  	}
    21  	if x := fmt.Sprint(indices); x != "[0 1 2 3 4 5 6 7 10]" {
    22  		panic(x)
    23  	}
    24  	s := ""
    25  	for _, r := range runes {
    26  		s += string(r)
    27  	}
    28  	if s != "Hello, 世界" {
    29  		panic(s)
    30  	}
    31  
    32  	var x int
    33  	for range "Hello, 世界" {
    34  		x++
    35  	}
    36  	if x != len(indices) {
    37  		panic(x)
    38  	}
    39  }
    40  
    41  // Regression test for range of pointer to named array type.
    42  func init() {
    43  	type intarr [3]int
    44  	ia := intarr{1, 2, 3}
    45  	var count int
    46  	for _, x := range &ia {
    47  		count += x
    48  	}
    49  	if count != 6 {
    50  		panic(count)
    51  	}
    52  }
    53  
    54  func main() {
    55  }