summaryrefslogtreecommitdiffstats
path: root/contrib/gdtoa/test/ddtest.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/gdtoa/test/ddtest.c')
-rw-r--r--contrib/gdtoa/test/ddtest.c58
1 files changed, 26 insertions, 32 deletions
diff --git a/contrib/gdtoa/test/ddtest.c b/contrib/gdtoa/test/ddtest.c
index aa32e92..6fc3251 100644
--- a/contrib/gdtoa/test/ddtest.c
+++ b/contrib/gdtoa/test/ddtest.c
@@ -26,14 +26,8 @@ THIS SOFTWARE.
****************************************************************/
-/* Please send bug reports to
- David M. Gay
- Bell Laboratories, Room 2C-463
- 600 Mountain Avenue
- Murray Hill, NJ 07974-0636
- U.S.A.
- dmg@bell-labs.com
- */
+/* Please send bug reports to David M. Gay (dmg at acm dot org,
+ * with " at " changed at "@" and " dot " changed to "."). */
/* Test program for g_ddfmt, strtoIdd, strtopdd, and strtordd.
*
@@ -73,22 +67,22 @@ dprint(char *what, double d)
#endif
{
char buf[32];
- ULong *L = (ULong*)&d;
+ union { double d; ULong L[2]; } u;
+ u.d = d;
g_dfmt(buf,&d,0,sizeof(buf));
- printf("%s = %s = #%lx %lx\n", what, buf, U L[_0], U L[_1]);
+ printf("%s = %s = #%lx %lx\n", what, buf, U u.L[_0], U u.L[_1]);
}
int
main(Void)
{
- ULong *L;
char *s, *s1, *se, *se1;
int dItry, i, j, r = 1, ndig = 0;
- double dd[2], ddI[4];
+ double ddI[4];
long LL[4];
+ union { double dd[2]; ULong L[4]; } u;
- L = (ULong*)&dd[0];
while( (s = fgets(ibuf, sizeof(ibuf), stdin)) !=0) {
while(*s <= ' ')
if (!*s++)
@@ -106,16 +100,16 @@ main(Void)
}
break; /* nan? */
case '#':
- LL[0] = L[_0];
- LL[1] = L[_1];
- LL[2] = L[2+_0];
- LL[3] = L[2+_1];
+ LL[0] = u.L[_0];
+ LL[1] = u.L[_1];
+ LL[2] = u.L[2+_0];
+ LL[3] = u.L[2+_1];
sscanf(s+1, "%lx %lx %lx %lx", &LL[0], &LL[1],
&LL[2], &LL[3]);
- L[_0] = LL[0];
- L[_1] = LL[1];
- L[2+_0] = LL[2];
- L[2+_1] = LL[3];
+ u.L[_0] = LL[0];
+ u.L[_1] = LL[1];
+ u.L[2+_0] = LL[2];
+ u.L[2+_1] = LL[3];
printf("\nInput: %s", ibuf);
printf(" --> f = #%lx %lx %lx %lx\n",
LL[0],LL[1],LL[2],LL[3]);
@@ -126,24 +120,24 @@ main(Void)
while(*s1 <= ' ' && *s1) s1++;
if (!*s1) {
dItry = 1;
- i = strtordd(ibuf, &se, r, dd);
+ i = strtordd(ibuf, &se, r, u.dd);
if (r == 1) {
j = strtopdd(ibuf, &se1, ddI);
- if (i != j || dd[0] != ddI[0]
- || dd[1] != ddI[1] || se != se1)
+ if (i != j || u.dd[0] != ddI[0]
+ || u.dd[1] != ddI[1] || se != se1)
printf("***strtopdd and strtordd disagree!!\n:");
}
printf("strtopdd consumes %d bytes and returns %d\n",
(int)(se-ibuf), i);
}
else {
- dd[0] = strtod(s, &se);
- dd[1] = strtod(se, &se);
+ u.dd[0] = strtod(s, &se);
+ u.dd[1] = strtod(se, &se);
}
fmt_test:
- dprint("dd[0]", dd[0]);
- dprint("dd[1]", dd[1]);
- se = g_ddfmt(obuf, dd, ndig, sizeof(obuf));
+ dprint("dd[0]", u.dd[0]);
+ dprint("dd[1]", u.dd[1]);
+ se = g_ddfmt(obuf, u.dd, ndig, sizeof(obuf));
printf("g_ddfmt(%d) gives %d bytes: \"%s\"\n\n",
ndig, (int)(se-obuf), se ? obuf : "<null>");
if (!dItry)
@@ -151,7 +145,7 @@ main(Void)
printf("strtoIdd returns %d,", strtoIdd(ibuf, &se, ddI,&ddI[2]));
printf(" consuming %d bytes.\n", (int)(se-ibuf));
if (ddI[0] == ddI[2] && ddI[1] == ddI[3]) {
- if (ddI[0] == dd[0] && ddI[1] == dd[1])
+ if (ddI[0] == u.dd[0] && ddI[1] == u.dd[1])
printf("ddI[0] == ddI[1] == strtopdd\n");
else
printf("ddI[0] == ddI[1] = #%lx %lx + %lx %lx\n= %.17g + %17.g\n",
@@ -170,9 +164,9 @@ main(Void)
U ((ULong*)ddI)[4+_0], U ((ULong*)ddI)[4+_1],
U ((ULong*)ddI)[6+_0], U ((ULong*)ddI)[6+_1],
ddI[2], ddI[3]);
- if (ddI[0] == dd[0] && ddI[1] == dd[1])
+ if (ddI[0] == u.dd[0] && ddI[1] == u.dd[1])
printf("ddI[0] == strtod\n");
- else if (ddI[2] == dd[0] && ddI[3] == dd[1])
+ else if (ddI[2] == u.dd[0] && ddI[3] == u.dd[1])
printf("ddI[1] == strtod\n");
else
printf("**** Both differ from strtopdd ****\n");
OpenPOWER on IntegriCloud