core_func_exponential.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include <glm/common.hpp>
  2. #include <glm/exponential.hpp>
  3. #include <glm/gtc/epsilon.hpp>
  4. #include <glm/gtc/constants.hpp>
  5. #include <glm/gtc/ulp.hpp>
  6. #include <glm/gtc/vec1.hpp>
  7. static int test_pow()
  8. {
  9. int Error(0);
  10. float A = glm::pow(2.f, 2.f);
  11. Error += glm::epsilonEqual(A, 4.f, 0.01f) ? 0 : 1;
  12. glm::vec1 B = glm::pow(glm::vec1(2.f), glm::vec1(2.f));
  13. Error += glm::all(glm::epsilonEqual(B, glm::vec1(4.f), 0.01f)) ? 0 : 1;
  14. glm::vec2 C = glm::pow(glm::vec2(2.f), glm::vec2(2.f));
  15. Error += glm::all(glm::epsilonEqual(C, glm::vec2(4.f), 0.01f)) ? 0 : 1;
  16. glm::vec3 D = glm::pow(glm::vec3(2.f), glm::vec3(2.f));
  17. Error += glm::all(glm::epsilonEqual(D, glm::vec3(4.f), 0.01f)) ? 0 : 1;
  18. glm::vec4 E = glm::pow(glm::vec4(2.f), glm::vec4(2.f));
  19. Error += glm::all(glm::epsilonEqual(E, glm::vec4(4.f), 0.01f)) ? 0 : 1;
  20. return Error;
  21. }
  22. static int test_sqrt()
  23. {
  24. int Error = 0;
  25. float A = glm::sqrt(4.f);
  26. Error += glm::epsilonEqual(A, 2.f, 0.01f) ? 0 : 1;
  27. glm::vec1 B = glm::sqrt(glm::vec1(4.f));
  28. Error += glm::all(glm::epsilonEqual(B, glm::vec1(2.f), 0.01f)) ? 0 : 1;
  29. glm::vec2 C = glm::sqrt(glm::vec2(4.f));
  30. Error += glm::all(glm::epsilonEqual(C, glm::vec2(2.f), 0.01f)) ? 0 : 1;
  31. glm::vec3 D = glm::sqrt(glm::vec3(4.f));
  32. Error += glm::all(glm::epsilonEqual(D, glm::vec3(2.f), 0.01f)) ? 0 : 1;
  33. glm::vec4 E = glm::sqrt(glm::vec4(4.f));
  34. Error += glm::all(glm::epsilonEqual(E, glm::vec4(2.f), 0.01f)) ? 0 : 1;
  35. return Error;
  36. }
  37. static int test_exp()
  38. {
  39. int Error = 0;
  40. float A = glm::exp(1.f);
  41. Error += glm::epsilonEqual(A, glm::e<float>(), 0.01f) ? 0 : 1;
  42. glm::vec1 B = glm::exp(glm::vec1(1.f));
  43. Error += glm::all(glm::epsilonEqual(B, glm::vec1(glm::e<float>()), 0.01f)) ? 0 : 1;
  44. glm::vec2 C = glm::exp(glm::vec2(1.f));
  45. Error += glm::all(glm::epsilonEqual(C, glm::vec2(glm::e<float>()), 0.01f)) ? 0 : 1;
  46. glm::vec3 D = glm::exp(glm::vec3(1.f));
  47. Error += glm::all(glm::epsilonEqual(D, glm::vec3(glm::e<float>()), 0.01f)) ? 0 : 1;
  48. glm::vec4 E = glm::exp(glm::vec4(1.f));
  49. Error += glm::all(glm::epsilonEqual(E, glm::vec4(glm::e<float>()), 0.01f)) ? 0 : 1;
  50. return Error;
  51. }
  52. static int test_log()
  53. {
  54. int Error = 0;
  55. float const A = glm::log(glm::e<float>());
  56. Error += glm::epsilonEqual(A, 1.f, 0.01f) ? 0 : 1;
  57. glm::vec1 const B = glm::log(glm::vec1(glm::e<float>()));
  58. Error += glm::all(glm::epsilonEqual(B, glm::vec1(1.f), 0.01f)) ? 0 : 1;
  59. glm::vec2 const C = glm::log(glm::vec2(glm::e<float>()));
  60. Error += glm::all(glm::epsilonEqual(C, glm::vec2(1.f), 0.01f)) ? 0 : 1;
  61. glm::vec3 const D = glm::log(glm::vec3(glm::e<float>()));
  62. Error += glm::all(glm::epsilonEqual(D, glm::vec3(1.f), 0.01f)) ? 0 : 1;
  63. glm::vec4 const E = glm::log(glm::vec4(glm::e<float>()));
  64. Error += glm::all(glm::epsilonEqual(E, glm::vec4(1.f), 0.01f)) ? 0 : 1;
  65. return Error;
  66. }
  67. static int test_exp2()
  68. {
  69. int Error = 0;
  70. float A = glm::exp2(4.f);
  71. Error += glm::epsilonEqual(A, 16.f, 0.01f) ? 0 : 1;
  72. glm::vec1 B = glm::exp2(glm::vec1(4.f));
  73. Error += glm::all(glm::epsilonEqual(B, glm::vec1(16.f), 0.01f)) ? 0 : 1;
  74. glm::vec2 C = glm::exp2(glm::vec2(4.f, 3.f));
  75. Error += glm::all(glm::epsilonEqual(C, glm::vec2(16.f, 8.f), 0.01f)) ? 0 : 1;
  76. glm::vec3 D = glm::exp2(glm::vec3(4.f, 3.f, 2.f));
  77. Error += glm::all(glm::epsilonEqual(D, glm::vec3(16.f, 8.f, 4.f), 0.01f)) ? 0 : 1;
  78. glm::vec4 E = glm::exp2(glm::vec4(4.f, 3.f, 2.f, 1.f));
  79. Error += glm::all(glm::epsilonEqual(E, glm::vec4(16.f, 8.f, 4.f, 2.f), 0.01f)) ? 0 : 1;
  80. return Error;
  81. }
  82. static int test_log2()
  83. {
  84. int Error = 0;
  85. float A = glm::log2(16.f);
  86. Error += glm::epsilonEqual(A, 4.f, 0.01f) ? 0 : 1;
  87. glm::vec1 B = glm::log2(glm::vec1(16.f));
  88. Error += glm::all(glm::epsilonEqual(B, glm::vec1(4.f), 0.01f)) ? 0 : 1;
  89. glm::vec2 C = glm::log2(glm::vec2(16.f, 8.f));
  90. Error += glm::all(glm::epsilonEqual(C, glm::vec2(4.f, 3.f), 0.01f)) ? 0 : 1;
  91. glm::vec3 D = glm::log2(glm::vec3(16.f, 8.f, 4.f));
  92. Error += glm::all(glm::epsilonEqual(D, glm::vec3(4.f, 3.f, 2.f), 0.01f)) ? 0 : 1;
  93. glm::vec4 E = glm::log2(glm::vec4(16.f, 8.f, 4.f, 2.f));
  94. Error += glm::all(glm::epsilonEqual(E, glm::vec4(4.f, 3.f, 2.f, 1.f), 0.01f)) ? 0 : 1;
  95. return Error;
  96. }
  97. static int test_inversesqrt()
  98. {
  99. int Error = 0;
  100. float A = glm::inversesqrt(16.f) * glm::sqrt(16.f);
  101. Error += glm::epsilonEqual(A, 1.f, 0.01f) ? 0 : 1;
  102. glm::vec1 B = glm::inversesqrt(glm::vec1(16.f)) * glm::sqrt(16.f);;
  103. Error += glm::all(glm::epsilonEqual(B, glm::vec1(1.f), 0.01f)) ? 0 : 1;
  104. glm::vec2 C = glm::inversesqrt(glm::vec2(16.f)) * glm::sqrt(16.f);;
  105. Error += glm::all(glm::epsilonEqual(C, glm::vec2(1.f), 0.01f)) ? 0 : 1;
  106. glm::vec3 D = glm::inversesqrt(glm::vec3(16.f)) * glm::sqrt(16.f);;
  107. Error += glm::all(glm::epsilonEqual(D, glm::vec3(1.f), 0.01f)) ? 0 : 1;
  108. glm::vec4 E = glm::inversesqrt(glm::vec4(16.f)) * glm::sqrt(16.f);
  109. Error += glm::all(glm::epsilonEqual(E, glm::vec4(1.f), 0.01f)) ? 0 : 1;
  110. return Error;
  111. }
  112. int main()
  113. {
  114. int Error = 0;
  115. Error += test_pow();
  116. Error += test_sqrt();
  117. Error += test_exp();
  118. Error += test_log();
  119. Error += test_exp2();
  120. Error += test_log2();
  121. Error += test_inversesqrt();
  122. return Error;
  123. }