/src/netbsd/src/gnu/dist/gcc4/gcc/testsuite/gcc.dg/torture/builtin-rounding-1.c

https://bitbucket.org/killerpenguinassassins/open_distrib_devel · C · 106 lines · 83 code · 16 blank · 7 comment · 6 complexity · 189c5aaac352781bacb51ee2e2ae3f89 MD5 · raw file

  1. /* Copyright (C) 2004 Free Software Foundation.
  2. Check that constant folding of the rounding math functions doesn't
  3. break anything and produces the expected results.
  4. Written by Kaveh Ghazi, 2004-04-29. */
  5. /* { dg-do link } */
  6. #define PROTOTYPE(FN) \
  7. PROTOTYPE_LINK_ERROR(FN) \
  8. extern double FN (double); \
  9. extern float FN##f (float); \
  10. extern long double FN##l (long double);
  11. #define PROTOTYPE_RET(FN, RET) \
  12. PROTOTYPE_LINK_ERROR(FN) \
  13. extern RET FN (double); \
  14. extern RET FN##f (float); \
  15. extern RET FN##l (long double);
  16. #define PROTOTYPE_LINK_ERROR(FN) \
  17. extern void link_error_##FN(void); \
  18. extern void link_error_##FN##f(void); \
  19. extern void link_error_##FN##l(void);
  20. #define TEST(FN, VALUE, RESULT) \
  21. if (FN (VALUE) != RESULT) link_error_##FN(); \
  22. if (FN##f (VALUE) != RESULT) link_error_##FN##f(); \
  23. if (FN##l (VALUE) != RESULT) link_error_##FN##l(); \
  24. PROTOTYPE (trunc);
  25. PROTOTYPE (floor);
  26. PROTOTYPE (ceil);
  27. PROTOTYPE (round);
  28. PROTOTYPE_RET (lround, long);
  29. PROTOTYPE_RET (llround, long long);
  30. int
  31. main (void)
  32. {
  33. TEST(trunc, 0, 0);
  34. TEST(floor, 0, 0);
  35. TEST(ceil, 0, 0);
  36. TEST(round, 0, 0);
  37. TEST(lround, 0, 0);
  38. TEST(llround, 0, 0);
  39. TEST(trunc, 6, 6);
  40. TEST(floor, 6, 6);
  41. TEST(ceil, 6, 6);
  42. TEST(round, 6, 6);
  43. TEST(lround, 6, 6);
  44. TEST(llround, 6, 6);
  45. TEST(trunc, -8, -8);
  46. TEST(floor, -8, -8);
  47. TEST(ceil, -8, -8);
  48. TEST(round, -8, -8);
  49. TEST(lround, -8, -8);
  50. TEST(llround, -8, -8);
  51. TEST(trunc, 3.2, 3);
  52. TEST(floor, 3.2, 3);
  53. TEST(ceil, 3.2, 4);
  54. TEST(round, 3.2, 3);
  55. TEST(lround, 3.2, 3);
  56. TEST(llround, 3.2, 3);
  57. TEST(trunc, -2.8, -2);
  58. TEST(floor, -2.8, -3);
  59. TEST(ceil, -2.8, -2);
  60. TEST(round, -2.8, -3);
  61. TEST(lround, -2.8, -3);
  62. TEST(llround, -2.8, -3);
  63. TEST(trunc, 0.01, 0);
  64. TEST(floor, 0.01, 0);
  65. TEST(ceil, 0.01, 1);
  66. TEST(round, 0.01, 0);
  67. TEST(lround, 0.01, 0);
  68. TEST(llround, 0.01, 0);
  69. TEST(trunc, -0.7, 0);
  70. TEST(floor, -0.7, -1);
  71. TEST(ceil, -0.7, 0);
  72. TEST(round, -0.7, -1);
  73. TEST(lround, -0.7, -1);
  74. TEST(llround, -0.7, -1);
  75. TEST(trunc, 2.5, 2);
  76. TEST(floor, 2.5, 2);
  77. TEST(ceil, 2.5, 3);
  78. TEST(round, 2.5, 3);
  79. TEST(lround, 2.5, 3);
  80. TEST(llround, 2.5, 3);
  81. TEST(trunc, -1.5, -1);
  82. TEST(floor, -1.5, -2);
  83. TEST(ceil, -1.5, -1);
  84. TEST(round, -1.5, -2);
  85. TEST(lround, -1.5, -2);
  86. TEST(llround, -1.5, -2);
  87. return 0;
  88. }