gtx_component_wise.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #define GLM_ENABLE_EXPERIMENTAL
  2. #include <glm/gtx/component_wise.hpp>
  3. #include <glm/gtc/type_precision.hpp>
  4. #include <glm/gtc/epsilon.hpp>
  5. #include <glm/gtc/constants.hpp>
  6. #include <glm/ext/scalar_relational.hpp>
  7. #include <glm/ext/scalar_constants.hpp>
  8. #include <limits>
  9. namespace compNormalize
  10. {
  11. static int run()
  12. {
  13. int Error(0);
  14. {
  15. glm::vec4 const A = glm::compNormalize<float>(glm::u8vec4(0, 127, 128, 255));
  16. Error += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;
  17. Error += A.y < 0.5f ? 0 : 1;
  18. Error += A.z > 0.5f ? 0 : 1;
  19. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  20. }
  21. {
  22. glm::vec4 const A = glm::compNormalize<float>(glm::i8vec4(-128, -1, 0, 127));
  23. Error += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;
  24. Error += A.y < 0.0f ? 0 : 1;
  25. Error += A.z > 0.0f ? 0 : 1;
  26. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  27. }
  28. {
  29. glm::vec4 const A = glm::compNormalize<float>(glm::u16vec4(
  30. std::numeric_limits<glm::u16>::min(),
  31. (std::numeric_limits<glm::u16>::max() >> 1) + 0,
  32. (std::numeric_limits<glm::u16>::max() >> 1) + 1,
  33. std::numeric_limits<glm::u16>::max()));
  34. Error += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;
  35. Error += A.y < 0.5f ? 0 : 1;
  36. Error += A.z > 0.5f ? 0 : 1;
  37. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  38. }
  39. {
  40. glm::vec4 const A = glm::compNormalize<float>(glm::i16vec4(
  41. std::numeric_limits<glm::i16>::min(),
  42. static_cast<glm::i16>(-1),
  43. static_cast<glm::i16>(0),
  44. std::numeric_limits<glm::i16>::max()));
  45. Error += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;
  46. Error += A.y < 0.0f ? 0 : 1;
  47. Error += A.z > 0.0f ? 0 : 1;
  48. Error += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  49. }
  50. return Error;
  51. }
  52. }//namespace compNormalize
  53. namespace compScale
  54. {
  55. static int run()
  56. {
  57. int Error(0);
  58. {
  59. glm::u8vec4 const A = glm::compScale<glm::u8>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));
  60. Error += A.x == std::numeric_limits<glm::u8>::min() ? 0 : 1;
  61. Error += A.y < (std::numeric_limits<glm::u8>::max() >> 2) ? 0 : 1;
  62. Error += A.z == 127 ? 0 : 1;
  63. Error += A.w == 255 ? 0 : 1;
  64. }
  65. {
  66. glm::i8vec4 const A = glm::compScale<glm::i8>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));
  67. Error += A.x == 0 ? 0 : 1;
  68. Error += A.y == -128 ? 0 : 1;
  69. Error += A.z == 63 ? 0 : 1;
  70. Error += A.w == 127 ? 0 : 1;
  71. }
  72. {
  73. glm::u16vec4 const A = glm::compScale<glm::u16>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));
  74. Error += A.x == std::numeric_limits<glm::u16>::min() ? 0 : 1;
  75. Error += A.y < (std::numeric_limits<glm::u16>::max() >> 2) ? 0 : 1;
  76. Error += A.z == 32767 ? 0 : 1;
  77. Error += A.w == 65535 ? 0 : 1;
  78. }
  79. {
  80. glm::i16vec4 const A = glm::compScale<glm::i16>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));
  81. Error += A.x == 0 ? 0 : 1;
  82. Error += A.y == -32768 ? 0 : 1;
  83. Error += A.z == 16383 ? 0 : 1;
  84. Error += A.w == 32767 ? 0 : 1;
  85. }
  86. return Error;
  87. }
  88. }// compScale
  89. #if ((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))
  90. namespace fcompMax
  91. {
  92. static int run()
  93. {
  94. int Error(0);
  95. {
  96. float const A = glm::fcompMax(glm::vec4(NAN, 0.2f, 0.5f, 1.0f));
  97. Error += glm::equal(A, 1.0f, glm::epsilon<float>()) ? 0 : 1;
  98. }
  99. {
  100. float const A = glm::fcompMax(glm::vec4(2.0f, NAN, 0.3f, 0.7f));
  101. Error += glm::equal(A, 2.0f, glm::epsilon<float>()) ? 0 : 1;
  102. }
  103. {
  104. float const A = glm::fcompMax(glm::vec4(NAN, NAN, NAN, NAN));
  105. Error += std::isnan(A) ? 0 : 1;
  106. }
  107. return Error;
  108. }
  109. }// fcompMax
  110. namespace fcompMin
  111. {
  112. static int run()
  113. {
  114. int Error(0);
  115. {
  116. float const A = glm::fcompMin(glm::vec4(NAN, 0.2f, 0.5f, 1.0f));
  117. Error += glm::equal(A, 0.2f, glm::epsilon<float>()) ? 0 : 1;
  118. }
  119. {
  120. float const A = glm::fcompMin(glm::vec4(2.0f, NAN, 0.3f, 0.7f));
  121. Error += glm::equal(A, 0.3f, glm::epsilon<float>()) ? 0 : 1;
  122. }
  123. {
  124. float const A = glm::fcompMin(glm::vec4(NAN, NAN, NAN, NAN));
  125. Error += std::isnan(A) ? 0 : 1;
  126. }
  127. return Error;
  128. }
  129. }// fcompMin
  130. #endif//((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))
  131. int main()
  132. {
  133. int Error(0);
  134. Error += compNormalize::run();
  135. Error += compScale::run();
  136. #if ((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))
  137. Error += fcompMax::run();
  138. Error += fcompMin::run();
  139. #endif//((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))
  140. return Error;
  141. }