2
0

ext_vector_relational.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #include <glm/ext/vector_relational.hpp>
  2. #include <glm/ext/vector_float1.hpp>
  3. #include <glm/ext/vector_float1_precision.hpp>
  4. #include <glm/ext/vector_float2.hpp>
  5. #include <glm/ext/vector_float2_precision.hpp>
  6. #include <glm/ext/vector_float3.hpp>
  7. #include <glm/ext/vector_float3_precision.hpp>
  8. #include <glm/ext/vector_float4.hpp>
  9. #include <glm/ext/vector_float4_precision.hpp>
  10. #include <glm/ext/vector_double1.hpp>
  11. #include <glm/ext/vector_double1_precision.hpp>
  12. #include <glm/ext/vector_double2.hpp>
  13. #include <glm/ext/vector_double2_precision.hpp>
  14. #include <glm/ext/vector_double3.hpp>
  15. #include <glm/ext/vector_double3_precision.hpp>
  16. #include <glm/ext/vector_double4.hpp>
  17. #include <glm/ext/vector_double4_precision.hpp>
  18. #include <glm/ext/vector_ulp.hpp>
  19. template <typename vecType>
  20. static int test_equal()
  21. {
  22. typedef typename vecType::value_type valType;
  23. valType const A = static_cast<valType>(1.01f);
  24. valType const B = static_cast<valType>(1.02f);
  25. valType const Epsilon1 = static_cast<valType>(0.1f);
  26. valType const Epsilon2 = static_cast<valType>(0.001f);
  27. int Error = 0;
  28. Error += glm::all(glm::equal(vecType(A), vecType(B), Epsilon1)) ? 0 : 1;
  29. Error += glm::all(glm::equal(vecType(A), vecType(B), vecType(Epsilon1))) ? 0 : 1;
  30. Error += !glm::any(glm::equal(vecType(A), vecType(B), Epsilon2)) ? 0 : 1;
  31. Error += !glm::any(glm::equal(vecType(A), vecType(B), vecType(Epsilon2))) ? 0 : 1;
  32. return Error;
  33. }
  34. template <typename vecType>
  35. static int test_notEqual()
  36. {
  37. typedef typename vecType::value_type valType;
  38. valType const A = static_cast<valType>(1.01f);
  39. valType const B = static_cast<valType>(1.02f);
  40. valType const Epsilon1 = static_cast<valType>(0.1f);
  41. valType const Epsilon2 = static_cast<valType>(0.001f);
  42. int Error = 0;
  43. Error += glm::all(glm::notEqual(vecType(A), vecType(B), Epsilon2)) ? 0 : 1;
  44. Error += glm::all(glm::notEqual(vecType(A), vecType(B), vecType(Epsilon2))) ? 0 : 1;
  45. Error += !glm::any(glm::notEqual(vecType(A), vecType(B), Epsilon1)) ? 0 : 1;
  46. Error += !glm::any(glm::notEqual(vecType(A), vecType(B), vecType(Epsilon1))) ? 0 : 1;
  47. return Error;
  48. }
  49. template <typename T>
  50. static int test_equal_ulps()
  51. {
  52. typedef glm::vec<4, T, glm::defaultp> vec4;
  53. T const One(1);
  54. vec4 const Ones(1);
  55. int Error = 0;
  56. T const ULP1Plus = glm::nextFloat(One);
  57. Error += glm::all(glm::equal(Ones, vec4(ULP1Plus), 1)) ? 0 : 1;
  58. T const ULP2Plus = glm::nextFloat(ULP1Plus);
  59. Error += !glm::all(glm::equal(Ones, vec4(ULP2Plus), 1)) ? 0 : 1;
  60. T const ULP1Minus = glm::prevFloat(One);
  61. Error += glm::all(glm::equal(Ones, vec4(ULP1Minus), 1)) ? 0 : 1;
  62. T const ULP2Minus = glm::prevFloat(ULP1Minus);
  63. Error += !glm::all(glm::equal(Ones, vec4(ULP2Minus), 1)) ? 0 : 1;
  64. return Error;
  65. }
  66. template <typename T>
  67. static int test_notEqual_ulps()
  68. {
  69. typedef glm::vec<4, T, glm::defaultp> vec4;
  70. T const One(1);
  71. vec4 const Ones(1);
  72. int Error = 0;
  73. T const ULP1Plus = glm::nextFloat(One);
  74. Error += !glm::all(glm::notEqual(Ones, vec4(ULP1Plus), 1)) ? 0 : 1;
  75. T const ULP2Plus = glm::nextFloat(ULP1Plus);
  76. Error += glm::all(glm::notEqual(Ones, vec4(ULP2Plus), 1)) ? 0 : 1;
  77. T const ULP1Minus = glm::prevFloat(One);
  78. Error += !glm::all(glm::notEqual(Ones, vec4(ULP1Minus), 1)) ? 0 : 1;
  79. T const ULP2Minus = glm::prevFloat(ULP1Minus);
  80. Error += glm::all(glm::notEqual(Ones, vec4(ULP2Minus), 1)) ? 0 : 1;
  81. return Error;
  82. }
  83. int main()
  84. {
  85. int Error = 0;
  86. Error += test_equal_ulps<float>();
  87. Error += test_equal_ulps<double>();
  88. Error += test_notEqual_ulps<float>();
  89. Error += test_notEqual_ulps<double>();
  90. Error += test_equal<glm::vec1>();
  91. Error += test_equal<glm::lowp_vec1>();
  92. Error += test_equal<glm::mediump_vec1>();
  93. Error += test_equal<glm::highp_vec1>();
  94. Error += test_equal<glm::vec2>();
  95. Error += test_equal<glm::lowp_vec2>();
  96. Error += test_equal<glm::mediump_vec2>();
  97. Error += test_equal<glm::highp_vec2>();
  98. Error += test_equal<glm::vec3>();
  99. Error += test_equal<glm::lowp_vec3>();
  100. Error += test_equal<glm::mediump_vec3>();
  101. Error += test_equal<glm::highp_vec3>();
  102. Error += test_equal<glm::vec4>();
  103. Error += test_equal<glm::lowp_vec4>();
  104. Error += test_equal<glm::mediump_vec4>();
  105. Error += test_equal<glm::highp_vec4>();
  106. Error += test_equal<glm::dvec1>();
  107. Error += test_equal<glm::lowp_dvec1>();
  108. Error += test_equal<glm::mediump_dvec1>();
  109. Error += test_equal<glm::highp_dvec1>();
  110. Error += test_equal<glm::dvec2>();
  111. Error += test_equal<glm::lowp_dvec2>();
  112. Error += test_equal<glm::mediump_dvec2>();
  113. Error += test_equal<glm::highp_dvec2>();
  114. Error += test_equal<glm::dvec3>();
  115. Error += test_equal<glm::lowp_dvec3>();
  116. Error += test_equal<glm::mediump_dvec3>();
  117. Error += test_equal<glm::highp_dvec3>();
  118. Error += test_equal<glm::dvec4>();
  119. Error += test_equal<glm::lowp_dvec4>();
  120. Error += test_equal<glm::mediump_dvec4>();
  121. Error += test_equal<glm::highp_dvec4>();
  122. Error += test_notEqual<glm::vec1>();
  123. Error += test_notEqual<glm::lowp_vec1>();
  124. Error += test_notEqual<glm::mediump_vec1>();
  125. Error += test_notEqual<glm::highp_vec1>();
  126. Error += test_notEqual<glm::vec2>();
  127. Error += test_notEqual<glm::lowp_vec2>();
  128. Error += test_notEqual<glm::mediump_vec2>();
  129. Error += test_notEqual<glm::highp_vec2>();
  130. Error += test_notEqual<glm::vec3>();
  131. Error += test_notEqual<glm::lowp_vec3>();
  132. Error += test_notEqual<glm::mediump_vec3>();
  133. Error += test_notEqual<glm::highp_vec3>();
  134. Error += test_notEqual<glm::vec4>();
  135. Error += test_notEqual<glm::lowp_vec4>();
  136. Error += test_notEqual<glm::mediump_vec4>();
  137. Error += test_notEqual<glm::highp_vec4>();
  138. Error += test_notEqual<glm::dvec1>();
  139. Error += test_notEqual<glm::lowp_dvec1>();
  140. Error += test_notEqual<glm::mediump_dvec1>();
  141. Error += test_notEqual<glm::highp_dvec1>();
  142. Error += test_notEqual<glm::dvec2>();
  143. Error += test_notEqual<glm::lowp_dvec2>();
  144. Error += test_notEqual<glm::mediump_dvec2>();
  145. Error += test_notEqual<glm::highp_dvec2>();
  146. Error += test_notEqual<glm::dvec3>();
  147. Error += test_notEqual<glm::lowp_dvec3>();
  148. Error += test_notEqual<glm::mediump_dvec3>();
  149. Error += test_notEqual<glm::highp_dvec3>();
  150. Error += test_notEqual<glm::dvec4>();
  151. Error += test_notEqual<glm::lowp_dvec4>();
  152. Error += test_notEqual<glm::mediump_dvec4>();
  153. Error += test_notEqual<glm::highp_dvec4>();
  154. return Error;
  155. }