| // run | |
| // Copyright 2009 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 simultaneous assignment. | |
| package main | |
| var a, b, c, d, e, f, g, h, i int | |
| func printit() { | |
| println(a, b, c, d, e, f, g, h, i) | |
| } | |
| func testit(permuteok bool) bool { | |
| if a+b+c+d+e+f+g+h+i != 45 { | |
| print("sum does not add to 45\n") | |
| printit() | |
| return false | |
| } | |
| return permuteok || | |
| a == 1 && | |
| b == 2 && | |
| c == 3 && | |
| d == 4 && | |
| e == 5 && | |
| f == 6 && | |
| g == 7 && | |
| h == 8 && | |
| i == 9 | |
| } | |
| func swap(x, y int) (u, v int) { | |
| return y, x | |
| } | |
| func main() { | |
| a = 1 | |
| b = 2 | |
| c = 3 | |
| d = 4 | |
| e = 5 | |
| f = 6 | |
| g = 7 | |
| h = 8 | |
| i = 9 | |
| if !testit(false) { | |
| panic("init val\n") | |
| } | |
| for z := 0; z < 100; z++ { | |
| a, b, c, d, e, f, g, h, i = b, c, d, a, i, e, f, g, h | |
| if !testit(z%20 != 19) { | |
| print("on ", z, "th iteration\n") | |
| printit() | |
| panic("fail") | |
| } | |
| } | |
| if !testit(false) { | |
| print("final val\n") | |
| printit() | |
| panic("fail") | |
| } | |
| a, b = swap(1, 2) | |
| if a != 2 || b != 1 { | |
| panic("bad swap") | |
| } | |
| a, b = swap(swap(a, b)) | |
| if a != 2 || b != 1 { | |
| panic("bad swap") | |
| } | |
| } |