func_geometric.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////
  4. // Created : 2008-08-31
  5. // Updated : 2008-08-31
  6. // Licence : This source is under MIT License
  7. // File : test/core/func_geometric.cpp
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////
  9. #include "../precompiled.hpp"
  10. #include <glm/core/func_geometric.hpp>
  11. namespace glm{
  12. namespace test{
  13. bool test_length_1()
  14. {
  15. float f1 = 0.0f;
  16. float len1 = length(f1);
  17. float f2 = 1.0f;
  18. float len2 = length(f2);
  19. if (len1 == 0.0f && len2 == 1.0f)
  20. return true;
  21. return false;
  22. }
  23. bool test_length_2()
  24. {
  25. vec2 v1 = vec2(0, 0);
  26. float len1 = length(v1);
  27. vec2 v2 = vec2 (1, 1);
  28. float len2 = length(v2);
  29. if (len1 == 0.0f && len2 > 1.41f && len2 < 1.42f)
  30. return true;
  31. return false;
  32. }
  33. bool test_length_3()
  34. {
  35. vec3 v1 = vec3(0, 0, 0);
  36. float len1 = length(v1);
  37. vec3 v2 = vec3 (1, 1, 1);
  38. float len2 = length(v2);
  39. if (len1 == 0.0f && len2 > 1.73f && len2 < 1.74f)
  40. return true;
  41. return false;
  42. }
  43. bool test_length_4()
  44. {
  45. vec4 v1 = vec4(0, 0, 0, 0);
  46. float len1 = length(v1);
  47. vec4 v2 = vec4(1, 1, 1, 1);
  48. float len2 = length(v2);
  49. if (len1 == 0.0f && len2 == 2.f)
  50. return true;
  51. return false;
  52. }
  53. bool test_distance_1()
  54. {
  55. float p0 = 2.f;
  56. float p1 = -2.f;
  57. float dist = distance(p0, p1);
  58. if (dist == 4.0f)
  59. return true;
  60. return false;
  61. }
  62. bool test_distance_2()
  63. {
  64. vec2 p0 = vec2(0.f, 2.f);
  65. vec2 p1 = vec2(0.f,-2.f);
  66. float dist = distance(p0, p1);
  67. if (dist == 4.0f)
  68. return true;
  69. return false;
  70. }
  71. bool test_distance_3()
  72. {
  73. vec3 p0 = vec3(0.f, 0.f, 2.f);
  74. vec3 p1 = vec3(0.f, 0.f,-2.f);
  75. float dist = distance(p0, p1);
  76. if (dist == 4.0f)
  77. return true;
  78. return false;
  79. }
  80. bool test_distance_4()
  81. {
  82. vec4 p0 = vec4(0.f, 0.f, 2.f, 0.f);
  83. vec4 p1 = vec4(0.f, 0.f,-2.f, 0.f);
  84. float dist = distance(p0, p1);
  85. if (dist == 4.0f)
  86. return true;
  87. return false;
  88. }
  89. bool test_dot_1()
  90. {
  91. float v1 = 1.0f;
  92. float v2 = 0.0f;
  93. float dot1 = dot (v1, v1);
  94. float dot2 = dot (v1, v2);
  95. if (dot1 == 1.0f && dot2 == 0.0f)
  96. return true;
  97. return false;
  98. }
  99. bool test_dot_2()
  100. {
  101. vec2 v1 = vec2 (1, 0);
  102. vec2 v2 = vec2 (0, 1);
  103. float dot1 = dot (v1, v1);
  104. float dot2 = dot (v1, v2);
  105. if (dot1 == 1.0f && dot2 == 0.0f)
  106. return true;
  107. return false;
  108. }
  109. bool test_dot_3()
  110. {
  111. vec3 v1 = vec3 (1, 0, 0);
  112. vec3 v2 = vec3 (0, 1, 0);
  113. float dot1 = dot (v1, v1);
  114. float dot2 = dot (v1, v2);
  115. if (dot1 == 1.0f && dot2 == 0.0f)
  116. return true;
  117. return false;
  118. }
  119. bool test_dot_4()
  120. {
  121. vec4 v1 = vec4 (1, 0, 0, 0);
  122. vec4 v2 = vec4 (0, 1, 0, 0);
  123. float dot1 = dot (v1, v1);
  124. float dot2 = dot (v1, v2);
  125. if (dot1 == 1.0f && dot2 == 0.0f)
  126. return true;
  127. return false;
  128. }
  129. bool test_cross_vec3 ()
  130. {
  131. vec3 v1 = vec3(1.0f, 0.0f, 0.0f);
  132. vec3 v2 = vec3(0.0f, 1.0f, 0.0f);
  133. vec3 v3 = cross(v1, v2);
  134. vec3 v4 = vec3(0.0f, 0.0f, 1.0f);
  135. if (v3.x == v4.x && v3.y == v4.y && v3.z == v4.z)
  136. return true;
  137. return false;
  138. }
  139. bool test_normalize_1()
  140. {
  141. float f1 = 0.0f;
  142. f1 = normalize(f1);
  143. float f2 = 1.0f;
  144. f2 = normalize(f2);
  145. if (f1 == 1.0f && f2 == 1.0f)
  146. return true;
  147. return false;
  148. }
  149. bool test_normalize_2()
  150. {
  151. vec2 v1 = vec2(0, 0);
  152. v1 = normalize(v1);
  153. vec2 v2 = vec2 (1, 1);
  154. v2 = normalize(v2);
  155. if (length (v2) > 0.99f && length (v2) < 1.01f)
  156. return true;
  157. return false;
  158. }
  159. bool test_normalize_3()
  160. {
  161. vec3 v1 = vec3(0, 0, 0);
  162. v1 = normalize(v1);
  163. vec3 v2 = vec3(1, 1, 1);
  164. v2 = normalize(v2);
  165. if (length (v2) > 0.99f && length (v2) < 1.01f)
  166. return true;
  167. return false;
  168. }
  169. bool test_normalize_4()
  170. {
  171. vec4 v1 = vec4(0, 0, 0, 0);
  172. v1 = normalize(v1);
  173. vec4 v2 = vec4(1, 1, 1, 1);
  174. v2 = normalize(v2);
  175. if (length (v2) > 0.99f && length (v2) < 1.01f)
  176. return true;
  177. return false;
  178. }
  179. bool test_faceforward_1()
  180. {
  181. float N = 1.0f;
  182. float I = 1.0f;
  183. float Nref = 1.0f;
  184. N = faceforward(N, I, Nref);
  185. if (N == -1)
  186. return true;
  187. return false;
  188. }
  189. bool test_faceforward_2()
  190. {
  191. vec2 N = vec2(1, 1);
  192. vec2 I = vec2(1, 0);
  193. vec2 Nref = vec2(0, 0);
  194. N = faceforward(N, I, Nref);
  195. if (N.x == -1 && N.y == -1)
  196. return true;
  197. return false;
  198. }
  199. bool test_faceforward_3()
  200. {
  201. vec3 N = vec3(1, 1, 1);
  202. vec3 I = vec3(1, 0, 0);
  203. vec3 Nref = vec3(0, 0, 0);
  204. N = faceforward(N, I, Nref);
  205. if (N.x == -1 && N.y == -1 && N.z == -1)
  206. return true;
  207. return false;
  208. }
  209. bool test_faceforward_4()
  210. {
  211. vec4 N = vec4(1, 1, 1, 1);
  212. vec4 I = vec4(1, 0, 0, 0);
  213. vec4 Nref = vec4(0, 0, 0, 0);
  214. N = faceforward(N, I, Nref);
  215. if (N.x == -1 && N.y == -1 && N.z == -1 && N.w == -1)
  216. return true;
  217. return false;
  218. }
  219. bool test_reflect_2()
  220. {
  221. vec2 N = vec2( 1, 0);
  222. vec2 I = vec2(-1, 0);
  223. vec2 result = reflect(I, N);
  224. if (result.x != 1.0f || result.y != 0.f)
  225. return false;
  226. return true;
  227. }
  228. bool test_reflect_3()
  229. {
  230. vec3 N = vec3( 1, 0, 0);
  231. vec3 I = vec3(-1, 0, 0);
  232. vec3 result = reflect(I, N);
  233. if (result.x != 1.0f || result.y != 0.f || result.z != 0.f)
  234. return false;
  235. return true;
  236. }
  237. bool test_reflect_4()
  238. {
  239. vec4 N = vec4( 1, 0, 0, 0);
  240. vec4 I = vec4(-1, 0, 0, 0);
  241. vec4 result = reflect(I, N);
  242. if (result.x != 1.0f || result.y != 0.f || result.z != 0.f || result.w != 0.f)
  243. return false;
  244. return true;
  245. }
  246. bool test_refract_2()
  247. {
  248. glm::vec2 N = glm::vec2( 1, 0);
  249. glm::vec2 I = glm::vec2(-1, 0);
  250. glm::vec2 result = glm::refract(I, N, 1.0f);
  251. if (result.x != -1.f || result.y != 0.f)
  252. return false;
  253. return true;
  254. }
  255. bool test_refract_3()
  256. {
  257. glm::vec3 N = glm::vec3( 1, 0, 0);
  258. glm::vec3 I = glm::vec3(-1, 0, 0);
  259. glm::vec3 result = glm::refract(I, N, 1.0f);
  260. if (result.x != -1.f || result.y != 0.f || result.z != 0.f)
  261. return false;
  262. return true;
  263. }
  264. bool test_refract_4()
  265. {
  266. glm::vec4 N = glm::vec4( 1, 0, 0, 0);
  267. glm::vec4 I = glm::vec4(-1, 0, 0, 0);
  268. glm::vec4 result = glm::refract(I, N, 1.0f);
  269. if (result.x != -1.f || result.y != 0.f || result.z != 0.f || result.w != 0.f)
  270. return false;
  271. return true;
  272. }
  273. void main_core_func_geometric()
  274. {
  275. assert(test_length_1());
  276. assert(test_length_2());
  277. assert(test_length_3());
  278. assert(test_length_4());
  279. assert(test_distance_1());
  280. assert(test_distance_2());
  281. assert(test_distance_3());
  282. assert(test_distance_4());
  283. assert(test_dot_1());
  284. assert(test_dot_2());
  285. assert(test_dot_3());
  286. assert(test_dot_4());
  287. assert(test_cross_vec3());
  288. assert(test_normalize_1());
  289. assert(test_normalize_2());
  290. assert(test_normalize_3());
  291. assert(test_normalize_4());
  292. assert(test_faceforward_1());
  293. assert(test_faceforward_2());
  294. assert(test_faceforward_3());
  295. assert(test_faceforward_4());
  296. assert(test_reflect_2());
  297. assert(test_reflect_3());
  298. assert(test_reflect_4());
  299. assert(test_refract_2());
  300. assert(test_refract_3());
  301. assert(test_refract_4());
  302. }
  303. }//namespace test
  304. }//namespace glm