|  | // $G $F.go && $L $F.$A && ./$A.out | 
|  |  | 
|  | // 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. | 
|  |  | 
|  | 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(); | 
|  | } | 
|  | } | 
|  |  | 
|  | if !testit(false) { | 
|  | print("final val\n"); | 
|  | printit(); | 
|  | panic(); | 
|  | } | 
|  |  | 
|  | 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"); | 
|  | } | 
|  | } |