// $G $D/$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	ians	[18]int;
var	uans	[18]uint;
var	pass	string;

func
testi(i int, t1,t2,t3 int) {
	n := ((t1*3) + t2)*2 + t3;
	if i != ians[n] {
		print("itest ", t1,t2,t3,pass,
			" is ", i, " sb ", ians[n], "\n");
	}
}

func
index(t1,t2,t3 int) int {
	return ((t1*3) + t2)*2 + t3;
}

func
testu(u uint, t1,t2,t3 int) {
	n := index(t1,t2,t3);
	if u != uans[n] {
		print("utest ", t1,t2,t3,pass,
			" is ", u, " sb ", uans[n], "\n");
	}
}

func
main() {
	var i int;
	var u,c uint;

	/*
	 * test constant evaluations
	 */
	pass = "con";	// constant part

	testi( int(1234) <<    0, 0,0,0);
	testi( int(1234) >>    0, 0,0,1);
	testi( int(1234) <<    5, 0,1,0);
	testi( int(1234) >>    5, 0,1,1);

	testi(int(-1234) <<    0, 1,0,0);
	testi(int(-1234) >>    0, 1,0,1);
	testi(int(-1234) <<    5, 1,1,0);
	testi(int(-1234) >>    5, 1,1,1);

	testu(uint(5678) <<    0, 2,0,0);
	testu(uint(5678) >>    0, 2,0,1);
	testu(uint(5678) <<    5, 2,1,0);
	testu(uint(5678) >>    5, 2,1,1);

	/*
	 * test variable evaluations
	 */
	pass = "var";	// variable part

	for t1:=0; t1<3; t1++ {	// +int, -int, uint
	for t2:=0; t2<3; t2++ {	// 0, +small, +large
	for t3:=0; t3<2; t3++ {	// <<, >>
		switch t1 {
		case 0:	i =  1234;
		case 1:	i = -1234;
		case 2:	u =  5678;
		}
		switch t2 {
		case 0:	c =    0;
		case 1:	c =    5;
		case 2:	c = 1025;
		}
		switch t3 {
		case 0:	i <<= c; u <<= c;
		case 1:	i >>= c; u >>= c;
		}
		switch t1 {
		case 0:	testi(i,t1,t2,t3);
		case 1:	testi(i,t1,t2,t3);
		case 2:	testu(u,t1,t2,t3);
		}
	}
	}
	}
}

func
init() {
	/*
	 * set the 'correct' answer
	 */

	ians[index(0,0,0)] =   1234;
	ians[index(0,0,1)] =   1234;
	ians[index(0,1,0)] =  39488;
	ians[index(0,1,1)] =     38;
	ians[index(0,2,0)] =      0;
	ians[index(0,2,1)] =      0;

	ians[index(1,0,0)] =  -1234;
	ians[index(1,0,1)] =  -1234;
	ians[index(1,1,0)] = -39488;
	ians[index(1,1,1)] =    -39;
	ians[index(1,2,0)] =      0;
	ians[index(1,2,1)] =     -1;

	uans[index(2,0,0)] =   5678;
	uans[index(2,0,1)] =   5678;
	uans[index(2,1,0)] = 181696;
	uans[index(2,1,1)] =    177;
	uans[index(2,2,0)] =      0;
	uans[index(2,2,1)] =      0;
}
