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