1
0
mirror of https://github.com/golang/go synced 2024-11-12 10:20:27 -07:00
go/test/ken/shift.go
Ian Lance Taylor 08df4dcf7d Storing an out of range constant into a variable should
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
2008-09-29 11:03:21 -07:00

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