diff options
author | Ranjith Kumaran <ranjith@cygnus.com> | 2000-03-17 22:48:54 +0000 |
---|---|---|
committer | Ranjith Kumaran <ranjith@cygnus.com> | 2000-03-17 22:48:54 +0000 |
commit | 03261851a10dd2d6900a0a00a7515a0a46fb5d76 (patch) | |
tree | 7c22ac6cbbc99fd5cd1b5426853be8d4fd7bfcf1 /libgloss/testsuite/libgloss.all/misc.c | |
parent | fae4c299f14fc23e2829c8656992eba21f79242a (diff) | |
download | cygnal-03261851a10dd2d6900a0a00a7515a0a46fb5d76.tar.gz cygnal-03261851a10dd2d6900a0a00a7515a0a46fb5d76.tar.bz2 cygnal-03261851a10dd2d6900a0a00a7515a0a46fb5d76.zip |
20000317 sourceware import
Diffstat (limited to 'libgloss/testsuite/libgloss.all/misc.c')
-rw-r--r-- | libgloss/testsuite/libgloss.all/misc.c | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/libgloss/testsuite/libgloss.all/misc.c b/libgloss/testsuite/libgloss.all/misc.c new file mode 100644 index 000000000..5d082bc12 --- /dev/null +++ b/libgloss/testsuite/libgloss.all/misc.c @@ -0,0 +1,167 @@ +/* + * this file contains misc bug reports from WinBond. + */ +#include <stdio.h> +#include <math.h> + +#if unix +#define pass(x) printf("PASS: %s\n", x); +#define fail(x) printf("FAIL: %s\n", x); +#endif + +/* + The compare operation is error. Because the constant value 1.0 is + not correct. It seems compare with 0 in this statement. + +HP-UX native: + dist is 0.301 + PASS: float compare + *cp = be9a1cac, *cp1 = be9a1cac + PASS: float multiple 1 + PASS: float multiple 2 + 32760 / (-2) = -16380 + PASS: float divide 1 + 32760 / (-1) = -32760 + PASS: float divide 1 + These test only pass if the output matches: + Correct output is + 1.0 = 1.000000E+00, 0.3010 = 3.000000E-01, -1.0 = -1.000000E+0 + 1.0 = 1.000000E+00, 0.3010 = 3.010000E-01, -1.0 = -1.000000E+00 + These test only pass if the outut matches: + Correct output is + ans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00 + ans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00 + + +Test run on Oki: + + dist is 0 + PASS: float compare + *cp = be9a1cac, *cp1 = be9a1cac + PASS: float multiple 1 + PASS: float multiple 2 + 32760 / (-2) = -2147467268 + PASS: float divide 1 + 32760 / (-1) = 32760 + PASS: float divide 1 + These test only pass if the output matches: + Correct output is + 1.0 = 1.000000E+00, 0.3010 = 3.000000E-01, -1.0 = -1.000000E+0 + 1.0 = 1.586860E-318, 0.3010 = -1.009091E-303, -1.0 = 5.290504E-315 + These test only pass if the outut matches: + Correct output is + ans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00 + ans = 4.940656E-324, ans1 = -5.299809E-315, ans2 = 5.290504E-315 + + */ + +main() +{ + float dist = 0.3010; + + printf ("dist is %G\n", dist); + if ( dist < 1.0 ) { + pass ("float compare"); + } else { + fail ("float compare"); + } + + test_1(); + test_2(); + test_3(); + test_4(); + + fflush (stdout); +} + +/* + * *cp = be9a1cac, *cp1 = 00000000 + */ +test_1() +{ + float i, ans, ans1; + unsigned int *cp=&ans, *cp1=&ans1; + + i = 0.3010; + ans = (-1.0) * 0.3010 * 1.0; /* OK */ + ans1 = (-1.0) * i * 1.0; /* Disaster */ + printf ("*cp = %08x, *cp1 = %08x\n", *cp, *cp1); + + if (*cp != 0xbe9a1cac) { + fail ("float multiple 1"); + } else { + pass ("float multiple 1"); + } + + if (*cp1 != 0xbe9a1cac) { + fail ("float multiple 2"); + } else { + pass ("float multiple 2"); + } +} + +/* + Positive integer divide Negative integer may get interesting result. + For examples: + EX1: 32760 / (-2) = -2147467268 + */ +test_2() +{ + int value, i, j; + + i = 32760; + j = -2; + value = i / (j); + printf ("%d / (%d) = %d\n", i, j, value); + + if (value != -16380) { + fail ("float divide 1"); + } else { + pass ("float divide 1"); + } +} + +/* + EX2: 32760 / (-1) = 32760 + */ +test_3() +{ + int value, i, j; + + i = 32760; + j = -1; + value = i / (j); + printf ("%d / (%d) = %d\n", i, j, value); + + if (value != -32760) { + fail ("float divide 1"); + } else { + pass ("float divide 1"); + } +} + +/* + The data output format %e, %E, %g, %G in printf() can not work. + Please test the following example: + + 1.0 = 1.000000E+00, 0.3010 = 3.009999E-01, -1.0 = -1.000000E+00 + ans = 4.940656E-324, ans1 = -5.299809E-315, ans2 = 5.290504E-315 + */ +test_4() +{ + float ans, ans1, ans2; + + ans = 1.0; + ans1 = 0.3010; + ans2 = -1.0; + + printf ("These test only pass if the output matches:\nCorrect output is\n1.0 = 1.000000E+00, 0.3010 = 3.000000E-01, -1.0 = -1.000000E+0\n"); + printf ("1.0 = %E, 0.3010 = %E, -1.0 = %E\n", 1.0, 0.3010, -1.0); + printf ("These test only pass if the outut matches:\nCorrect output is\nans = 1.000000E+00, ans1 = 3.010000E-01, ans2 = -1.000000E+00\n"); + printf ("ans = %E, ans1 = %E, ans2 = %E\n", ans, ans1, ans2); +} + + + + + |