StatsTestsF32.cpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053
  1. #include "StatsTestsF32.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. #define SNR_THRESHOLD 120
  6. /*
  7. Reference patterns are generated with
  8. a double precision computation.
  9. */
  10. #define REL_ERROR (1.0e-5)
  11. void StatsTestsF32::test_max_f32()
  12. {
  13. const float32_t *inp = inputA.ptr();
  14. float32_t result;
  15. uint32_t indexval;
  16. float32_t *refp = ref.ptr();
  17. int16_t *refind = maxIndexes.ptr();
  18. float32_t *outp = output.ptr();
  19. int16_t *ind = index.ptr();
  20. arm_max_f32(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 StatsTestsF32::test_absmax_f32()
  30. {
  31. const float32_t *inp = inputA.ptr();
  32. float32_t result;
  33. uint32_t indexval;
  34. float32_t *refp = ref.ptr();
  35. int16_t *refind = maxIndexes.ptr();
  36. float32_t *outp = output.ptr();
  37. int16_t *ind = index.ptr();
  38. arm_absmax_f32(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 StatsTestsF32::test_max_no_idx_f32()
  48. {
  49. const float32_t *inp = inputA.ptr();
  50. float32_t result;
  51. float32_t *refp = ref.ptr();
  52. float32_t *outp = output.ptr();
  53. arm_max_no_idx_f32(inp,
  54. inputA.nbSamples(),
  55. &result);
  56. outp[0] = result;
  57. ASSERT_EQ(result,refp[this->refOffset]);
  58. }
  59. void StatsTestsF32::test_absmax_no_idx_f32()
  60. {
  61. const float32_t *inp = inputA.ptr();
  62. float32_t result;
  63. float32_t *refp = ref.ptr();
  64. float32_t *outp = output.ptr();
  65. arm_absmax_no_idx_f32(inp,
  66. inputA.nbSamples(),
  67. &result);
  68. outp[0] = result;
  69. ASSERT_EQ(result,refp[this->refOffset]);
  70. }
  71. void StatsTestsF32::test_min_no_idx_f32()
  72. {
  73. const float32_t *inp = inputA.ptr();
  74. float32_t result;
  75. float32_t *refp = ref.ptr();
  76. float32_t *outp = output.ptr();
  77. arm_min_no_idx_f32(inp,
  78. inputA.nbSamples(),
  79. &result);
  80. outp[0] = result;
  81. ASSERT_EQ(result,refp[this->refOffset]);
  82. }
  83. void StatsTestsF32::test_absmin_no_idx_f32()
  84. {
  85. const float32_t *inp = inputA.ptr();
  86. float32_t result;
  87. float32_t *refp = ref.ptr();
  88. float32_t *outp = output.ptr();
  89. arm_absmin_no_idx_f32(inp,
  90. inputA.nbSamples(),
  91. &result);
  92. outp[0] = result;
  93. ASSERT_EQ(result,refp[this->refOffset]);
  94. }
  95. void StatsTestsF32::test_min_f32()
  96. {
  97. const float32_t *inp = inputA.ptr();
  98. float32_t result;
  99. uint32_t indexval;
  100. float32_t *refp = ref.ptr();
  101. int16_t *refind = minIndexes.ptr();
  102. float32_t *outp = output.ptr();
  103. int16_t *ind = index.ptr();
  104. arm_min_f32(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 StatsTestsF32::test_absmin_f32()
  114. {
  115. const float32_t *inp = inputA.ptr();
  116. float32_t result;
  117. uint32_t indexval;
  118. float32_t *refp = ref.ptr();
  119. int16_t *refind = minIndexes.ptr();
  120. float32_t *outp = output.ptr();
  121. int16_t *ind = index.ptr();
  122. arm_absmin_f32(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 StatsTestsF32::test_mean_f32()
  132. {
  133. const float32_t *inp = inputA.ptr();
  134. float32_t result;
  135. float32_t *refp = ref.ptr();
  136. float32_t *outp = output.ptr();
  137. arm_mean_f32(inp,
  138. inputA.nbSamples(),
  139. &result);
  140. outp[0] = result;
  141. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  142. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  143. }
  144. void StatsTestsF32::test_power_f32()
  145. {
  146. const float32_t *inp = inputA.ptr();
  147. float32_t result;
  148. float32_t *refp = ref.ptr();
  149. float32_t *outp = output.ptr();
  150. arm_power_f32(inp,
  151. inputA.nbSamples(),
  152. &result);
  153. outp[0] = result;
  154. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  155. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  156. }
  157. void StatsTestsF32::test_rms_f32()
  158. {
  159. const float32_t *inp = inputA.ptr();
  160. float32_t result;
  161. float32_t *refp = ref.ptr();
  162. float32_t *outp = output.ptr();
  163. arm_rms_f32(inp,
  164. inputA.nbSamples(),
  165. &result);
  166. outp[0] = result;
  167. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  168. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  169. }
  170. void StatsTestsF32::test_std_f32()
  171. {
  172. const float32_t *inp = inputA.ptr();
  173. float32_t result;
  174. float32_t *refp = ref.ptr();
  175. float32_t *outp = output.ptr();
  176. arm_std_f32(inp,
  177. inputA.nbSamples(),
  178. &result);
  179. outp[0] = result;
  180. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  181. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  182. }
  183. void StatsTestsF32::test_var_f32()
  184. {
  185. const float32_t *inp = inputA.ptr();
  186. float32_t result;
  187. float32_t *refp = ref.ptr();
  188. float32_t *outp = output.ptr();
  189. arm_var_f32(inp,
  190. inputA.nbSamples(),
  191. &result);
  192. outp[0] = result;
  193. ASSERT_SNR(result,refp[this->refOffset],(float32_t)SNR_THRESHOLD);
  194. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  195. }
  196. void StatsTestsF32::test_std_stability_f32()
  197. {
  198. /*
  199. With the textbook algorithm, those values will produce a negative
  200. value for the variance.
  201. The CMSIS-DSP variance algorithm is the two pass one so will work
  202. with those values.
  203. So, it should be possible to compute the square root for the standard
  204. deviation.
  205. */
  206. float32_t in[4]={4.0f, 7.0f, 13.0f, 16.0f};
  207. float32_t result;
  208. int i;
  209. /*
  210. Add bigger offset so that average is much bigger than standard deviation.
  211. */
  212. for(i=0 ; i < 4; i++)
  213. {
  214. in[i] += 3.0e4f;
  215. }
  216. arm_std_f32(in,4,&result);
  217. /*
  218. If variance is giving a negative value, the square root
  219. should return zero.
  220. We check it is not happening here.
  221. */
  222. ASSERT_TRUE(fabs(5.47723f - result) < 1.0e-4f);
  223. }
  224. void StatsTestsF32::test_entropy_f32()
  225. {
  226. const float32_t *inp = inputA.ptr();
  227. const int16_t *dimsp = dims.ptr();
  228. float32_t *outp = output.ptr();
  229. for(int i=0;i < this->nbPatterns; i++)
  230. {
  231. *outp = arm_entropy_f32(inp,dimsp[i+1]);
  232. outp++;
  233. inp += dimsp[i+1];
  234. }
  235. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  236. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  237. }
  238. void StatsTestsF32::test_logsumexp_f32()
  239. {
  240. const float32_t *inp = inputA.ptr();
  241. const int16_t *dimsp = dims.ptr();
  242. float32_t *outp = output.ptr();
  243. for(int i=0;i < this->nbPatterns; i++)
  244. {
  245. *outp = arm_logsumexp_f32(inp,dimsp[i+1]);
  246. outp++;
  247. inp += dimsp[i+1];
  248. }
  249. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  250. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  251. }
  252. void StatsTestsF32::test_kullback_leibler_f32()
  253. {
  254. const float32_t *inpA = inputA.ptr();
  255. const float32_t *inpB = inputB.ptr();
  256. const int16_t *dimsp = dims.ptr();
  257. float32_t *outp = output.ptr();
  258. for(int i=0;i < this->nbPatterns; i++)
  259. {
  260. *outp = arm_kullback_leibler_f32(inpA,inpB,dimsp[i+1]);
  261. outp++;
  262. inpA += dimsp[i+1];
  263. inpB += dimsp[i+1];
  264. }
  265. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  266. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  267. }
  268. void StatsTestsF32::test_logsumexp_dot_prod_f32()
  269. {
  270. const float32_t *inpA = inputA.ptr();
  271. const float32_t *inpB = inputB.ptr();
  272. const int16_t *dimsp = dims.ptr();
  273. float32_t *outp = output.ptr();
  274. float32_t *tmpp = tmp.ptr();
  275. for(int i=0;i < this->nbPatterns; i++)
  276. {
  277. *outp = arm_logsumexp_dot_prod_f32(inpA,inpB,dimsp[i+1],tmpp);
  278. outp++;
  279. inpA += dimsp[i+1];
  280. inpB += dimsp[i+1];
  281. }
  282. ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
  283. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  284. }
  285. void StatsTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  286. {
  287. (void)paramsArgs;
  288. switch(id)
  289. {
  290. case StatsTestsF32::TEST_MAX_F32_1:
  291. {
  292. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  293. maxIndexes.reload(StatsTestsF32::MAXINDEXES_S16_ID,mgr);
  294. ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr);
  295. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  296. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  297. refOffset = 0;
  298. }
  299. break;
  300. case StatsTestsF32::TEST_MAX_F32_2:
  301. {
  302. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  303. maxIndexes.reload(StatsTestsF32::MAXINDEXES_S16_ID,mgr);
  304. ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr);
  305. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  306. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  307. refOffset = 1;
  308. }
  309. break;
  310. case StatsTestsF32::TEST_MAX_F32_3:
  311. {
  312. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  313. maxIndexes.reload(StatsTestsF32::MAXINDEXES_S16_ID,mgr);
  314. ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr);
  315. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  316. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  317. refOffset = 2;
  318. }
  319. break;
  320. case StatsTestsF32::TEST_MEAN_F32_4:
  321. {
  322. inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,3);
  323. ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr);
  324. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  325. refOffset = 0;
  326. }
  327. break;
  328. case StatsTestsF32::TEST_MEAN_F32_5:
  329. {
  330. inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,8);
  331. ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr);
  332. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  333. refOffset = 1;
  334. }
  335. break;
  336. case StatsTestsF32::TEST_MEAN_F32_6:
  337. {
  338. inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,11);
  339. ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr);
  340. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  341. refOffset = 2;
  342. }
  343. break;
  344. case StatsTestsF32::TEST_MIN_F32_7:
  345. {
  346. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  347. minIndexes.reload(StatsTestsF32::MININDEXES_S16_ID,mgr);
  348. ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr);
  349. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  350. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  351. refOffset = 0;
  352. }
  353. break;
  354. case StatsTestsF32::TEST_MIN_F32_8:
  355. {
  356. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  357. minIndexes.reload(StatsTestsF32::MININDEXES_S16_ID,mgr);
  358. ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr);
  359. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  360. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  361. refOffset = 1;
  362. }
  363. break;
  364. case StatsTestsF32::TEST_MIN_F32_9:
  365. {
  366. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  367. minIndexes.reload(StatsTestsF32::MININDEXES_S16_ID,mgr);
  368. ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr);
  369. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  370. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  371. refOffset = 2;
  372. }
  373. break;
  374. case StatsTestsF32::TEST_POWER_F32_10:
  375. {
  376. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  377. ref.reload(StatsTestsF32::POWERVALS_F32_ID,mgr);
  378. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  379. refOffset = 0;
  380. }
  381. break;
  382. case StatsTestsF32::TEST_POWER_F32_11:
  383. {
  384. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  385. ref.reload(StatsTestsF32::POWERVALS_F32_ID,mgr);
  386. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  387. refOffset = 1;
  388. }
  389. break;
  390. case StatsTestsF32::TEST_POWER_F32_12:
  391. {
  392. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  393. ref.reload(StatsTestsF32::POWERVALS_F32_ID,mgr);
  394. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  395. refOffset = 2;
  396. }
  397. break;
  398. case StatsTestsF32::TEST_RMS_F32_13:
  399. {
  400. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  401. ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr);
  402. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  403. refOffset = 0;
  404. }
  405. break;
  406. case StatsTestsF32::TEST_RMS_F32_14:
  407. {
  408. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  409. ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr);
  410. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  411. refOffset = 1;
  412. }
  413. break;
  414. case StatsTestsF32::TEST_RMS_F32_15:
  415. {
  416. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  417. ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr);
  418. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  419. refOffset = 2;
  420. }
  421. break;
  422. case StatsTestsF32::TEST_STD_F32_16:
  423. {
  424. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  425. ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr);
  426. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  427. refOffset = 0;
  428. }
  429. break;
  430. case StatsTestsF32::TEST_STD_F32_17:
  431. {
  432. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  433. ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr);
  434. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  435. refOffset = 1;
  436. }
  437. break;
  438. case StatsTestsF32::TEST_STD_F32_18:
  439. {
  440. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  441. ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr);
  442. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  443. refOffset = 2;
  444. }
  445. break;
  446. case StatsTestsF32::TEST_VAR_F32_19:
  447. {
  448. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  449. ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr);
  450. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  451. refOffset = 0;
  452. }
  453. break;
  454. case StatsTestsF32::TEST_VAR_F32_20:
  455. {
  456. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  457. ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr);
  458. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  459. refOffset = 1;
  460. }
  461. break;
  462. case StatsTestsF32::TEST_VAR_F32_21:
  463. {
  464. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  465. ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr);
  466. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  467. refOffset = 2;
  468. }
  469. break;
  470. case StatsTestsF32::TEST_ENTROPY_F32_22:
  471. {
  472. inputA.reload(StatsTestsF32::INPUT22_F32_ID,mgr);
  473. dims.reload(StatsTestsF32::DIM22_S16_ID,mgr);
  474. ref.reload(StatsTestsF32::REF22_ENTROPY_F32_ID,mgr);
  475. output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr);
  476. const int16_t *dimsp = dims.ptr();
  477. this->nbPatterns=dimsp[0];
  478. }
  479. break;
  480. case StatsTestsF32::TEST_LOGSUMEXP_F32_23:
  481. {
  482. inputA.reload(StatsTestsF32::INPUT23_F32_ID,mgr);
  483. dims.reload(StatsTestsF32::DIM23_S16_ID,mgr);
  484. ref.reload(StatsTestsF32::REF23_LOGSUMEXP_F32_ID,mgr);
  485. output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr);
  486. const int16_t *dimsp = dims.ptr();
  487. this->nbPatterns=dimsp[0];
  488. }
  489. break;
  490. case StatsTestsF32::TEST_KULLBACK_LEIBLER_F32_24:
  491. {
  492. inputA.reload(StatsTestsF32::INPUTA24_F32_ID,mgr);
  493. inputB.reload(StatsTestsF32::INPUTB24_F32_ID,mgr);
  494. dims.reload(StatsTestsF32::DIM24_S16_ID,mgr);
  495. ref.reload(StatsTestsF32::REF24_KL_F32_ID,mgr);
  496. output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr);
  497. const int16_t *dimsp = dims.ptr();
  498. this->nbPatterns=dimsp[0];
  499. }
  500. break;
  501. case StatsTestsF32::TEST_LOGSUMEXP_DOT_PROD_F32_25:
  502. {
  503. inputA.reload(StatsTestsF32::INPUTA25_F32_ID,mgr);
  504. inputB.reload(StatsTestsF32::INPUTB25_F32_ID,mgr);
  505. dims.reload(StatsTestsF32::DIM25_S16_ID,mgr);
  506. ref.reload(StatsTestsF32::REF25_LOGSUMEXP_DOT_F32_ID,mgr);
  507. output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr);
  508. const int16_t *dimsp = dims.ptr();
  509. this->nbPatterns=dimsp[0];
  510. /* 12 is max vecDim as defined in Python script generating the data */
  511. tmp.create(12,StatsTestsF32::TMP_F32_ID,mgr);
  512. }
  513. break;
  514. case StatsTestsF32::TEST_MAX_NO_IDX_F32_26:
  515. {
  516. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  517. ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr);
  518. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  519. refOffset = 0;
  520. }
  521. break;
  522. case StatsTestsF32::TEST_MAX_NO_IDX_F32_27:
  523. {
  524. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  525. ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr);
  526. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  527. refOffset = 1;
  528. }
  529. break;
  530. case StatsTestsF32::TEST_MAX_NO_IDX_F32_28:
  531. {
  532. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  533. ref.reload(StatsTestsF32::MAXVALS_F32_ID,mgr);
  534. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  535. refOffset = 2;
  536. }
  537. break;
  538. case TEST_MEAN_F32_29:
  539. inputA.reload(StatsTestsF32::INPUT2_F32_ID,mgr,100);
  540. ref.reload(StatsTestsF32::MEANVALS_F32_ID,mgr);
  541. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  542. refOffset = 3;
  543. break;
  544. case TEST_RMS_F32_30:
  545. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,100);
  546. ref.reload(StatsTestsF32::RMSVALS_F32_ID,mgr);
  547. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  548. refOffset = 3;
  549. break;
  550. case TEST_STD_F32_31:
  551. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,100);
  552. ref.reload(StatsTestsF32::STDVALS_F32_ID,mgr);
  553. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  554. refOffset = 3;
  555. break;
  556. case TEST_VAR_F32_32:
  557. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,100);
  558. ref.reload(StatsTestsF32::VARVALS_F32_ID,mgr);
  559. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  560. refOffset = 3;
  561. break;
  562. case StatsTestsF32::TEST_ABSMAX_F32_34:
  563. {
  564. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3);
  565. maxIndexes.reload(StatsTestsF32::ABSMAXINDEXES_S16_ID,mgr);
  566. ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr);
  567. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  568. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  569. refOffset = 0;
  570. }
  571. break;
  572. case StatsTestsF32::TEST_ABSMAX_F32_35:
  573. {
  574. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8);
  575. maxIndexes.reload(StatsTestsF32::ABSMAXINDEXES_S16_ID,mgr);
  576. ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr);
  577. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  578. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  579. refOffset = 1;
  580. }
  581. break;
  582. case StatsTestsF32::TEST_ABSMAX_F32_36:
  583. {
  584. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11);
  585. maxIndexes.reload(StatsTestsF32::ABSMAXINDEXES_S16_ID,mgr);
  586. ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr);
  587. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  588. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  589. refOffset = 2;
  590. }
  591. break;
  592. case StatsTestsF32::TEST_ABSMIN_F32_37:
  593. {
  594. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3);
  595. minIndexes.reload(StatsTestsF32::ABSMININDEXES_S16_ID,mgr);
  596. ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr);
  597. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  598. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  599. refOffset = 0;
  600. }
  601. break;
  602. case StatsTestsF32::TEST_ABSMIN_F32_38:
  603. {
  604. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8);
  605. minIndexes.reload(StatsTestsF32::ABSMININDEXES_S16_ID,mgr);
  606. ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr);
  607. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  608. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  609. refOffset = 1;
  610. }
  611. break;
  612. case StatsTestsF32::TEST_ABSMIN_F32_39:
  613. {
  614. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11);
  615. minIndexes.reload(StatsTestsF32::ABSMININDEXES_S16_ID,mgr);
  616. ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr);
  617. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  618. index.create(1,StatsTestsF32::OUT_S16_ID,mgr);
  619. refOffset = 2;
  620. }
  621. break;
  622. case StatsTestsF32::TEST_MIN_NO_IDX_F32_40:
  623. {
  624. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,3);
  625. ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr);
  626. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  627. refOffset = 0;
  628. }
  629. break;
  630. case StatsTestsF32::TEST_MIN_NO_IDX_F32_41:
  631. {
  632. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,8);
  633. ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr);
  634. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  635. refOffset = 1;
  636. }
  637. break;
  638. case StatsTestsF32::TEST_MIN_NO_IDX_F32_42:
  639. {
  640. inputA.reload(StatsTestsF32::INPUT1_F32_ID,mgr,11);
  641. ref.reload(StatsTestsF32::MINVALS_F32_ID,mgr);
  642. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  643. refOffset = 2;
  644. }
  645. break;
  646. case StatsTestsF32::TEST_ABSMAX_NO_IDX_F32_43:
  647. {
  648. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3);
  649. ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr);
  650. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  651. refOffset = 0;
  652. }
  653. break;
  654. case StatsTestsF32::TEST_ABSMAX_NO_IDX_F32_44:
  655. {
  656. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8);
  657. ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr);
  658. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  659. refOffset = 1;
  660. }
  661. break;
  662. case StatsTestsF32::TEST_ABSMAX_NO_IDX_F32_45:
  663. {
  664. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11);
  665. ref.reload(StatsTestsF32::ABSMAXVALS_F32_ID,mgr);
  666. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  667. refOffset = 2;
  668. }
  669. break;
  670. case StatsTestsF32::TEST_ABSMIN_NO_IDX_F32_46:
  671. {
  672. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,3);
  673. ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr);
  674. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  675. refOffset = 0;
  676. }
  677. break;
  678. case StatsTestsF32::TEST_ABSMIN_NO_IDX_F32_47:
  679. {
  680. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,8);
  681. ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr);
  682. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  683. refOffset = 1;
  684. }
  685. break;
  686. case StatsTestsF32::TEST_ABSMIN_NO_IDX_F32_48:
  687. {
  688. inputA.reload(StatsTestsF32::INPUTNEW1_F32_ID,mgr,11);
  689. ref.reload(StatsTestsF32::ABSMINVALS_F32_ID,mgr);
  690. output.create(1,StatsTestsF32::OUT_F32_ID,mgr);
  691. refOffset = 2;
  692. }
  693. break;
  694. }
  695. }
  696. void StatsTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  697. {
  698. (void)id;
  699. switch(id)
  700. {
  701. case StatsTestsF32::TEST_MAX_F32_1:
  702. case StatsTestsF32::TEST_MAX_F32_2:
  703. case StatsTestsF32::TEST_MAX_F32_3:
  704. case StatsTestsF32::TEST_MIN_F32_7:
  705. case StatsTestsF32::TEST_MIN_F32_8:
  706. case StatsTestsF32::TEST_MIN_F32_9:
  707. index.dump(mgr);
  708. output.dump(mgr);
  709. break;
  710. default:
  711. output.dump(mgr);
  712. }
  713. }