newlib/libgloss/testsuite/libgloss.all/math.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);
}