ext_scalar_relational.cpp 2.0 KB

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