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