89 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Oki bug report [OKI004](gcc005)
 | |
| 
 | |
|           The following computation is no work.
 | |
|         -1 / 1 => 1 (correct -1)
 | |
|         -1 % 2 => 1 (correct -1)
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| 
 | |
| main ()
 | |
| {
 | |
|         long l1, l2, l6;
 | |
|         auto long l3;
 | |
|         long oza1, oza2, oza;
 | |
| 
 | |
|         l1 = 1;
 | |
|         l2 = 2;
 | |
|         l3 = -1;
 | |
|         l6 = 6;
 | |
| 
 | |
|         /*** test 1 ***/
 | |
|         oza = ((l3 / ((l1)--)) | (l6 <= (l3 % l2)));
 | |
| 	printf ("test 1 has a result of %d.\n", oza);
 | |
| 	if (oza != -1)
 | |
| 	  fail ("divide test [OKI004]");
 | |
| 	else
 | |
| 	  pass ("divide test [OKI004]");
 | |
| 
 | |
|         l1 = 1;
 | |
|         /*** test 2 ***/
 | |
|         oza1 = (l3 / ((l1)--));
 | |
|         oza2 = (l6 <= (l3 % l2));
 | |
|         oza = oza1 | oza2;
 | |
| 	
 | |
| 	printf ("test 2 has a result of %d.\n", oza);
 | |
| 	if (oza != -1)
 | |
| 	  fail ("modulos test [OKI004]");
 | |
| 	else
 | |
| 	  pass ("modulos test [OKI004]");
 | |
| 	fflush (stdout);
 | |
| 
 | |
| 	test_1();
 | |
| }
 | |
| 
 | |
| /*
 | |
|       32760 / (1) = 32760
 | |
|       32760 / (-1) = 32760    -------> ERROR, same as you said.
 | |
|       32760 / (2) = 16380
 | |
|       32760 / (-2) = -2147467268 ----> ERROR
 | |
|       32760 / (3) = 10920
 | |
|       32760 / (-3) = -1431644845 ----> ERROR
 | |
|       32760 / (4) = 8190
 | |
|       32760 / (-4) = -8190
 | |
|  */
 | |
| test_1()
 | |
| {
 | |
|   int value, i, j;
 | |
| 
 | |
|   i = 32760;
 | |
|   j = 1;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   j = -1;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   
 | |
|   j = 2;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   j = -2;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   
 | |
|   j = 3;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   j = -3;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   
 | |
|   j = 4;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
|   j = -4;
 | |
|   value = i / (j);
 | |
|   printf ("%d / (%d) =  %d\n", i, j, value);
 | |
| }
 | |
| 
 |