github.com/freddyisaac/sicortex-golang@v0.0.0-20231019035217-e03519e66f60/test/reorder.go (about)

     1  // run
     2  
     3  // Copyright 2011 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.
     6  
     7  // Test reordering of assignments.
     8  
     9  package main
    10  
    11  import "fmt"
    12  
    13  func main() {
    14  	p1()
    15  	p2()
    16  	p3()
    17  	p4()
    18  	p5()
    19  	p6()
    20  	p7()
    21  	p8()
    22  }
    23  
    24  var gx []int
    25  
    26  func f(i int) int {
    27  	return gx[i]
    28  }
    29  
    30  func check(x []int, x0, x1, x2 int) {
    31  	if x[0] != x0 || x[1] != x1 || x[2] != x2 {
    32  		fmt.Printf("%v, want %d,%d,%d\n", x, x0, x1, x2)
    33  		panic("failed")
    34  	}
    35  }
    36  
    37  func check3(x, y, z, xx, yy, zz int) {
    38  	if x != xx || y != yy || z != zz {
    39  		fmt.Printf("%d,%d,%d, want %d,%d,%d\n", x, y, z, xx, yy, zz)
    40  		panic("failed")
    41  	}
    42  }
    43  
    44  func p1() {
    45  	x := []int{1, 2, 3}
    46  	i := 0
    47  	i, x[i] = 1, 100
    48  	_ = i
    49  	check(x, 100, 2, 3)
    50  }
    51  
    52  func p2() {
    53  	x := []int{1, 2, 3}
    54  	i := 0
    55  	x[i], i = 100, 1
    56  	_ = i
    57  	check(x, 100, 2, 3)
    58  }
    59  
    60  func p3() {
    61  	x := []int{1, 2, 3}
    62  	y := x
    63  	gx = x
    64  	x[1], y[0] = f(0), f(1)
    65  	check(x, 2, 1, 3)
    66  }
    67  
    68  func p4() {
    69  	x := []int{1, 2, 3}
    70  	y := x
    71  	gx = x
    72  	x[1], y[0] = gx[0], gx[1]
    73  	check(x, 2, 1, 3)
    74  }
    75  
    76  func p5() {
    77  	x := []int{1, 2, 3}
    78  	y := x
    79  	p := &x[0]
    80  	q := &x[1]
    81  	*p, *q = x[1], y[0]
    82  	check(x, 2, 1, 3)
    83  }
    84  
    85  func p6() {
    86  	x := 1
    87  	y := 2
    88  	z := 3
    89  	px := &x
    90  	py := &y
    91  	*px, *py = y, x
    92  	check3(x, y, z, 2, 1, 3)
    93  }
    94  
    95  func f1(x, y, z int) (xx, yy, zz int) {
    96  	return x, y, z
    97  }
    98  
    99  func f2() (x, y, z int) {
   100  	return f1(2, 1, 3)
   101  }
   102  
   103  func p7() {
   104  	x, y, z := f2()
   105  	check3(x, y, z, 2, 1, 3)
   106  }
   107  
   108  func p8() {
   109  	m := make(map[int]int)
   110  	m[0] = len(m)
   111  	if m[0] != 0 {
   112  		panic(m[0])
   113  	}
   114  }