|  | // 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 shift. | 
|  |  | 
|  | 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; | 
|  | } |