StatsTestsF64.cpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056
  1. #include "StatsTestsF64.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. #define SNR_THRESHOLD 305
  6. /*
  7. Reference patterns are generated with
  8. a double precision computation.
  9. */
  10. #define REL_ERROR (2.0e-15)
  11. void StatsTestsF64::test_max_f64()
  12. {
  13. const float64_t *inp = inputA.ptr();
  14. float64_t result;
  15. uint32_t indexval;
  16. float64_t *refp = ref.ptr();
  17. int16_t *refind = maxIndexes.ptr();
  18. float64_t *outp = output.ptr();
  19. int16_t *ind = index.ptr();
  20. arm_max_f64(inp,
  21. inputA.nbSamples(),
  22. &result,
  23. &indexval);
  24. outp[0] = result;
  25. ind[0] = indexval;
  26. ASSERT_EQ(result,refp[this->refOffset]);
  27. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  28. }
  29. void StatsTestsF64::test_absmax_f64()
  30. {
  31. const float64_t *inp = inputA.ptr();
  32. float64_t result;
  33. uint32_t indexval;
  34. float64_t *refp = ref.ptr();
  35. int16_t *refind = maxIndexes.ptr();
  36. float64_t *outp = output.ptr();
  37. int16_t *ind = index.ptr();
  38. arm_absmax_f64(inp,
  39. inputA.nbSamples(),
  40. &result,
  41. &indexval);
  42. outp[0] = result;
  43. ind[0] = indexval;
  44. ASSERT_EQ(result,refp[this->refOffset]);
  45. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  46. }
  47. void StatsTestsF64::test_max_no_idx_f64()
  48. {
  49. const float64_t *inp = inputA.ptr();
  50. float64_t result;
  51. float64_t *refp = ref.ptr();
  52. float64_t *outp = output.ptr();
  53. arm_max_no_idx_f64(inp,
  54. inputA.nbSamples(),
  55. &result);
  56. outp[0] = result;
  57. ASSERT_EQ(result,refp[this->refOffset]);
  58. }
  59. void StatsTestsF64::test_absmax_no_idx_f64()
  60. {
  61. const float64_t *inp = inputA.ptr();
  62. float64_t result;
  63. float64_t *refp = ref.ptr();
  64. float64_t *outp = output.ptr();
  65. arm_absmax_no_idx_f64(inp,
  66. inputA.nbSamples(),
  67. &result);
  68. outp[0] = result;
  69. ASSERT_EQ(result,refp[this->refOffset]);
  70. }
  71. void StatsTestsF64::test_min_no_idx_f64()
  72. {
  73. const float64_t *inp = inputA.ptr();
  74. float64_t result;
  75. float64_t *refp = ref.ptr();
  76. float64_t *outp = output.ptr();
  77. arm_min_no_idx_f64(inp,
  78. inputA.nbSamples(),
  79. &result);
  80. outp[0] = result;
  81. ASSERT_EQ(result,refp[this->refOffset]);
  82. }
  83. void StatsTestsF64::test_absmin_no_idx_f64()
  84. {
  85. const float64_t *inp = inputA.ptr();
  86. float64_t result;
  87. float64_t *refp = ref.ptr();
  88. float64_t *outp = output.ptr();
  89. arm_absmin_no_idx_f64(inp,
  90. inputA.nbSamples(),
  91. &result);
  92. outp[0] = result;
  93. ASSERT_EQ(result,refp[this->refOffset]);
  94. }
  95. void StatsTestsF64::test_min_f64()
  96. {
  97. const float64_t *inp = inputA.ptr();
  98. float64_t result;
  99. uint32_t indexval;
  100. float64_t *refp = ref.ptr();
  101. int16_t *refind = minIndexes.ptr();
  102. float64_t *outp = output.ptr();
  103. int16_t *ind = index.ptr();
  104. arm_min_f64(inp,
  105. inputA.nbSamples(),
  106. &result,
  107. &indexval);
  108. outp[0] = result;
  109. ind[0] = indexval;
  110. ASSERT_EQ(result,refp[this->refOffset]);
  111. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  112. }
  113. void StatsTestsF64::test_absmin_f64()
  114. {
  115. const float64_t *inp = inputA.ptr();
  116. float64_t result;
  117. uint32_t indexval;
  118. float64_t *refp = ref.ptr();
  119. int16_t *refind = minIndexes.ptr();
  120. float64_t *outp = output.ptr();
  121. int16_t *ind = index.ptr();
  122. arm_absmin_f64(inp,
  123. inputA.nbSamples(),
  124. &result,
  125. &indexval);
  126. outp[0] = result;
  127. ind[0] = indexval;
  128. ASSERT_EQ(result,refp[this->refOffset]);
  129. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  130. }
  131. void StatsTestsF64::test_mean_f64()
  132. {
  133. const float64_t *inp = inputA.ptr();
  134. float64_t result;
  135. float64_t *refp = ref.ptr();
  136. float64_t *outp = output.ptr();
  137. arm_mean_f64(inp,
  138. inputA.nbSamples(),
  139. &result);
  140. outp[0] = result;
  141. ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
  142. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  143. }
  144. void StatsTestsF64::test_power_f64()
  145. {
  146. const float64_t *inp = inputA.ptr();
  147. float64_t result;
  148. float64_t *refp = ref.ptr();
  149. float64_t *outp = output.ptr();
  150. arm_power_f64(inp,
  151. inputA.nbSamples(),
  152. &result);
  153. outp[0] = result;
  154. ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
  155. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  156. }
  157. /*
  158. void StatsTestsF64::test_rms_f64()
  159. {
  160. const float64_t *inp = inputA.ptr();
  161. float64_t result;
  162. float64_t *refp = ref.ptr();
  163. float64_t *outp = output.ptr();
  164. arm_rms_f64(inp,
  165. inputA.nbSamples(),
  166. &result);
  167. outp[0] = result;
  168. ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
  169. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  170. }
  171. */
  172. void StatsTestsF64::test_std_f64()
  173. {
  174. const float64_t *inp = inputA.ptr();
  175. float64_t result;
  176. float64_t *refp = ref.ptr();
  177. float64_t *outp = output.ptr();
  178. arm_std_f64(inp,
  179. inputA.nbSamples(),
  180. &result);
  181. outp[0] = result;
  182. ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
  183. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  184. }
  185. void StatsTestsF64::test_var_f64()
  186. {
  187. const float64_t *inp = inputA.ptr();
  188. float64_t result;
  189. float64_t *refp = ref.ptr();
  190. float64_t *outp = output.ptr();
  191. arm_var_f64(inp,
  192. inputA.nbSamples(),
  193. &result);
  194. outp[0] = result;
  195. ASSERT_SNR(result,refp[this->refOffset],(float64_t)SNR_THRESHOLD);
  196. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  197. }
  198. void StatsTestsF64::test_std_stability_f64()
  199. {
  200. /*
  201. With the textbook algorithm, those values will produce a negative
  202. value for the variance.
  203. The CMSIS-DSP variance algorithm is the two pass one so will work
  204. with those values.
  205. So, it should be possible to compute the square root for the standard
  206. deviation.
  207. */
  208. float64_t in[4]={4.0f, 7.0f, 13.0f, 16.0f};
  209. float64_t result;
  210. int i;
  211. /*
  212. Add bigger offset so that average is much bigger than standard deviation.
  213. */
  214. for(i=0 ; i < 4; i++)
  215. {
  216. in[i] += 3.0e4f;
  217. }
  218. arm_std_f64(in,4,&result);
  219. /*
  220. If variance is giving a negative value, the square root
  221. should return zero.
  222. We check it is not happening here.
  223. */
  224. ASSERT_TRUE(fabs(5.47723f - result) < 1.0e-4f);
  225. }
  226. void StatsTestsF64::test_entropy_f64()
  227. {
  228. const float64_t *inp = inputA.ptr();
  229. const int16_t *dimsp = dims.ptr();
  230. float64_t *outp = output.ptr();
  231. for(int i=0;i < this->nbPatterns; i++)
  232. {
  233. *outp = arm_entropy_f64(inp,dimsp[i+1]);
  234. outp++;
  235. inp += dimsp[i+1];
  236. }
  237. ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
  238. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  239. }
  240. /*
  241. void StatsTestsF64::test_logsumexp_f64()
  242. {
  243. const float64_t *inp = inputA.ptr();
  244. const int16_t *dimsp = dims.ptr();
  245. float64_t *outp = output.ptr();
  246. for(int i=0;i < this->nbPatterns; i++)
  247. {
  248. *outp = arm_logsumexp_f64(inp,dimsp[i+1]);
  249. outp++;
  250. inp += dimsp[i+1];
  251. }
  252. ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
  253. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  254. }
  255. */
  256. void StatsTestsF64::test_kullback_leibler_f64()
  257. {
  258. const float64_t *inpA = inputA.ptr();
  259. const float64_t *inpB = inputB.ptr();
  260. const int16_t *dimsp = dims.ptr();
  261. float64_t *outp = output.ptr();
  262. for(int i=0;i < this->nbPatterns; i++)
  263. {
  264. *outp = arm_kullback_leibler_f64(inpA,inpB,dimsp[i+1]);
  265. outp++;
  266. inpA += dimsp[i+1];
  267. inpB += dimsp[i+1];
  268. }
  269. ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
  270. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  271. }
  272. /*
  273. void StatsTestsF64::test_logsumexp_dot_prod_f64()
  274. {
  275. const float64_t *inpA = inputA.ptr();
  276. const float64_t *inpB = inputB.ptr();
  277. const int16_t *dimsp = dims.ptr();
  278. float64_t *outp = output.ptr();
  279. float64_t *tmpp = tmp.ptr();
  280. for(int i=0;i < this->nbPatterns; i++)
  281. {
  282. *outp = arm_logsumexp_dot_prod_f64(inpA,inpB,dimsp[i+1],tmpp);
  283. outp++;
  284. inpA += dimsp[i+1];
  285. inpB += dimsp[i+1];
  286. }
  287. ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
  288. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  289. }
  290. */
  291. void StatsTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  292. {
  293. (void)paramsArgs;
  294. switch(id)
  295. {
  296. case StatsTestsF64::TEST_MAX_F64_1:
  297. {
  298. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  299. maxIndexes.reload(StatsTestsF64::MAXINDEXES_S16_ID,mgr);
  300. ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
  301. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  302. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  303. refOffset = 0;
  304. }
  305. break;
  306. case StatsTestsF64::TEST_MAX_F64_2:
  307. {
  308. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  309. maxIndexes.reload(StatsTestsF64::MAXINDEXES_S16_ID,mgr);
  310. ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
  311. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  312. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  313. refOffset = 1;
  314. }
  315. break;
  316. case StatsTestsF64::TEST_MAX_F64_3:
  317. {
  318. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  319. maxIndexes.reload(StatsTestsF64::MAXINDEXES_S16_ID,mgr);
  320. ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
  321. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  322. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  323. refOffset = 2;
  324. }
  325. break;
  326. case StatsTestsF64::TEST_MEAN_F64_4:
  327. {
  328. inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,2);
  329. ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
  330. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  331. refOffset = 0;
  332. }
  333. break;
  334. case StatsTestsF64::TEST_MEAN_F64_5:
  335. {
  336. inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,4);
  337. ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
  338. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  339. refOffset = 1;
  340. }
  341. break;
  342. case StatsTestsF64::TEST_MEAN_F64_6:
  343. {
  344. inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,5);
  345. ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
  346. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  347. refOffset = 2;
  348. }
  349. break;
  350. case StatsTestsF64::TEST_MIN_F64_7:
  351. {
  352. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  353. minIndexes.reload(StatsTestsF64::MININDEXES_S16_ID,mgr);
  354. ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
  355. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  356. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  357. refOffset = 0;
  358. }
  359. break;
  360. case StatsTestsF64::TEST_MIN_F64_8:
  361. {
  362. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  363. minIndexes.reload(StatsTestsF64::MININDEXES_S16_ID,mgr);
  364. ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
  365. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  366. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  367. refOffset = 1;
  368. }
  369. break;
  370. case StatsTestsF64::TEST_MIN_F64_9:
  371. {
  372. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  373. minIndexes.reload(StatsTestsF64::MININDEXES_S16_ID,mgr);
  374. ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
  375. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  376. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  377. refOffset = 2;
  378. }
  379. break;
  380. case StatsTestsF64::TEST_POWER_F64_10:
  381. {
  382. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  383. ref.reload(StatsTestsF64::POWERVALS_F64_ID,mgr);
  384. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  385. refOffset = 0;
  386. }
  387. break;
  388. case StatsTestsF64::TEST_POWER_F64_11:
  389. {
  390. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  391. ref.reload(StatsTestsF64::POWERVALS_F64_ID,mgr);
  392. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  393. refOffset = 1;
  394. }
  395. break;
  396. case StatsTestsF64::TEST_POWER_F64_12:
  397. {
  398. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  399. ref.reload(StatsTestsF64::POWERVALS_F64_ID,mgr);
  400. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  401. refOffset = 2;
  402. }
  403. break;
  404. case StatsTestsF64::TEST_RMS_F64_13:
  405. {
  406. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  407. ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
  408. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  409. refOffset = 0;
  410. }
  411. break;
  412. case StatsTestsF64::TEST_RMS_F64_14:
  413. {
  414. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  415. ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
  416. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  417. refOffset = 1;
  418. }
  419. break;
  420. case StatsTestsF64::TEST_RMS_F64_15:
  421. {
  422. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  423. ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
  424. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  425. refOffset = 2;
  426. }
  427. break;
  428. case StatsTestsF64::TEST_STD_F64_16:
  429. {
  430. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  431. ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
  432. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  433. refOffset = 0;
  434. }
  435. break;
  436. case StatsTestsF64::TEST_STD_F64_17:
  437. {
  438. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  439. ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
  440. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  441. refOffset = 1;
  442. }
  443. break;
  444. case StatsTestsF64::TEST_STD_F64_18:
  445. {
  446. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  447. ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
  448. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  449. refOffset = 2;
  450. }
  451. break;
  452. case StatsTestsF64::TEST_VAR_F64_19:
  453. {
  454. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  455. ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
  456. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  457. refOffset = 0;
  458. }
  459. break;
  460. case StatsTestsF64::TEST_VAR_F64_20:
  461. {
  462. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  463. ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
  464. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  465. refOffset = 1;
  466. }
  467. break;
  468. case StatsTestsF64::TEST_VAR_F64_21:
  469. {
  470. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  471. ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
  472. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  473. refOffset = 2;
  474. }
  475. break;
  476. case StatsTestsF64::TEST_ENTROPY_F64_22:
  477. {
  478. inputA.reload(StatsTestsF64::INPUT22_F64_ID,mgr);
  479. dims.reload(StatsTestsF64::DIM22_S16_ID,mgr);
  480. ref.reload(StatsTestsF64::REF22_ENTROPY_F64_ID,mgr);
  481. output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
  482. const int16_t *dimsp = dims.ptr();
  483. this->nbPatterns=dimsp[0];
  484. }
  485. break;
  486. case StatsTestsF64::TEST_LOGSUMEXP_F64_23:
  487. {
  488. inputA.reload(StatsTestsF64::INPUT23_F64_ID,mgr);
  489. dims.reload(StatsTestsF64::DIM23_S16_ID,mgr);
  490. ref.reload(StatsTestsF64::REF23_LOGSUMEXP_F64_ID,mgr);
  491. output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
  492. const int16_t *dimsp = dims.ptr();
  493. this->nbPatterns=dimsp[0];
  494. }
  495. break;
  496. case StatsTestsF64::TEST_KULLBACK_LEIBLER_F64_24:
  497. {
  498. inputA.reload(StatsTestsF64::INPUTA24_F64_ID,mgr);
  499. inputB.reload(StatsTestsF64::INPUTB24_F64_ID,mgr);
  500. dims.reload(StatsTestsF64::DIM24_S16_ID,mgr);
  501. ref.reload(StatsTestsF64::REF24_KL_F64_ID,mgr);
  502. output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
  503. const int16_t *dimsp = dims.ptr();
  504. this->nbPatterns=dimsp[0];
  505. }
  506. break;
  507. case StatsTestsF64::TEST_LOGSUMEXP_DOT_PROD_F64_25:
  508. {
  509. inputA.reload(StatsTestsF64::INPUTA25_F64_ID,mgr);
  510. inputB.reload(StatsTestsF64::INPUTB25_F64_ID,mgr);
  511. dims.reload(StatsTestsF64::DIM25_S16_ID,mgr);
  512. ref.reload(StatsTestsF64::REF25_LOGSUMEXP_DOT_F64_ID,mgr);
  513. output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
  514. const int16_t *dimsp = dims.ptr();
  515. this->nbPatterns=dimsp[0];
  516. /* 12 is max vecDim as defined in Python script generating the data */
  517. tmp.create(12,StatsTestsF64::TMP_F64_ID,mgr);
  518. }
  519. break;
  520. case StatsTestsF64::TEST_MAX_NO_IDX_F64_26:
  521. {
  522. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  523. ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
  524. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  525. refOffset = 0;
  526. }
  527. break;
  528. case StatsTestsF64::TEST_MAX_NO_IDX_F64_27:
  529. {
  530. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  531. ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
  532. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  533. refOffset = 1;
  534. }
  535. break;
  536. case StatsTestsF64::TEST_MAX_NO_IDX_F64_28:
  537. {
  538. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  539. ref.reload(StatsTestsF64::MAXVALS_F64_ID,mgr);
  540. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  541. refOffset = 2;
  542. }
  543. break;
  544. case TEST_MEAN_F64_29:
  545. inputA.reload(StatsTestsF64::INPUT2_F64_ID,mgr,100);
  546. ref.reload(StatsTestsF64::MEANVALS_F64_ID,mgr);
  547. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  548. refOffset = 3;
  549. break;
  550. case TEST_RMS_F64_30:
  551. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,100);
  552. ref.reload(StatsTestsF64::RMSVALS_F64_ID,mgr);
  553. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  554. refOffset = 3;
  555. break;
  556. case TEST_STD_F64_31:
  557. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,100);
  558. ref.reload(StatsTestsF64::STDVALS_F64_ID,mgr);
  559. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  560. refOffset = 3;
  561. break;
  562. case TEST_VAR_F64_32:
  563. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,100);
  564. ref.reload(StatsTestsF64::VARVALS_F64_ID,mgr);
  565. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  566. refOffset = 3;
  567. break;
  568. case StatsTestsF64::TEST_ABSMAX_F64_34:
  569. {
  570. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
  571. maxIndexes.reload(StatsTestsF64::ABSMAXINDEXES_S16_ID,mgr);
  572. ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
  573. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  574. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  575. refOffset = 0;
  576. }
  577. break;
  578. case StatsTestsF64::TEST_ABSMAX_F64_35:
  579. {
  580. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
  581. maxIndexes.reload(StatsTestsF64::ABSMAXINDEXES_S16_ID,mgr);
  582. ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
  583. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  584. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  585. refOffset = 1;
  586. }
  587. break;
  588. case StatsTestsF64::TEST_ABSMAX_F64_36:
  589. {
  590. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
  591. maxIndexes.reload(StatsTestsF64::ABSMAXINDEXES_S16_ID,mgr);
  592. ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
  593. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  594. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  595. refOffset = 2;
  596. }
  597. break;
  598. case StatsTestsF64::TEST_ABSMIN_F64_37:
  599. {
  600. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
  601. minIndexes.reload(StatsTestsF64::ABSMININDEXES_S16_ID,mgr);
  602. ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
  603. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  604. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  605. refOffset = 0;
  606. }
  607. break;
  608. case StatsTestsF64::TEST_ABSMIN_F64_38:
  609. {
  610. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
  611. minIndexes.reload(StatsTestsF64::ABSMININDEXES_S16_ID,mgr);
  612. ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
  613. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  614. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  615. refOffset = 1;
  616. }
  617. break;
  618. case StatsTestsF64::TEST_ABSMIN_F64_39:
  619. {
  620. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
  621. minIndexes.reload(StatsTestsF64::ABSMININDEXES_S16_ID,mgr);
  622. ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
  623. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  624. index.create(1,StatsTestsF64::OUT_S16_ID,mgr);
  625. refOffset = 2;
  626. }
  627. break;
  628. case StatsTestsF64::TEST_MIN_NO_IDX_F64_40:
  629. {
  630. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,2);
  631. ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
  632. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  633. refOffset = 0;
  634. }
  635. break;
  636. case StatsTestsF64::TEST_MIN_NO_IDX_F64_41:
  637. {
  638. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,4);
  639. ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
  640. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  641. refOffset = 1;
  642. }
  643. break;
  644. case StatsTestsF64::TEST_MIN_NO_IDX_F64_42:
  645. {
  646. inputA.reload(StatsTestsF64::INPUT1_F64_ID,mgr,5);
  647. ref.reload(StatsTestsF64::MINVALS_F64_ID,mgr);
  648. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  649. refOffset = 2;
  650. }
  651. break;
  652. case StatsTestsF64::TEST_ABSMAX_NO_IDX_F64_43:
  653. {
  654. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
  655. ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
  656. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  657. refOffset = 0;
  658. }
  659. break;
  660. case StatsTestsF64::TEST_ABSMAX_NO_IDX_F64_44:
  661. {
  662. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
  663. ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
  664. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  665. refOffset = 1;
  666. }
  667. break;
  668. case StatsTestsF64::TEST_ABSMAX_NO_IDX_F64_45:
  669. {
  670. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
  671. ref.reload(StatsTestsF64::ABSMAXVALS_F64_ID,mgr);
  672. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  673. refOffset = 2;
  674. }
  675. break;
  676. case StatsTestsF64::TEST_ABSMIN_NO_IDX_F64_46:
  677. {
  678. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,2);
  679. ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
  680. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  681. refOffset = 0;
  682. }
  683. break;
  684. case StatsTestsF64::TEST_ABSMIN_NO_IDX_F64_47:
  685. {
  686. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,4);
  687. ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
  688. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  689. refOffset = 1;
  690. }
  691. break;
  692. case StatsTestsF64::TEST_ABSMIN_NO_IDX_F64_48:
  693. {
  694. inputA.reload(StatsTestsF64::INPUTNEW1_F64_ID,mgr,5);
  695. ref.reload(StatsTestsF64::ABSMINVALS_F64_ID,mgr);
  696. output.create(1,StatsTestsF64::OUT_F64_ID,mgr);
  697. refOffset = 2;
  698. }
  699. break;
  700. }
  701. }
  702. void StatsTestsF64::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  703. {
  704. (void)id;
  705. switch(id)
  706. {
  707. case StatsTestsF64::TEST_MAX_F64_1:
  708. case StatsTestsF64::TEST_MAX_F64_2:
  709. case StatsTestsF64::TEST_MAX_F64_3:
  710. case StatsTestsF64::TEST_MIN_F64_7:
  711. case StatsTestsF64::TEST_MIN_F64_8:
  712. case StatsTestsF64::TEST_MIN_F64_9:
  713. index.dump(mgr);
  714. output.dump(mgr);
  715. break;
  716. default:
  717. output.dump(mgr);
  718. }
  719. }