Home | History | Annotate | Download | only in test
      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 }
    115