diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c b/gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c new file mode 100644 index 0000000..a39ab0c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/builtin-round-roundeven.c @@ -0,0 +1,36 @@ +/* { dg-do link } */ + +extern int link_error (int); + +#define TEST(FN, VALUE, RESULT) \ + if (__builtin_##FN (VALUE) != RESULT) link_error (__LINE__); + +int +main (void) +{ + TEST(roundeven, 0, 0); + TEST(roundeven, 0.5, 0); + TEST(roundeven, -0.5, 0); + TEST(roundeven, 6, 6); + TEST(roundeven, -8, -8); + TEST(roundeven, 2.5, 2); + TEST(roundeven, 3.5, 4); + TEST(roundeven, -1.5, -2); + TEST(roundeven, 3.499, 3); + TEST(roundeven, 3.501, 4); + + if (__builtin_copysign (1, __builtin_roundeven (-0.5)) != -1) + link_error (__LINE__); + if (__builtin_copysign (1, __builtin_roundeven (-0.0)) != -1) + link_error (__LINE__); + if (__builtin_copysign (-1, __builtin_roundeven (0.5)) != 1) + link_error (__LINE__); + if (__builtin_copysign (-1, __builtin_roundeven (0.0)) != 1) + link_error (__LINE__); + if (__builtin_copysign (1, __builtin_roundeven (-0.25)) != -1) + link_error (__LINE__); + if (__builtin_copysign (-1, __builtin_roundeven (0.25)) != 1) + link_error (__LINE__); + return 0; +} + |