github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/test/execution/strings/range.go (about)

     1  // RUN: llgo -o %t %s
     2  // RUN: %t 2>&1 | FileCheck %s
     3  
     4  // CHECK: 0 46 1
     5  // CHECK-NEXT: 0 46
     6  // CHECK-NEXT: 0 169 1
     7  // CHECK-NEXT: 0 169
     8  // CHECK-NEXT: 0 8364 1
     9  // CHECK-NEXT: 0 8364
    10  // CHECK-NEXT: 0 66560 1
    11  // CHECK-NEXT: 0 66560
    12  // CHECK-NEXT: 0 83 1
    13  // CHECK-NEXT: 1 97 2
    14  // CHECK-NEXT: 2 108 3
    15  // CHECK-NEXT: 3 101 4
    16  // CHECK-NEXT: 4 32 5
    17  // CHECK-NEXT: 5 112 6
    18  // CHECK-NEXT: 6 114 7
    19  // CHECK-NEXT: 7 105 8
    20  // CHECK-NEXT: 8 99 9
    21  // CHECK-NEXT: 9 101 10
    22  // CHECK-NEXT: 10 58 11
    23  // CHECK-NEXT: 11 32 12
    24  // CHECK-NEXT: 12 8364 13
    25  // CHECK-NEXT: 15 48 14
    26  // CHECK-NEXT: 16 46 15
    27  // CHECK-NEXT: 17 57 16
    28  // CHECK-NEXT: 18 57 17
    29  // CHECK-NEXT: 0 83
    30  // CHECK-NEXT: 1 97
    31  // CHECK-NEXT: 2 108
    32  // CHECK-NEXT: 3 101
    33  // CHECK-NEXT: 4 32
    34  // CHECK-NEXT: 5 112
    35  // CHECK-NEXT: 6 114
    36  // CHECK-NEXT: 7 105
    37  // CHECK-NEXT: 8 99
    38  // CHECK-NEXT: 9 101
    39  // CHECK-NEXT: 10 58
    40  // CHECK-NEXT: 11 32
    41  // CHECK-NEXT: 12 8364
    42  // CHECK-NEXT: 15 48
    43  // CHECK-NEXT: 16 46
    44  // CHECK-NEXT: 17 57
    45  // CHECK-NEXT: 18 57
    46  
    47  package main
    48  
    49  func printchars(s string) {
    50  	var x int
    51  	for i, c := range s {
    52  		// test loop-carried dependence (x++), introducing a Phi node
    53  		x++
    54  		println(i, c, x)
    55  	}
    56  
    57  	// now test with plain old assignment
    58  	var i int
    59  	var c rune
    60  	for i, c = range s {
    61  		println(i, c)
    62  		if i == len(s)-1 {
    63  			// test multiple branches to loop header
    64  			continue
    65  		}
    66  	}
    67  }
    68  
    69  func main() {
    70  	// 1 bytes
    71  	printchars(".")
    72  
    73  	// 2 bytes
    74  	printchars("©")
    75  
    76  	// 3 bytes
    77  	printchars("€")
    78  
    79  	// 4 bytes
    80  	printchars("𐐀")
    81  
    82  	// mixed
    83  	printchars("Sale price: €0.99")
    84  
    85  	// TODO add test cases for invalid sequences
    86  }