// run | |
// Copyright 2011 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
// Test reordering of assignments. | |
package main | |
import "fmt" | |
func main() { | |
p1() | |
p2() | |
p3() | |
p4() | |
p5() | |
p6() | |
p7() | |
p8() | |
} | |
var gx []int | |
func f(i int) int { | |
return gx[i] | |
} | |
func check(x []int, x0, x1, x2 int) { | |
if x[0] != x0 || x[1] != x1 || x[2] != x2 { | |
fmt.Printf("%v, want %d,%d,%d\n", x, x0, x1, x2) | |
panic("failed") | |
} | |
} | |
func check3(x, y, z, xx, yy, zz int) { | |
if x != xx || y != yy || z != zz { | |
fmt.Printf("%d,%d,%d, want %d,%d,%d\n", x, y, z, xx, yy, zz) | |
panic("failed") | |
} | |
} | |
func p1() { | |
x := []int{1, 2, 3} | |
i := 0 | |
i, x[i] = 1, 100 | |
_ = i | |
check(x, 100, 2, 3) | |
} | |
func p2() { | |
x := []int{1, 2, 3} | |
i := 0 | |
x[i], i = 100, 1 | |
_ = i | |
check(x, 100, 2, 3) | |
} | |
func p3() { | |
x := []int{1, 2, 3} | |
y := x | |
gx = x | |
x[1], y[0] = f(0), f(1) | |
check(x, 2, 1, 3) | |
} | |
func p4() { | |
x := []int{1, 2, 3} | |
y := x | |
gx = x | |
x[1], y[0] = gx[0], gx[1] | |
check(x, 2, 1, 3) | |
} | |
func p5() { | |
x := []int{1, 2, 3} | |
y := x | |
p := &x[0] | |
q := &x[1] | |
*p, *q = x[1], y[0] | |
check(x, 2, 1, 3) | |
} | |
func p6() { | |
x := 1 | |
y := 2 | |
z := 3 | |
px := &x | |
py := &y | |
*px, *py = y, x | |
check3(x, y, z, 2, 1, 3) | |
} | |
func f1(x, y, z int) (xx, yy, zz int) { | |
return x, y, z | |
} | |
func f2() (x, y, z int) { | |
return f1(2, 1, 3) | |
} | |
func p7() { | |
x, y, z := f2() | |
check3(x, y, z, 2, 1, 3) | |
} | |
func p8() { | |
m := make(map[int]int) | |
m[0] = len(m) | |
if m[0] != 0 { | |
panic(m[0]) | |
} | |
} |