gtc_epsilon.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <glm/gtc/epsilon.hpp>
  2. #include <glm/gtc/constants.hpp>
  3. #include <glm/vector_relational.hpp>
  4. int test_defined()
  5. {
  6. glm::epsilonEqual(glm::vec2(), glm::vec2(), glm::vec2());
  7. glm::epsilonEqual(glm::vec3(), glm::vec3(), glm::vec3());
  8. glm::epsilonEqual(glm::vec4(), glm::vec4(), glm::vec4());
  9. glm::epsilonNotEqual(glm::vec2(), glm::vec2(), glm::vec2());
  10. glm::epsilonNotEqual(glm::vec3(), glm::vec3(), glm::vec3());
  11. glm::epsilonNotEqual(glm::vec4(), glm::vec4(), glm::vec4());
  12. glm::epsilonEqual(glm::vec2(), glm::vec2(), 0.0f);
  13. glm::epsilonEqual(glm::vec3(), glm::vec3(), 0.0f);
  14. glm::epsilonEqual(glm::vec4(), glm::vec4(), 0.0f);
  15. glm::epsilonEqual(glm::quat(), glm::quat(), 0.0f);
  16. glm::epsilonNotEqual(glm::vec2(), glm::vec2(), 0.0f);
  17. glm::epsilonNotEqual(glm::vec3(), glm::vec3(), 0.0f);
  18. glm::epsilonNotEqual(glm::vec4(), glm::vec4(), 0.0f);
  19. glm::epsilonNotEqual(glm::quat(), glm::quat(), 0.0f);
  20. return 0;
  21. }
  22. template <typename T>
  23. int test_equal()
  24. {
  25. int Error(0);
  26. {
  27. T A = glm::epsilon<T>();
  28. T B = glm::epsilon<T>();
  29. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  30. }
  31. {
  32. T A(0);
  33. T B = static_cast<T>(0) + glm::epsilon<T>();
  34. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  35. }
  36. {
  37. T A(0);
  38. T B = static_cast<T>(0) - glm::epsilon<T>();
  39. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  40. }
  41. {
  42. T A = static_cast<T>(0) + glm::epsilon<T>();
  43. T B = static_cast<T>(0);
  44. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  45. }
  46. {
  47. T A = static_cast<T>(0) - glm::epsilon<T>();
  48. T B = static_cast<T>(0);
  49. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  50. }
  51. return Error;
  52. }
  53. int main()
  54. {
  55. int Error(0);
  56. Error += test_defined();
  57. Error += test_equal<float>();
  58. Error += test_equal<double>();
  59. return Error;
  60. }