You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_paramdict.cpp 18 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. // Tencent is pleased to support the open source community by making ncnn available.
  2. //
  3. // Copyright (C) 2025 THL A29 Limited, a Tencent company. All rights reserved.
  4. //
  5. // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
  6. // in compliance with the License. You may obtain a copy of the License at
  7. //
  8. // https://opensource.org/licenses/BSD-3-Clause
  9. //
  10. // Unless required by applicable law or agreed to in writing, software distributed
  11. // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  12. // CONDITIONS OF ANY KIND, either express or implied. See the License for the
  13. // specific language governing permissions and limitations under the License.
  14. #include <stdio.h>
  15. #include "datareader.h"
  16. #include "paramdict.h"
  17. class ParamDictTest : public ncnn::ParamDict
  18. {
  19. public:
  20. int load_param(const char* str);
  21. int load_param_bin(const unsigned char* mem);
  22. };
  23. int ParamDictTest::load_param(const char* str)
  24. {
  25. const unsigned char* mem = (const unsigned char*)str;
  26. ncnn::DataReaderFromMemory dr(mem);
  27. return ncnn::ParamDict::load_param(dr);
  28. }
  29. int ParamDictTest::load_param_bin(const unsigned char* mem)
  30. {
  31. ncnn::DataReaderFromMemory dr(mem);
  32. return ncnn::ParamDict::load_param_bin(dr);
  33. }
  34. static int test_paramdict_0()
  35. {
  36. ParamDictTest pdt;
  37. pdt.load_param("0=100 1=1,-1,4,5,1,4 2=1.250000 -23303=5,0.1,0.2,-0.4,0.8,1.0 -23304=3,-1,10,-88");
  38. // int
  39. int typei = pdt.type(0);
  40. if (typei != 2)
  41. {
  42. fprintf(stderr, "test_paramdict int type failed %d != 2\n", typei);
  43. return -1;
  44. }
  45. int i = pdt.get(0, 0);
  46. if (i != 100)
  47. {
  48. fprintf(stderr, "test_paramdict int value failed %d != 100\n", i);
  49. return -1;
  50. }
  51. // int array
  52. int typeai = pdt.type(1);
  53. if (typeai != 5)
  54. {
  55. fprintf(stderr, "test_paramdict int array type failed %d != 5\n", typeai);
  56. return -1;
  57. }
  58. ncnn::Mat ai = pdt.get(1, ncnn::Mat());
  59. if (ai.w != 6)
  60. {
  61. fprintf(stderr, "test_paramdict int array size failed %d != 6\n", ai.w);
  62. return -1;
  63. }
  64. const int* p = ai;
  65. if (p[0] != 1 || p[1] != -1 || p[2] != 4 || p[3] != 5 || p[4] != 1 || p[5] != 4)
  66. {
  67. fprintf(stderr, "test_paramdict int array value failed %d %d %d %d %d %d\n", p[0], p[1], p[2], p[3], p[4], p[5]);
  68. return -1;
  69. }
  70. // float
  71. int typef = pdt.type(2);
  72. if (typef != 3)
  73. {
  74. fprintf(stderr, "test_paramdict float type failed %d != 3\n", typef);
  75. return -1;
  76. }
  77. float f = pdt.get(2, 0.f);
  78. if (f != 1.25f)
  79. {
  80. fprintf(stderr, "test_paramdict float value failed %f != 1.25f\n", f);
  81. return -1;
  82. }
  83. // float array
  84. int typeaf = pdt.type(3);
  85. if (typeaf != 6)
  86. {
  87. fprintf(stderr, "test_paramdict float array type failed %d != 6\n", typeaf);
  88. return -1;
  89. }
  90. ncnn::Mat af = pdt.get(3, ncnn::Mat());
  91. if (af.w != 5)
  92. {
  93. fprintf(stderr, "test_paramdict float array size failed %d != 5\n", af.w);
  94. return -1;
  95. }
  96. if (af[0] != 0.1f || af[1] != 0.2f || af[2] != -0.4f || af[3] != 0.8f || af[4] != 1.0f)
  97. {
  98. fprintf(stderr, "test_paramdict float array value failed %f %f %f %f %f\n", af[0], af[1], af[2], af[3], af[4]);
  99. return -1;
  100. }
  101. // int array
  102. typeai = pdt.type(4);
  103. if (typeai != 5)
  104. {
  105. fprintf(stderr, "test_paramdict int array type failed %d != 5\n", typeai);
  106. return -1;
  107. }
  108. ai = pdt.get(4, ncnn::Mat());
  109. if (ai.w != 3)
  110. {
  111. fprintf(stderr, "test_paramdict int array size failed %d != 3\n", ai.w);
  112. return -1;
  113. }
  114. p = ai;
  115. if (p[0] != -1 || p[1] != 10 || p[2] != -88)
  116. {
  117. fprintf(stderr, "test_paramdict int array value failed %d %d %d\n", p[0], p[1], p[2]);
  118. return -1;
  119. }
  120. return 0;
  121. }
  122. static int test_paramdict_1()
  123. {
  124. ParamDictTest pdt;
  125. pdt.load_param("0=-1 1=4, 2=0.01 3=-1.45e-2,3.14");
  126. // int
  127. int typei = pdt.type(0);
  128. if (typei != 2)
  129. {
  130. fprintf(stderr, "test_paramdict int type failed %d != 2\n", typei);
  131. return -1;
  132. }
  133. int i = pdt.get(0, 0);
  134. if (i != -1)
  135. {
  136. fprintf(stderr, "test_paramdict int value failed %d != -1\n", i);
  137. return -1;
  138. }
  139. // int array
  140. int typeai = pdt.type(1);
  141. if (typeai != 5)
  142. {
  143. fprintf(stderr, "test_paramdict int array type failed %d != 5\n", typeai);
  144. return -1;
  145. }
  146. ncnn::Mat ai = pdt.get(1, ncnn::Mat());
  147. if (ai.w != 1)
  148. {
  149. fprintf(stderr, "test_paramdict int array size failed %d != 1\n", ai.w);
  150. return -1;
  151. }
  152. const int* p = ai;
  153. if (p[0] != 4)
  154. {
  155. fprintf(stderr, "test_paramdict int array value failed %d\n", p[0]);
  156. return -1;
  157. }
  158. // float
  159. int typef = pdt.type(2);
  160. if (typef != 3)
  161. {
  162. fprintf(stderr, "test_paramdict float type failed %d != 3\n", typef);
  163. return -1;
  164. }
  165. float f = pdt.get(2, 0.f);
  166. if (f != 0.01f)
  167. {
  168. fprintf(stderr, "test_paramdict float value failed %f != 0.01f\n", f);
  169. return -1;
  170. }
  171. // float array
  172. int typeaf = pdt.type(3);
  173. if (typeaf != 6)
  174. {
  175. fprintf(stderr, "test_paramdict float array type failed %d != 6\n", typeaf);
  176. return -1;
  177. }
  178. ncnn::Mat af = pdt.get(3, ncnn::Mat());
  179. if (af.w != 2)
  180. {
  181. fprintf(stderr, "test_paramdict float array size failed %d != 2\n", af.w);
  182. return -1;
  183. }
  184. if (af[0] != -0.0145f || af[1] != 3.14f)
  185. {
  186. fprintf(stderr, "test_paramdict float array value failed %f %f\n", af[0], af[1]);
  187. return -1;
  188. }
  189. return 0;
  190. }
  191. static int test_paramdict_2()
  192. {
  193. ParamDictTest pdt;
  194. pdt.load_param("0=bij,bjk->bik 1=This_is_a_very_long_long_string 2=X");
  195. // string
  196. int types = pdt.type(0);
  197. if (types != 7)
  198. {
  199. fprintf(stderr, "test_paramdict string type failed %d != 7\n", types);
  200. return -1;
  201. }
  202. std::string s = pdt.get(0, "");
  203. if (s != "bij,bjk->bik")
  204. {
  205. fprintf(stderr, "test_paramdict string text failed %s != bij,bjk->bik\n", s.c_str());
  206. return -1;
  207. }
  208. // string
  209. types = pdt.type(1);
  210. if (types != 7)
  211. {
  212. fprintf(stderr, "test_paramdict string type failed %d != 7\n", types);
  213. return -1;
  214. }
  215. s = pdt.get(1, "");
  216. if (s != "This_is_a_very_long_long_string")
  217. {
  218. fprintf(stderr, "test_paramdict string text failed %s != This_is_a_very_long_long_string\n", s.c_str());
  219. return -1;
  220. }
  221. // string
  222. types = pdt.type(2);
  223. if (types != 7)
  224. {
  225. fprintf(stderr, "test_paramdict string type failed %d != 7\n", types);
  226. return -1;
  227. }
  228. s = pdt.get(2, "");
  229. if (s != "X")
  230. {
  231. fprintf(stderr, "test_paramdict string text failed %s != X\n", s.c_str());
  232. return -1;
  233. }
  234. return 0;
  235. }
  236. static int test_paramdict_3()
  237. {
  238. const unsigned char mem[] = {
  239. 0x00, 0x00, 0x00, 0x00,
  240. 0x64, 0x00, 0x00, 0x00,
  241. 0xfb, 0xa4, 0xff, 0xff,
  242. 0x06, 0x00, 0x00, 0x00,
  243. 0x01, 0x00, 0x00, 0x00,
  244. 0xff, 0xff, 0xff, 0xff,
  245. 0x04, 0x00, 0x00, 0x00,
  246. 0x05, 0x00, 0x00, 0x00,
  247. 0x01, 0x00, 0x00, 0x00,
  248. 0x04, 0x00, 0x00, 0x00,
  249. 0x02, 0x00, 0x00, 0x00,
  250. 0x00, 0x00, 0xa0, 0x3f,
  251. 0xf9, 0xa4, 0xff, 0xff,
  252. 0x05, 0x00, 0x00, 0x00,
  253. 0xcd, 0xcc, 0xcc, 0x3d,
  254. 0xcd, 0xcc, 0x4c, 0x3e,
  255. 0xcd, 0xcc, 0xcc, 0xbe,
  256. 0xcd, 0xcc, 0x4c, 0x3f,
  257. 0x00, 0x00, 0x80, 0x3f,
  258. 0x17, 0xff, 0xff, 0xff
  259. };
  260. ParamDictTest pdt;
  261. pdt.load_param_bin(mem);
  262. // int
  263. int typei = pdt.type(0);
  264. if (typei != 1)
  265. {
  266. fprintf(stderr, "test_paramdict int type failed %d != 1\n", typei);
  267. return -1;
  268. }
  269. int i = pdt.get(0, 0);
  270. if (i != 100)
  271. {
  272. fprintf(stderr, "test_paramdict int value failed %d != 100\n", i);
  273. return -1;
  274. }
  275. // int array
  276. int typeai = pdt.type(1);
  277. if (typeai != 4)
  278. {
  279. fprintf(stderr, "test_paramdict int array type failed %d != 4\n", typeai);
  280. return -1;
  281. }
  282. ncnn::Mat ai = pdt.get(1, ncnn::Mat());
  283. if (ai.w != 6)
  284. {
  285. fprintf(stderr, "test_paramdict int array size failed %d != 6\n", ai.w);
  286. return -1;
  287. }
  288. const int* p = ai;
  289. if (p[0] != 1 || p[1] != -1 || p[2] != 4 || p[3] != 5 || p[4] != 1 || p[5] != 4)
  290. {
  291. fprintf(stderr, "test_paramdict int array value failed %d %d %d %d %d %d\n", p[0], p[1], p[2], p[3], p[4], p[5]);
  292. return -1;
  293. }
  294. // float
  295. int typef = pdt.type(2);
  296. if (typef != 1)
  297. {
  298. fprintf(stderr, "test_paramdict float type failed %d != 1\n", typef);
  299. return -1;
  300. }
  301. float f = pdt.get(2, 0.f);
  302. if (f != 1.25f)
  303. {
  304. fprintf(stderr, "test_paramdict float value failed %f != 1.25f\n", f);
  305. return -1;
  306. }
  307. // float array
  308. int typeaf = pdt.type(3);
  309. if (typeaf != 4)
  310. {
  311. fprintf(stderr, "test_paramdict float array type failed %d != 4\n", typeaf);
  312. return -1;
  313. }
  314. ncnn::Mat af = pdt.get(3, ncnn::Mat());
  315. if (af.w != 5)
  316. {
  317. fprintf(stderr, "test_paramdict float array size failed %d != 5\n", af.w);
  318. return -1;
  319. }
  320. if (af[0] != 0.1f || af[1] != 0.2f || af[2] != -0.4f || af[3] != 0.8f || af[4] != 1.0f)
  321. {
  322. fprintf(stderr, "test_paramdict float array value failed %f %f %f %f %f\n", af[0], af[1], af[2], af[3], af[4]);
  323. return -1;
  324. }
  325. return 0;
  326. }
  327. static int test_paramdict_4()
  328. {
  329. const unsigned char mem[] = {
  330. 0x00, 0x00, 0x00, 0x00,
  331. 0xff, 0xff, 0xff, 0xff,
  332. 0xfb, 0xa4, 0xff, 0xff,
  333. 0x01, 0x00, 0x00, 0x00,
  334. 0x04, 0x00, 0x00, 0x00,
  335. 0x02, 0x00, 0x00, 0x00,
  336. 0x0a, 0xd7, 0x23, 0x3c,
  337. 0xf9, 0xa4, 0xff, 0xff,
  338. 0x02, 0x00, 0x00, 0x00,
  339. 0x68, 0x91, 0x6d, 0xbc,
  340. 0xc3, 0xf5, 0x48, 0x40,
  341. 0x17, 0xff, 0xff, 0xff
  342. };
  343. ParamDictTest pdt;
  344. pdt.load_param_bin(mem);
  345. // int
  346. int typei = pdt.type(0);
  347. if (typei != 1)
  348. {
  349. fprintf(stderr, "test_paramdict int type failed %d != 1\n", typei);
  350. return -1;
  351. }
  352. int i = pdt.get(0, 0);
  353. if (i != -1)
  354. {
  355. fprintf(stderr, "test_paramdict int value failed %d != -1\n", i);
  356. return -1;
  357. }
  358. // int array
  359. int typeai = pdt.type(1);
  360. if (typeai != 4)
  361. {
  362. fprintf(stderr, "test_paramdict int array type failed %d != 4\n", typeai);
  363. return -1;
  364. }
  365. ncnn::Mat ai = pdt.get(1, ncnn::Mat());
  366. if (ai.w != 1)
  367. {
  368. fprintf(stderr, "test_paramdict int array size failed %d != 1\n", ai.w);
  369. return -1;
  370. }
  371. const int* p = ai;
  372. if (p[0] != 4)
  373. {
  374. fprintf(stderr, "test_paramdict int array value failed %d\n", p[0]);
  375. return -1;
  376. }
  377. // float
  378. int typef = pdt.type(2);
  379. if (typef != 1)
  380. {
  381. fprintf(stderr, "test_paramdict float type failed %d != 1\n", typef);
  382. return -1;
  383. }
  384. float f = pdt.get(2, 0.f);
  385. if (f != 0.01f)
  386. {
  387. fprintf(stderr, "test_paramdict float value failed %f != 0.01f\n", f);
  388. return -1;
  389. }
  390. // float array
  391. int typeaf = pdt.type(3);
  392. if (typeaf != 4)
  393. {
  394. fprintf(stderr, "test_paramdict float array type failed %d != 4\n", typeaf);
  395. return -1;
  396. }
  397. ncnn::Mat af = pdt.get(3, ncnn::Mat());
  398. if (af.w != 2)
  399. {
  400. fprintf(stderr, "test_paramdict float array size failed %d != 2\n", af.w);
  401. return -1;
  402. }
  403. if (af[0] != -0.0145f || af[1] != 3.14f)
  404. {
  405. fprintf(stderr, "test_paramdict float array value failed %f %f\n", af[0], af[1]);
  406. return -1;
  407. }
  408. return 0;
  409. }
  410. static int test_paramdict_5()
  411. {
  412. const unsigned char mem[] = {
  413. 0x98, 0xa4, 0xff, 0xff,
  414. 0x0c, 0x00, 0x00, 0x00,
  415. 0x62, 0x69, 0x6a, 0x2c,
  416. 0x62, 0x6a, 0x6b, 0x2d,
  417. 0x3e, 0x62, 0x69, 0x6b,
  418. 0x97, 0xa4, 0xff, 0xff,
  419. 0x1f, 0x00, 0x00, 0x00,
  420. 0x54, 0x68, 0x69, 0x73,
  421. 0x5f, 0x69, 0x73, 0x5f,
  422. 0x61, 0x5f, 0x76, 0x65,
  423. 0x72, 0x79, 0x5f, 0x6c,
  424. 0x6f, 0x6e, 0x67, 0x5f,
  425. 0x6c, 0x6f, 0x6e, 0x67,
  426. 0x5f, 0x73, 0x74, 0x72,
  427. 0x69, 0x6e, 0x67, 0x00,
  428. 0x96, 0xa4, 0xff, 0xff,
  429. 0x01, 0x00, 0x00, 0x00,
  430. 0x58, 0x00, 0x00, 0x00,
  431. 0x17, 0xff, 0xff, 0xff
  432. };
  433. ParamDictTest pdt;
  434. pdt.load_param_bin(mem);
  435. // string
  436. int types = pdt.type(0);
  437. if (types != 7)
  438. {
  439. fprintf(stderr, "test_paramdict string type failed %d != 7\n", types);
  440. return -1;
  441. }
  442. std::string s = pdt.get(0, "");
  443. if (s != "bij,bjk->bik")
  444. {
  445. fprintf(stderr, "test_paramdict string text failed %s != bij,bjk->bik\n", s.c_str());
  446. return -1;
  447. }
  448. // string
  449. types = pdt.type(1);
  450. if (types != 7)
  451. {
  452. fprintf(stderr, "test_paramdict string type failed %d != 7\n", types);
  453. return -1;
  454. }
  455. s = pdt.get(1, "");
  456. if (s != "This_is_a_very_long_long_string")
  457. {
  458. fprintf(stderr, "test_paramdict string text failed %s != This_is_a_very_long_long_string\n", s.c_str());
  459. return -1;
  460. }
  461. // string
  462. types = pdt.type(2);
  463. if (types != 7)
  464. {
  465. fprintf(stderr, "test_paramdict string type failed %d != 7\n", types);
  466. return -1;
  467. }
  468. s = pdt.get(2, "");
  469. if (s != "X")
  470. {
  471. fprintf(stderr, "test_paramdict string text failed %s != X\n", s.c_str());
  472. return -1;
  473. }
  474. return 0;
  475. }
  476. static int compare_paramdict(const ncnn::ParamDict& pd, const ncnn::ParamDict& pd0)
  477. {
  478. for (int id = 0;; id++)
  479. {
  480. const int type0 = pd0.type(id);
  481. if (type0 == 0)
  482. {
  483. break;
  484. }
  485. else if (type0 == 2)
  486. {
  487. const int i0 = pd0.get(id, 0);
  488. int i = pd.get(id, 0);
  489. if (i != i0)
  490. {
  491. fprintf(stderr, "compare_paramdict int failed %d != %d\n", i, i0);
  492. return -1;
  493. }
  494. }
  495. else if (type0 == 3)
  496. {
  497. const float f0 = pd0.get(id, 0.f);
  498. int f = pd.get(id, 0.f);
  499. if (f != f0)
  500. {
  501. fprintf(stderr, "compare_paramdict float failed %f != %f\n", f, f0);
  502. return -1;
  503. }
  504. }
  505. else if (type0 == 5)
  506. {
  507. const ncnn::Mat ai0 = pd0.get(id, ncnn::Mat());
  508. ncnn::Mat ai = pd.get(id, ncnn::Mat());
  509. if (ai.w != ai0.w)
  510. {
  511. fprintf(stderr, "compare_paramdict int array size failed %d != %d\n", ai.w, ai0.w);
  512. return -1;
  513. }
  514. for (int q = 0; q < ai0.w; q++)
  515. {
  516. int i0 = ((const int*)ai0)[q];
  517. int i = ((const int*)ai)[q];
  518. if (i != i0)
  519. {
  520. fprintf(stderr, "compare_paramdict int array element %d failed %d != %d\n", q, i, i0);
  521. return -1;
  522. }
  523. }
  524. }
  525. else if (type0 == 6)
  526. {
  527. const ncnn::Mat af0 = pd0.get(id, ncnn::Mat());
  528. ncnn::Mat af = pd.get(id, ncnn::Mat());
  529. if (af.w != af0.w)
  530. {
  531. fprintf(stderr, "compare_paramdict float array size failed %d != %d\n", af.w, af0.w);
  532. return -1;
  533. }
  534. for (int q = 0; q < af0.w; q++)
  535. {
  536. float f0 = af0[q];
  537. float f = af[q];
  538. if (f != f0)
  539. {
  540. fprintf(stderr, "compare_paramdict float array element %d failed %f != %f\n", q, f, f0);
  541. return -1;
  542. }
  543. }
  544. }
  545. else if (type0 == 7)
  546. {
  547. const std::string s0 = pd0.get(id, "");
  548. std::string s = pd.get(id, "");
  549. if (s != s0)
  550. {
  551. fprintf(stderr, "compare_paramdict string failed %s != %s\n", s.c_str(), s0.c_str());
  552. return -1;
  553. }
  554. }
  555. else
  556. {
  557. fprintf(stderr, "unexpected paramdict type %d\n", type0);
  558. return -1;
  559. }
  560. }
  561. return 0;
  562. }
  563. static int test_paramdict_6()
  564. {
  565. const int i0 = 11;
  566. const float f0 = -2.2f;
  567. const std::string s0 = "qwqwqwq";
  568. ncnn::Mat ai0(1);
  569. {
  570. int* p = ai0;
  571. p[0] = 233;
  572. }
  573. ncnn::Mat af0(4);
  574. {
  575. float* p = af0;
  576. p[0] = 2.33f;
  577. p[1] = -0.2f;
  578. p[2] = 0.f;
  579. p[3] = 9494.f;
  580. }
  581. ncnn::ParamDict pd0;
  582. pd0.set(1, i0);
  583. pd0.set(2, ai0);
  584. pd0.set(3, f0);
  585. pd0.set(4, af0);
  586. pd0.set(5, s0);
  587. // copy
  588. {
  589. ncnn::ParamDict pd(pd0);
  590. int ret = compare_paramdict(pd, pd0);
  591. if (ret != 0)
  592. {
  593. fprintf(stderr, "paramdict copy failed\n");
  594. return -1;
  595. }
  596. }
  597. // assign
  598. {
  599. ncnn::ParamDict pd;
  600. pd = pd0;
  601. int ret = compare_paramdict(pd, pd0);
  602. if (ret != 0)
  603. {
  604. fprintf(stderr, "paramdict assign failed\n");
  605. return -1;
  606. }
  607. }
  608. return 0;
  609. }
  610. int main()
  611. {
  612. return 0
  613. || test_paramdict_0()
  614. || test_paramdict_1()
  615. || test_paramdict_2()
  616. || test_paramdict_3()
  617. || test_paramdict_4()
  618. || test_paramdict_5()
  619. || test_paramdict_6();
  620. }