gtc_epsilon.cpp 2.7 KB

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