PageRenderTime 54ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/backends/test/src/test.cpp

http://matlab2cuda.googlecode.com/
C++ | 495 lines | 352 code | 99 blank | 44 comment | 87 complexity | 4ee738afab05fd99123a5d1877b3bcf4 MD5 | raw file
  1. /*
  2. * test.cpp
  3. *
  4. * Created on: 2010-06-13
  5. * Author: Daniel
  6. */
  7. #include "../inc/test.h"
  8. #include <assert.h>
  9. #include <stdlib.h>
  10. #include <stdio.h>
  11. // porzadek column-major
  12. inline int idx(int x, int y, int n, int m) {
  13. return x + y * n;
  14. }
  15. void _test_vector_copy(int(*func)(const Vector&, Vector&)) {
  16. Vector source(10);
  17. Vector dest(10);
  18. Vector test(5);
  19. /* Test error handling */
  20. assert(func(source, test) < 0);
  21. assert(func(test, dest) < 0);
  22. /* Test functionality */
  23. for (int i = 0; i < 10; i++) {
  24. source.set(i, (float) i);
  25. }
  26. assert(func(source, dest) == 0);
  27. for (int i = 0; i < 10; i++) {
  28. assert(source.get(i) == dest.get(i));
  29. }
  30. }
  31. void _test_vector_literal(int(*func)(Vector&, float, float, float)) {
  32. // Vector dest(10);
  33. //
  34. // /* Test error handling */
  35. // assert(func(dest,-1,1,10,1)<0);
  36. // assert(func(dest,0,1,10,1)<0);
  37. //
  38. // assert(func(dest,10,10,1,1)<0);
  39. // assert(func(dest,10,1,10,-1)<0);
  40. // assert(func(dest,10,1,10,0)<0);
  41. //
  42. // assert(func(dest,10,1,100,1)<0);
  43. // assert(func(dest,10,100,1,-1)<0);
  44. //
  45. // assert(func(dest,100,1,10,1)<0);
  46. // assert(func(dest,100,10,1,-1)<0);
  47. //
  48. // /* Test functionality */
  49. // assert(func(dest,10,1,10,1) == 0);
  50. // for (int i = 0; i < 10; i++) {
  51. // assert(dest.get(i) == i+1);
  52. // }
  53. //
  54. // assert(func(dest,10,10,1,-1) == 0);
  55. // for (int i = 0; i < 10; i++) {
  56. // assert(dest.get(i) == 10-i);
  57. // }
  58. //
  59. // assert(func(dest,10,1,19,2) == 0);
  60. // for (int i = 0; i < 10; i++) {
  61. // assert(dest.get(i) == 2*i+1);
  62. // }
  63. }
  64. void _test_vector_equal(int(*func)(const Vector&, const Vector&)) {
  65. Vector first(10);
  66. Vector second(10);
  67. /* Test error handling */
  68. Vector test(5);
  69. assert(func(first, test) < 0);
  70. assert(func(test, second) < 0);
  71. /* Test functionality */
  72. for (int i = 0; i < 10; i++) {
  73. first.set(i, (float) i);
  74. }
  75. assert(func(first, second) == 0);
  76. for (int i = 0; i < 10; i++) {
  77. first.set(i, (float) i);
  78. second.set(i, (float) i);
  79. }
  80. assert(func(first, second) == 1);
  81. }
  82. void _test_vector_nequal(int(*func)(const Vector&, const Vector&)) {
  83. Vector first(10);
  84. Vector second(10);
  85. /* Test error handling */
  86. Vector test(5);
  87. assert(func(first, test) < 0);
  88. assert(func(test, second) < 0);
  89. /* Test functionality */
  90. for (int i = 0; i < 10; i++) {
  91. first.set(i, (float) i);
  92. }
  93. assert(func(first, second) == 1);
  94. for (int i = 0; i < 10; i++) {
  95. first.set(i, (float) i);
  96. second.set(i, (float) i);
  97. }
  98. assert(func(first, second) == 0);
  99. }
  100. void _test_vector_plus_vector(int(*func)(Vector&, const Vector&, const Vector&)) {
  101. Vector result(10);
  102. Vector first(10);
  103. Vector second(10);
  104. Vector test(5);
  105. assert(func(test, first, second) < 0);
  106. assert(func(result, test, second) < 0);
  107. assert(func(result, first, test) < 0);
  108. for (int i = 0; i < 10; i++) {
  109. first.set(i, (float) i);
  110. second.set(i, (float) i);
  111. }
  112. assert(func(result, first, second) == 0);
  113. for (int i = 0; i < 10; i++) {
  114. assert(result.get(i) == first.get(i) + second.get(i));
  115. }
  116. }
  117. void _test_vector_minus_vector(
  118. int(*func)(Vector&, const Vector&, const Vector&)) {
  119. Vector result(10);
  120. Vector first(10);
  121. Vector second(10);
  122. Vector test(5);
  123. assert(func(test, first, second) < 0);
  124. assert(func(result, test, second) < 0);
  125. assert(func(result, first, test) < 0);
  126. for (int i = 0; i < 10; i++) {
  127. first.set(i, 2 * (float) i);
  128. second.set(i, (float) i);
  129. }
  130. assert(func(result, first, second) == 0);
  131. for (int i = 0; i < 10; i++) {
  132. assert(result.get(i) == first.get(i) - second.get(i));
  133. }
  134. }
  135. void _test_matrix_times_vector(
  136. int(*func)(Vector&, const Matrix&, const Vector&)) {
  137. Vector result(10);
  138. Matrix matrix(10, 10);
  139. Vector vector(10);
  140. Matrix test1(10, 20);
  141. assert(func(result, test1, vector) < 0);
  142. Matrix test2(10, 20);
  143. assert(func(result, test1, vector) < 0);
  144. for (int i = 0; i < 10; i++) {
  145. vector.set(i, (float) i);
  146. for (int j = 0; j < 10; j++) {
  147. matrix.set(i, j, (float) i + (float) j);
  148. }
  149. }
  150. assert(func(result, matrix, vector) == 0);
  151. for (int i = 0; i < 10; i++) {
  152. float val = 0;
  153. for (int j = 0; j < 10; j++) {
  154. val += matrix.get(i, j) * vector.get(j);
  155. }
  156. assert(result.get(i) == val);
  157. }
  158. }
  159. void _test_vector_times_matrix(
  160. int(*func)(Vector&, const Matrix&, const Vector&)) {
  161. Vector result(10);
  162. Matrix matrix(10, 10);
  163. Vector vector(10);
  164. Matrix test1(10, 20);
  165. assert(func(result, test1, vector) < 0);
  166. Matrix test2(10, 20);
  167. assert(func(result, test1, vector) < 0);
  168. for (int i = 0; i < 10; i++) {
  169. vector.set(i, (float) i);
  170. for (int j = 0; j < 10; j++) {
  171. matrix.set(i, j, (float) i + (float) j);
  172. }
  173. }
  174. assert(func(result, matrix, vector) == 0);
  175. for (int i = 0; i < 10; i++) {
  176. float val = 0;
  177. for (int j = 0; j < 10; j++) {
  178. val += matrix.get(j, i) * vector.get(j);
  179. }
  180. assert(result.get(i) == val);
  181. }
  182. }
  183. void _test_matrix_copy(int(*func)(const Matrix&, Matrix&)) {
  184. Matrix source(10, 10);
  185. Matrix dest(10, 10);
  186. Matrix test1(5, 10);
  187. Matrix test2(10, 5);
  188. assert(func(source, test1) < 0);
  189. assert(func(source, test2) < 0);
  190. for (int i = 0; i < 10; i++) {
  191. for (int j = 0; j < 10; j++) {
  192. source.set(i, j, (float) i + (float) j);
  193. }
  194. }
  195. assert(func(source, dest) == 0);
  196. for (int i = 0; i < 10; i++) {
  197. for (int j = 0; j < 10; j++) {
  198. assert(source.get(i, j) == dest.get(i, j));
  199. }
  200. }
  201. }
  202. void _test_matrix_equal(int(*func)(const Matrix&, const Matrix&)) {
  203. Matrix first(10, 10);
  204. Matrix second(10, 10);
  205. Matrix test1(5, 10);
  206. Matrix test2(10, 5);
  207. assert(func(first, test1) < 0);
  208. assert(func(first, test2) < 0);
  209. for (int i = 0; i < 10; i++) {
  210. for (int j = 0; j < 10; j++) {
  211. first.set(i, j, (float) i + (float) j);
  212. }
  213. }
  214. assert(func(first, second) == 0);
  215. for (int i = 0; i < 10; i++) {
  216. for (int j = 0; j < 10; j++) {
  217. first.set(i, j, (float) i + (float) j);
  218. second.set(i, j, (float) i + (float) j);
  219. }
  220. }
  221. assert(func(first, second) == 1);
  222. }
  223. void _test_matrix_nequal(int(*func)(const Matrix&, const Matrix&)) {
  224. Matrix first(10, 10);
  225. Matrix second(10, 10);
  226. Matrix test1(5, 10);
  227. Matrix test2(10, 5);
  228. assert(func(first, test1) < 0);
  229. assert(func(first, test2) < 0);
  230. for (int i = 0; i < 10; i++) {
  231. for (int j = 0; j < 10; j++) {
  232. first.set(i, j, (float) i + (float) j);
  233. }
  234. }
  235. assert(func(first, second) == 1);
  236. for (int i = 0; i < 10; i++) {
  237. for (int j = 0; j < 10; j++) {
  238. first.set(i, j, (float) i + (float) j);
  239. second.set(i, j, (float) i + (float) j);
  240. }
  241. }
  242. assert(func(first, second) == 0);
  243. }
  244. void _test_matrix_plus_matrix(int(*func)(Matrix&, const Matrix&, const Matrix&)) {
  245. Matrix result(10, 10);
  246. Matrix first(10, 10);
  247. Matrix second(10, 10);
  248. Matrix test1(5, 10);
  249. Matrix test2(10, 5);
  250. assert(func(test1, first, second) < 0);
  251. assert(func(result, test1, second) < 0);
  252. assert(func(result, first, test1) < 0);
  253. assert(func(test2, first, second) < 0);
  254. assert(func(result, test2, second) < 0);
  255. assert(func(result, first, test2) < 0);
  256. for (int i = 0; i < 10; i++) {
  257. for (int j = 0; j < 10; j++) {
  258. first.set(i, j, (float) i);
  259. second.set(i, j, (float) j);
  260. }
  261. }
  262. assert(func(result, first, second) == 0);
  263. for (int i = 0; i < 10; i++) {
  264. for (int j = 0; j < 10; j++) {
  265. assert(result.get(i, j) == first.get(i, j) + second.get(i, j));
  266. }
  267. }
  268. }
  269. void _test_matrix_minus_matrix(
  270. int(*func)(Matrix&, const Matrix&, const Matrix&)) {
  271. Matrix result(10, 10);
  272. Matrix first(10, 10);
  273. Matrix second(10, 10);
  274. Matrix test1(5, 10);
  275. Matrix test2(10, 5);
  276. assert(func(test1, first, second) < 0);
  277. assert(func(result, test1, second) < 0);
  278. assert(func(result, first, test1) < 0);
  279. assert(func(test2, first, second) < 0);
  280. assert(func(result, test2, second) < 0);
  281. assert(func(result, first, test2) < 0);
  282. for (int i = 0; i < 10; i++) {
  283. for (int j = 0; j < 10; j++) {
  284. first.set(i, j, (float) i);
  285. second.set(i, j, (float) j);
  286. }
  287. }
  288. assert(func(result, first, second) == 0);
  289. for (int i = 0; i < 10; i++) {
  290. for (int j = 0; j < 10; j++) {
  291. assert(result.get(i, j) == first.get(i, j) - second.get(i, j));
  292. }
  293. }
  294. }
  295. void _test_matrix_times_matrix(
  296. int(*func)(Matrix&, const Matrix&, const Matrix&)) {
  297. Matrix result(10, 10);
  298. Matrix first(10, 10);
  299. Matrix second(10, 10);
  300. Matrix test1(5, 10);
  301. Matrix test2(10, 5);
  302. assert(func(test1, first, second) < 0);
  303. assert(func(result, test1, second) < 0);
  304. assert(func(result, first, test1) < 0);
  305. assert(func(test2, first, second) < 0);
  306. assert(func(result, test2, second) < 0);
  307. assert(func(result, first, test2) < 0);
  308. for (int i = 0; i < 10; i++) {
  309. for (int j = 0; j < 10; j++) {
  310. first.set(i, j, (float) i);
  311. second.set(i, j, (float) j);
  312. }
  313. }
  314. assert(func(result, first, second) == 0);
  315. for (int i = 0; i < 10; i++) {
  316. for (int j = 0; j < 10; j++) {
  317. float val = 0;
  318. for (int k = 0; k < 10; k++) {
  319. val += first.get(i, k) * second.get(k, j);
  320. }
  321. assert(result.get(i, j) == val);
  322. }
  323. }
  324. }
  325. void _test_scalar_times_vector(int(*func)(Vector&, const Vector&, float)) {
  326. Vector result(10);
  327. Vector vector(10);
  328. float scalar = 5;
  329. Vector test(5);
  330. assert(func(test, vector, scalar) < 0);
  331. assert(func(result, test, scalar) < 0);
  332. for (int i = 0; i < 10; i++) {
  333. vector.set(i, (float) i);
  334. }
  335. assert(func(result, vector, scalar) == 0);
  336. for (int i = 0; i < 10; i++) {
  337. assert(result.get(i) == scalar * vector.get(i));
  338. }
  339. }
  340. void _test_scalar_times_matrix(int(*func)(Matrix&, const Matrix&, float)) {
  341. Matrix result(10, 10);
  342. Matrix matrix(10, 10);
  343. float scalar = 5;
  344. Matrix test1(5, 10);
  345. Matrix test2(10, 5);
  346. assert(func(result, test1,scalar) < 0);
  347. assert(func(result, test2,scalar) < 0);
  348. for (int i = 0; i < 10; i++) {
  349. for (int j = 0; j < 10; j++) {
  350. matrix.set(i, j, (float) i);
  351. }
  352. }
  353. assert(func(result, matrix, scalar) == 0);
  354. for (int i = 0; i < 10; i++) {
  355. for (int j = 0; j < 10; j++) {
  356. assert(result.get(i, j) == scalar * matrix.get(i, j));
  357. }
  358. }
  359. }
  360. void _test_vector_div_scalar(int(*func)(Vector&, const Vector&, float)) {
  361. Vector result(10);
  362. Vector vector(10);
  363. float scalar = 5;
  364. double epsilon = 0.00001;
  365. Vector test(5);
  366. assert(func(test, vector, scalar) < 0);
  367. assert(func(result, test, scalar) < 0);
  368. for (int i = 0; i < 10; i++) {
  369. vector.set(i, (float) i);
  370. }
  371. assert(func(result, vector, scalar) == 0);
  372. for (int i = 0; i < 10; i++) {
  373. assert(result.get(i) - vector.get(i) / scalar < epsilon);
  374. }
  375. }
  376. void _test_matrix_div_scalar(int(*func)(Matrix&, const Matrix&, float)) {
  377. Matrix result(10, 10);
  378. Matrix matrix(10, 10);
  379. float scalar = 5;
  380. double epsilon = 0.00001;
  381. Matrix test1(5, 10);
  382. Matrix test2(10, 5);
  383. assert(func(result, test1,scalar) < 0);
  384. assert(func(result, test2,scalar) < 0);
  385. for (int i = 0; i < 10; i++) {
  386. for (int j = 0; j < 10; j++) {
  387. matrix.set(i, j, (float) i);
  388. }
  389. }
  390. assert(func(result, matrix, scalar) == 0);
  391. for (int i = 0; i < 10; i++) {
  392. for (int j = 0; j < 10; j++) {
  393. assert(result.get(i, j) - scalar * matrix.get(i, j) < epsilon);
  394. }
  395. }
  396. }