blob: 495056615cab43d0e97aefc7532efc10451c97bd [file] [log] [blame]
/* Copyright (C) 2003 Free Software Foundation.
Check that constant folding of built-in math functions doesn't
break anything and produces the expected results.
Written by Roger Sayle, 28th June 2003. */
/* { dg-do link } */
/* { dg-options "-O2" } */
extern void link_error(void);
extern double trunc(double);
extern double floor(double);
extern double ceil(double);
extern float truncf(float);
extern float floorf(float);
extern float ceilf(float);
extern long double truncl(long double);
extern long double floorl(long double);
extern long double ceill(long double);
void test()
{
if (trunc (0.0) != 0.0)
link_error ();
if (floor (0.0) != 0.0)
link_error ();
if (ceil (0.0) != 0.0)
link_error ();
if (trunc (6.0) != 6.0)
link_error ();
if (floor (6.0) != 6.0)
link_error ();
if (ceil (6.0) != 6.0)
link_error ();
if (trunc (-8.0) != -8.0)
link_error ();
if (floor (-8.0) != -8.0)
link_error ();
if (ceil (-8.0) != -8.0)
link_error ();
if (trunc (3.2) != 3.0)
link_error ();
if (floor (3.2) != 3.0)
link_error ();
if (ceil (3.2) != 4.0)
link_error ();
if (trunc (-2.8) != -2.0)
link_error ();
if (floor (-2.8) != -3.0)
link_error ();
if (ceil (-2.8) != -2.0)
link_error ();
if (trunc (0.01) != 0.0)
link_error ();
if (floor (0.01) != 0.0)
link_error ();
if (ceil (0.01) != 1.0)
link_error ();
if (trunc (-0.7) != 0.0)
link_error ();
if (floor (-0.7) != -1.0)
link_error ();
if (ceil (-0.7) != 0.0)
link_error ();
}
void testf()
{
if (truncf (0.0f) != 0.0f)
link_error ();
if (floorf (0.0f) != 0.0f)
link_error ();
if (ceilf (0.0f) != 0.0f)
link_error ();
if (truncf (6.0f) != 6.0f)
link_error ();
if (floorf (6.0f) != 6.0f)
link_error ();
if (ceilf (6.0f) != 6.0f)
link_error ();
if (truncf (-8.0f) != -8.0f)
link_error ();
if (floorf (-8.0f) != -8.0f)
link_error ();
if (ceilf (-8.0f) != -8.0f)
link_error ();
if (truncf (3.2f) != 3.0f)
link_error ();
if (floorf (3.2f) != 3.0f)
link_error ();
if (ceilf (3.2f) != 4.0f)
link_error ();
if (truncf (-2.8f) != -2.0f)
link_error ();
if (floorf (-2.8f) != -3.0f)
link_error ();
if (ceilf (-2.8f) != -2.0f)
link_error ();
if (truncf (0.01f) != 0.0f)
link_error ();
if (floorf (0.01f) != 0.0f)
link_error ();
if (ceilf (0.01f) != 1.0f)
link_error ();
if (truncf (-0.7f) != 0.0f)
link_error ();
if (floorf (-0.7f) != -1.0f)
link_error ();
if (ceilf (-0.7f) != 0.0f)
link_error ();
}
void testl()
{
if (truncl (0.0l) != 0.0l)
link_error ();
if (floorl (0.0l) != 0.0l)
link_error ();
if (ceill (0.0l) != 0.0l)
link_error ();
if (truncl (6.0l) != 6.0l)
link_error ();
if (floorl (6.0l) != 6.0l)
link_error ();
if (ceill (6.0l) != 6.0l)
link_error ();
if (truncl (-8.0l) != -8.0l)
link_error ();
if (floorl (-8.0l) != -8.0l)
link_error ();
if (ceill (-8.0l) != -8.0l)
link_error ();
if (truncl (3.2l) != 3.0l)
link_error ();
if (floorl (3.2l) != 3.0l)
link_error ();
if (ceill (3.2l) != 4.0l)
link_error ();
if (truncl (-2.8l) != -2.0l)
link_error ();
if (floorl (-2.8l) != -3.0l)
link_error ();
if (ceill (-2.8l) != -2.0l)
link_error ();
if (truncl (0.01l) != 0.0l)
link_error ();
if (floorl (0.01l) != 0.0l)
link_error ();
if (ceill (0.01l) != 1.0l)
link_error ();
if (truncl (-0.7l) != 0.0l)
link_error ();
if (floorl (-0.7l) != -1.0l)
link_error ();
if (ceill (-0.7l) != 0.0l)
link_error ();
}
int main()
{
test ();
testf ();
testl ();
return 0;
}