mirror of
https://github.com/golang/go
synced 2024-09-05 07:54:46 +00:00
![Ian Lance Taylor](/assets/img/avatar_default.png)
ideally cause the compiler to give an error. Right now 6g warns about large shifts but does not give an error. This CL removes the out of range shift from shift.go, so that it will work with gccgo, and adds a test case in bugs/ to be fixed at a later date. R=ken,r DELTA=23 (9 added, 14 deleted, 0 changed) OCL=16085 CL=16088
125 lines
2.3 KiB
Go
125 lines
2.3 KiB
Go
// $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;
|
|
}
|