ext_scalar_relational.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. int main()
  54. {
  55. int Error = 0;
  56. Error += test_equal_epsilon();
  57. Error += test_notEqual_epsilon();
  58. Error += test_equal_ulps();
  59. Error += test_notEqual_ulps();
  60. return Error;
  61. }