ext_scalar_relational.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include <glm/ext/scalar_relational.hpp>
  2. #include <glm/ext/scalar_integer.hpp>
  3. #include <glm/ext/scalar_ulp.hpp>
  4. #include <cmath>
  5. static int test_equal_epsilon()
  6. {
  7. # if GLM_CONFIG_CONSTEXP == GLM_ENABLE
  8. static_assert(glm::equal(1.01f, 1.02f, 0.1f), "GLM: Failed constexpr");
  9. static_assert(!glm::equal(1.01f, 1.02f, 0.001f), "GLM: Failed constexpr");
  10. # endif
  11. int Error = 0;
  12. Error += glm::equal(1.01f, 1.02f, 0.1f) ? 0 : 1;
  13. Error += !glm::equal(1.01f, 1.02f, 0.001f) ? 0 : 1;
  14. return Error;
  15. }
  16. static int test_notEqual_epsilon()
  17. {
  18. # if GLM_CONFIG_CONSTEXP == GLM_ENABLE
  19. static_assert(glm::notEqual(1.01f, 1.02f, 0.001f), "GLM: Failed constexpr");
  20. static_assert(!glm::notEqual(1.01f, 1.02f, 0.1f), "GLM: Failed constexpr");
  21. # endif
  22. int Error = 0;
  23. Error += glm::notEqual(1.01f, 1.02f, 0.001f) ? 0 : 1;
  24. Error += !glm::notEqual(1.01f, 1.02f, 0.1f) ? 0 : 1;
  25. return Error;
  26. }
  27. static int test_equal_ulps()
  28. {
  29. int Error = 0;
  30. float const ULP1Plus = glm::nextFloat(1.0f);
  31. Error += glm::equal(1.0f, ULP1Plus, 1) ? 0 : 1;
  32. float const ULP2Plus = glm::nextFloat(ULP1Plus);
  33. Error += !glm::equal(1.0f, ULP2Plus, 1) ? 0 : 1;
  34. float const ULP1Minus = glm::prevFloat(1.0f);
  35. Error += glm::equal(1.0f, ULP1Minus, 1) ? 0 : 1;
  36. float const ULP2Minus = glm::prevFloat(ULP1Minus);
  37. Error += !glm::equal(1.0f, ULP2Minus, 1) ? 0 : 1;
  38. return Error;
  39. }
  40. static int test_notEqual_ulps()
  41. {
  42. int Error = 0;
  43. float const ULP1Plus = glm::nextFloat(1.0f);
  44. Error += !glm::notEqual(1.0f, ULP1Plus, 1) ? 0 : 1;
  45. float const ULP2Plus = glm::nextFloat(ULP1Plus);
  46. Error += glm::notEqual(1.0f, ULP2Plus, 1) ? 0 : 1;
  47. float const ULP1Minus = glm::prevFloat(1.0f);
  48. Error += !glm::notEqual(1.0f, ULP1Minus, 1) ? 0 : 1;
  49. float const ULP2Minus = glm::prevFloat(ULP1Minus);
  50. Error += glm::notEqual(1.0f, ULP2Minus, 1) ? 0 : 1;
  51. return Error;
  52. }
  53. static int test_equal_sign()
  54. {
  55. int Error = 0;
  56. Error += !glm::equal(-0.0f, 0.0f, 2) ? 0 : 1;
  57. Error += !glm::equal(-0.0, 0.0, 2) ? 0 : 1;
  58. Error += !glm::equal(-1.0f, 2.0f, 2) ? 0 : 1;
  59. Error += !glm::equal(-1.0, 2.0, 2) ? 0 : 1;
  60. Error += !glm::equal(-0.00001f, 1.00000f, 2) ? 0 : 1;
  61. Error += !glm::equal(-0.00001, 1.00000, 2) ? 0 : 1;
  62. Error += !glm::equal(-1.0f, 1.0f, 2) ? 0 : 1;
  63. Error += !glm::equal(-1.0, 1.0, 2) ? 0 : 1;
  64. return Error;
  65. }
  66. int main()
  67. {
  68. int Error = 0;
  69. Error += test_equal_epsilon();
  70. Error += test_notEqual_epsilon();
  71. Error += test_equal_ulps();
  72. Error += test_notEqual_ulps();
  73. Error += test_equal_sign();
  74. return Error;
  75. }