core_func_exponential.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include <glm/common.hpp>
  2. #include <glm/exponential.hpp>
  3. #include <glm/gtc/ulp.hpp>
  4. #include <glm/gtc/vec1.hpp>
  5. int test_pow()
  6. {
  7. int Error(0);
  8. float A = glm::pow(10.f, 10.f);
  9. glm::vec1 B = glm::pow(glm::vec1(10.f), glm::vec1(10.f));
  10. glm::vec2 C = glm::pow(glm::vec2(10.f), glm::vec2(10.f));
  11. glm::vec3 D = glm::pow(glm::vec3(10.f), glm::vec3(10.f));
  12. glm::vec4 E = glm::pow(glm::vec4(10.f), glm::vec4(10.f));
  13. return Error;
  14. }
  15. int test_exp()
  16. {
  17. int Error(0);
  18. float A = glm::exp(10.f);
  19. glm::vec1 B = glm::exp(glm::vec1(10.f));
  20. glm::vec2 C = glm::exp(glm::vec2(10.f));
  21. glm::vec3 D = glm::exp(glm::vec3(10.f));
  22. glm::vec4 E = glm::exp(glm::vec4(10.f));
  23. return Error;
  24. }
  25. int test_log()
  26. {
  27. int Error(0);
  28. float A = glm::log(10.f);
  29. glm::vec1 B = glm::log(glm::vec1(10.f));
  30. glm::vec2 C = glm::log(glm::vec2(10.f));
  31. glm::vec3 D = glm::log(glm::vec3(10.f));
  32. glm::vec4 E = glm::log(glm::vec4(10.f));
  33. return Error;
  34. }
  35. int test_exp2()
  36. {
  37. int Error(0);
  38. float A = glm::exp2(10.f);
  39. glm::vec1 B = glm::exp2(glm::vec1(10.f));
  40. glm::vec2 C = glm::exp2(glm::vec2(10.f));
  41. glm::vec3 D = glm::exp2(glm::vec3(10.f));
  42. glm::vec4 E = glm::exp2(glm::vec4(10.f));
  43. return Error;
  44. }
  45. int test_log2()
  46. {
  47. int Error(0);
  48. float A = glm::log2(10.f);
  49. glm::vec1 B = glm::log2(glm::vec1(10.f));
  50. glm::vec2 C = glm::log2(glm::vec2(10.f));
  51. glm::vec3 D = glm::log2(glm::vec3(10.f));
  52. glm::vec4 E = glm::log2(glm::vec4(10.f));
  53. return Error;
  54. }
  55. int test_sqrt()
  56. {
  57. int Error(0);
  58. # if GLM_ARCH & GLM_ARCH_SSE2_BIT
  59. for(float f = 0.1f; f < 30.0f; f += 0.1f)
  60. {
  61. float r = _mm_cvtss_f32(_mm_sqrt_ps(_mm_set1_ps(f)));
  62. float s = std::sqrt(f);
  63. Error += glm::abs(r - s) < 0.01f ? 0 : 1;
  64. assert(!Error);
  65. }
  66. # endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
  67. float A = glm::sqrt(10.f);
  68. glm::vec1 B = glm::sqrt(glm::vec1(10.f));
  69. glm::vec2 C = glm::sqrt(glm::vec2(10.f));
  70. glm::vec3 D = glm::sqrt(glm::vec3(10.f));
  71. glm::vec4 E = glm::sqrt(glm::vec4(10.f));
  72. return Error;
  73. }
  74. int test_inversesqrt()
  75. {
  76. int Error(0);
  77. glm::uint ulp(0);
  78. float diff(0.0f);
  79. for(float f = 0.001f; f < 10.f; f *= 1.001f)
  80. {
  81. glm::lowp_fvec1 u(f);
  82. glm::lowp_fvec1 lowp_v = glm::inversesqrt(u);
  83. float defaultp_v = glm::inversesqrt(f);
  84. ulp = glm::max(glm::float_distance(lowp_v.x, defaultp_v), ulp);
  85. diff = glm::abs(lowp_v.x - defaultp_v);
  86. }
  87. return Error;
  88. }
  89. int main()
  90. {
  91. int Error(0);
  92. Error += test_pow();
  93. Error += test_exp();
  94. Error += test_log();
  95. Error += test_exp2();
  96. Error += test_log2();
  97. Error += test_sqrt();
  98. Error += test_inversesqrt();
  99. return Error;
  100. }