core_func_exponential.cpp 5.0 KB

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