ext_scalar_relational.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. static_assert(glm::equal(1.01f, 1.02f, 0.1f), "GLM: Failed constexpr");
  8. static_assert(!glm::equal(1.01f, 1.02f, 0.001f), "GLM: Failed constexpr");
  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. static_assert(glm::notEqual(1.01f, 1.02f, 0.001f), "GLM: Failed constexpr");
  17. static_assert(!glm::notEqual(1.01f, 1.02f, 0.1f), "GLM: Failed constexpr");
  18. int Error = 0;
  19. Error += glm::notEqual(1.01f, 1.02f, 0.001f) ? 0 : 1;
  20. Error += !glm::notEqual(1.01f, 1.02f, 0.1f) ? 0 : 1;
  21. return Error;
  22. }
  23. static int test_equal_ulps()
  24. {
  25. int Error = 0;
  26. float const ULP1Plus = glm::nextFloat(1.0f);
  27. Error += glm::equal(1.0f, ULP1Plus, 1) ? 0 : 1;
  28. float const ULP2Plus = glm::nextFloat(ULP1Plus);
  29. Error += !glm::equal(1.0f, ULP2Plus, 1) ? 0 : 1;
  30. float const ULP1Minus = glm::prevFloat(1.0f);
  31. Error += glm::equal(1.0f, ULP1Minus, 1) ? 0 : 1;
  32. float const ULP2Minus = glm::prevFloat(ULP1Minus);
  33. Error += !glm::equal(1.0f, ULP2Minus, 1) ? 0 : 1;
  34. return Error;
  35. }
  36. static int test_notEqual_ulps()
  37. {
  38. int Error = 0;
  39. float const ULP1Plus = glm::nextFloat(1.0f);
  40. Error += !glm::notEqual(1.0f, ULP1Plus, 1) ? 0 : 1;
  41. float const ULP2Plus = glm::nextFloat(ULP1Plus);
  42. Error += glm::notEqual(1.0f, ULP2Plus, 1) ? 0 : 1;
  43. float const ULP1Minus = glm::prevFloat(1.0f);
  44. Error += !glm::notEqual(1.0f, ULP1Minus, 1) ? 0 : 1;
  45. float const ULP2Minus = glm::prevFloat(ULP1Minus);
  46. Error += glm::notEqual(1.0f, ULP2Minus, 1) ? 0 : 1;
  47. return Error;
  48. }
  49. static int test_equal_sign()
  50. {
  51. int Error = 0;
  52. Error += !glm::equal(-0.0f, 0.0f, 2) ? 0 : 1;
  53. Error += !glm::equal(-0.0, 0.0, 2) ? 0 : 1;
  54. Error += !glm::equal(-1.0f, 2.0f, 2) ? 0 : 1;
  55. Error += !glm::equal(-1.0, 2.0, 2) ? 0 : 1;
  56. Error += !glm::equal(-0.00001f, 1.00000f, 2) ? 0 : 1;
  57. Error += !glm::equal(-0.00001, 1.00000, 2) ? 0 : 1;
  58. Error += !glm::equal(-1.0f, 1.0f, 2) ? 0 : 1;
  59. Error += !glm::equal(-1.0, 1.0, 2) ? 0 : 1;
  60. return Error;
  61. }
  62. int main()
  63. {
  64. int Error = 0;
  65. Error += test_equal_epsilon();
  66. Error += test_notEqual_epsilon();
  67. Error += test_equal_ulps();
  68. Error += test_notEqual_ulps();
  69. Error += test_equal_sign();
  70. return Error;
  71. }