gtc_epsilon.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////
  4. // Created : 2012-09-19
  5. // Updated : 2012-09-19
  6. // Licence : This source is under MIT licence
  7. // File : test/gtc/epsilon.cpp
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////
  9. #include <glm/glm.hpp>
  10. #include <glm/gtc/half_float.hpp>
  11. #include <glm/gtc/epsilon.hpp>
  12. #include <glm/gtc/constants.hpp>
  13. int test_defined()
  14. {
  15. glm::epsilonEqual(glm::vec2(), glm::vec2(), glm::vec2());
  16. glm::epsilonEqual(glm::vec3(), glm::vec3(), glm::vec3());
  17. glm::epsilonEqual(glm::vec4(), glm::vec4(), glm::vec4());
  18. glm::epsilonNotEqual(glm::vec2(), glm::vec2(), glm::vec2());
  19. glm::epsilonNotEqual(glm::vec3(), glm::vec3(), glm::vec3());
  20. glm::epsilonNotEqual(glm::vec4(), glm::vec4(), glm::vec4());
  21. glm::epsilonEqual(glm::vec2(), glm::vec2(), 0.0f);
  22. glm::epsilonEqual(glm::vec3(), glm::vec3(), 0.0f);
  23. glm::epsilonEqual(glm::vec4(), glm::vec4(), 0.0f);
  24. glm::epsilonEqual(glm::quat(), glm::quat(), 0.0f);
  25. glm::epsilonNotEqual(glm::vec2(), glm::vec2(), 0.0f);
  26. glm::epsilonNotEqual(glm::vec3(), glm::vec3(), 0.0f);
  27. glm::epsilonNotEqual(glm::vec4(), glm::vec4(), 0.0f);
  28. glm::epsilonNotEqual(glm::quat(), glm::quat(), 0.0f);
  29. return 0;
  30. }
  31. template <typename T>
  32. int test_equal()
  33. {
  34. int Error(0);
  35. {
  36. T A = glm::epsilon<T>();
  37. T B = glm::epsilon<T>();
  38. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  39. }
  40. {
  41. T A(0);
  42. T B = T(0) + glm::epsilon<T>();
  43. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  44. }
  45. {
  46. T A(0);
  47. T B = T(0) - glm::epsilon<T>();
  48. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  49. }
  50. {
  51. T A = T(0) + glm::epsilon<T>();
  52. T B = T(0);
  53. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  54. }
  55. {
  56. T A = T(0) - glm::epsilon<T>();
  57. T B = T(0);
  58. Error += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;
  59. }
  60. return Error;
  61. }
  62. int main()
  63. {
  64. int Error(0);
  65. Error += test_defined();
  66. Error += test_equal<glm::half>();
  67. Error += test_equal<float>();
  68. Error += test_equal<double>();
  69. return Error;
  70. }