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