2020-02-14 11:08:59 +00:00
|
|
|
void printf (string fmt, ...) = #0;
|
|
|
|
# define M_PI 3.14159265358979323846
|
|
|
|
|
|
|
|
union {
|
|
|
|
double d;
|
|
|
|
int i[2];
|
|
|
|
} type_pun;
|
|
|
|
|
|
|
|
int
|
|
|
|
test_format ()
|
|
|
|
{
|
|
|
|
int fail = 0;
|
|
|
|
type_pun.d = M_PI;
|
|
|
|
printf ("%g %08x%08x\n", type_pun.d, type_pun.i[1], type_pun.i[0]);
|
2020-02-14 14:36:36 +00:00
|
|
|
// this will fail on big-endian systems
|
|
|
|
fail = type_pun.i[0] != 0x54442d18 || type_pun.i[1] != 0x400921fb;
|
|
|
|
return fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
test_constant ()
|
|
|
|
{
|
|
|
|
int fail = 0;
|
|
|
|
double a, b, c, d, e;
|
|
|
|
a = 1;
|
|
|
|
b = 2.0;
|
|
|
|
c = 3.2f;
|
|
|
|
d = 3.2d;
|
|
|
|
e = 3.2;
|
|
|
|
printf ("%.17g %.17g %.17g %.17g %.17g\n", a, b, c, d, e);
|
|
|
|
// this will fail on big-endian systems
|
|
|
|
fail |= c == d; // 3.2 is not exactly representable, so must be different
|
|
|
|
fail |= c == e; // 3.2 is not exactly representable, so must be different
|
|
|
|
fail |= d != e; // 3.2d and 3.2 are both double, so must be the same
|
|
|
|
return fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
test_ops ()
|
|
|
|
{
|
|
|
|
int fail = 0;
|
|
|
|
double a = 6.25, b = 2.375;
|
|
|
|
double c;
|
|
|
|
|
|
|
|
c = a + b;
|
|
|
|
fail |= c != 8.625;
|
|
|
|
c = a - b;
|
|
|
|
fail |= c != 3.875;
|
|
|
|
c = a * b;
|
|
|
|
fail |= c != 14.84375;
|
|
|
|
c = a / b;
|
|
|
|
fail |= c != 50d/19d;
|
|
|
|
c = a % b;
|
|
|
|
fail |= c != 1.5;
|
2020-02-14 11:08:59 +00:00
|
|
|
return fail;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
main ()
|
|
|
|
{
|
|
|
|
int fail = 0;
|
|
|
|
fail |= test_format ();
|
2020-02-14 14:36:36 +00:00
|
|
|
fail |= test_constant ();
|
|
|
|
fail |= test_ops ();
|
2020-02-14 11:08:59 +00:00
|
|
|
return fail;
|
|
|
|
}
|