|  | // 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") | 
|  | } | 
|  | } |