modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/ken/shift.go (about)

     1  // run
     2  
     3  // Copyright 2009 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Test shift.
     8  
     9  package main
    10  
    11  var	ians	[18]int;
    12  var	uans	[18]uint;
    13  var	pass	string;
    14  
    15  func
    16  testi(i int, t1,t2,t3 int) {
    17  	n := ((t1*3) + t2)*2 + t3;
    18  	if i != ians[n] {
    19  		print("itest ", t1,t2,t3,pass,
    20  			" is ", i, " sb ", ians[n], "\n");
    21  	}
    22  }
    23  
    24  func
    25  index(t1,t2,t3 int) int {
    26  	return ((t1*3) + t2)*2 + t3;
    27  }
    28  
    29  func
    30  testu(u uint, t1,t2,t3 int) {
    31  	n := index(t1,t2,t3);
    32  	if u != uans[n] {
    33  		print("utest ", t1,t2,t3,pass,
    34  			" is ", u, " sb ", uans[n], "\n");
    35  	}
    36  }
    37  
    38  func
    39  main() {
    40  	var i int;
    41  	var u,c uint;
    42  
    43  	/*
    44  	 * test constant evaluations
    45  	 */
    46  	pass = "con";	// constant part
    47  
    48  	testi( int(1234) <<    0, 0,0,0);
    49  	testi( int(1234) >>    0, 0,0,1);
    50  	testi( int(1234) <<    5, 0,1,0);
    51  	testi( int(1234) >>    5, 0,1,1);
    52  
    53  	testi(int(-1234) <<    0, 1,0,0);
    54  	testi(int(-1234) >>    0, 1,0,1);
    55  	testi(int(-1234) <<    5, 1,1,0);
    56  	testi(int(-1234) >>    5, 1,1,1);
    57  
    58  	testu(uint(5678) <<    0, 2,0,0);
    59  	testu(uint(5678) >>    0, 2,0,1);
    60  	testu(uint(5678) <<    5, 2,1,0);
    61  	testu(uint(5678) >>    5, 2,1,1);
    62  
    63  	/*
    64  	 * test variable evaluations
    65  	 */
    66  	pass = "var";	// variable part
    67  
    68  	for t1:=0; t1<3; t1++ {	// +int, -int, uint
    69  	for t2:=0; t2<3; t2++ {	// 0, +small, +large
    70  	for t3:=0; t3<2; t3++ {	// <<, >>
    71  		switch t1 {
    72  		case 0:	i =  1234;
    73  		case 1:	i = -1234;
    74  		case 2:	u =  5678;
    75  		}
    76  		switch t2 {
    77  		case 0:	c =    0;
    78  		case 1:	c =    5;
    79  		case 2:	c = 1025;
    80  		}
    81  		switch t3 {
    82  		case 0:	i <<= c; u <<= c;
    83  		case 1:	i >>= c; u >>= c;
    84  		}
    85  		switch t1 {
    86  		case 0:	testi(i,t1,t2,t3);
    87  		case 1:	testi(i,t1,t2,t3);
    88  		case 2:	testu(u,t1,t2,t3);
    89  		}
    90  	}
    91  	}
    92  	}
    93  }
    94  
    95  func
    96  init() {
    97  	/*
    98  	 * set the 'correct' answer
    99  	 */
   100  
   101  	ians[index(0,0,0)] =   1234;
   102  	ians[index(0,0,1)] =   1234;
   103  	ians[index(0,1,0)] =  39488;
   104  	ians[index(0,1,1)] =     38;
   105  	ians[index(0,2,0)] =      0;
   106  	ians[index(0,2,1)] =      0;
   107  
   108  	ians[index(1,0,0)] =  -1234;
   109  	ians[index(1,0,1)] =  -1234;
   110  	ians[index(1,1,0)] = -39488;
   111  	ians[index(1,1,1)] =    -39;
   112  	ians[index(1,2,0)] =      0;
   113  	ians[index(1,2,1)] =     -1;
   114  
   115  	uans[index(2,0,0)] =   5678;
   116  	uans[index(2,0,1)] =   5678;
   117  	uans[index(2,1,0)] = 181696;
   118  	uans[index(2,1,1)] =    177;
   119  	uans[index(2,2,0)] =      0;
   120  	uans[index(2,2,1)] =      0;
   121  }