NamedTuplesTest.cpp 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663
  1. //
  2. // NamedTuplesTest.cpp
  3. //
  4. // $Id: //poco/Main/Foundation/testsuite/src/NamedTuplesTest.cpp#1 $
  5. //
  6. // Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
  7. // and Contributors.
  8. //
  9. // Permission is hereby granted, free of charge, to any person or organization
  10. // obtaining a copy of the software and accompanying documentation covered by
  11. // this license (the "Software") to use, reproduce, display, distribute,
  12. // execute, and transmit the Software, and to prepare derivative works of the
  13. // Software, and to permit third-parties to whom the Software is furnished to
  14. // do so, all subject to the following:
  15. //
  16. // The copyright notices in the Software and this entire statement, including
  17. // the above license grant, this restriction and the following disclaimer,
  18. // must be included in all copies of the Software, in whole or in part, and
  19. // all derivative works of the Software, unless such copies or derivative
  20. // works are solely in the form of machine-executable object code generated by
  21. // a source language processor.
  22. //
  23. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  24. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  25. // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
  26. // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
  27. // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
  28. // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  29. // DEALINGS IN THE SOFTWARE.
  30. //
  31. #include "NamedTuplesTest.h"
  32. #include "CppUnit/TestCaller.h"
  33. #include "CppUnit/TestSuite.h"
  34. #include "Poco/NamedTuple.h"
  35. #include "Poco/Exception.h"
  36. using Poco::NamedTuple;
  37. using Poco::Int8;
  38. using Poco::UInt8;
  39. using Poco::Int16;
  40. using Poco::UInt16;
  41. using Poco::Int32;
  42. using Poco::UInt32;
  43. using Poco::Int8;
  44. using Poco::UInt8;
  45. using Poco::Int16;
  46. using Poco::UInt16;
  47. using Poco::Int32;
  48. using Poco::UInt32;
  49. using Poco::NotFoundException;
  50. using Poco::InvalidArgumentException;
  51. NamedTuplesTest::NamedTuplesTest(const std::string& name): CppUnit::TestCase(name)
  52. {
  53. }
  54. NamedTuplesTest::~NamedTuplesTest()
  55. {
  56. }
  57. void NamedTuplesTest::testNamedTuple1()
  58. {
  59. typedef NamedTuple<std::string> TupleType;
  60. TupleType aTuple;
  61. assert (aTuple["A"] == "");
  62. try { int xyz; xyz = aTuple["XYZ"]; }
  63. catch (NotFoundException&) { }
  64. assert (aTuple.length == 1);
  65. TupleType aTuple2("string1", "1");
  66. assert (aTuple2["string1"] == "1");
  67. assert (aTuple != aTuple2);
  68. aTuple = aTuple2;
  69. assert (aTuple == aTuple2);
  70. aTuple2.set<0>("2");
  71. assert (aTuple < aTuple2);
  72. TupleType aTuple3(aTuple2.names());
  73. assert (aTuple3.names() == aTuple2.names());
  74. assert (aTuple3["string1"] == "");
  75. assert (aTuple3.length == 1);
  76. assert (aTuple.getName(0) == "string1");
  77. aTuple.setName(0, "New Name");
  78. assert (aTuple.getName(0) == "New Name");
  79. try { aTuple.setName(20, ""); fail("must fail"); }
  80. catch (InvalidArgumentException&) { }
  81. }
  82. void NamedTuplesTest::testNamedTuple2()
  83. {
  84. typedef NamedTuple<std::string, int> TupleType;
  85. TupleType aTuple;
  86. assert (aTuple["A"] == "");
  87. assert (aTuple["B"] == 0);
  88. try { int xyz; xyz = aTuple["XYZ"]; }
  89. catch (NotFoundException&) { }
  90. assert (aTuple.length == 2);
  91. TupleType aTuple2("string1", "1",
  92. "int1", 1);
  93. assert (aTuple2["string1"] == "1");
  94. assert (aTuple2["int1"] == 1);
  95. assert (aTuple != aTuple2);
  96. aTuple = aTuple2;
  97. assert (aTuple == aTuple2);
  98. aTuple2.get<1>()++;
  99. assert (aTuple < aTuple2);
  100. TupleType aTuple3(aTuple2.names());
  101. assert (aTuple3.names() == aTuple2.names());
  102. assert (aTuple3["string1"] == "");
  103. assert (aTuple3["int1"] == 0);
  104. assert (aTuple3.length == 2);
  105. assert (aTuple.getName(0) == "string1");
  106. aTuple.setName(0, "New Name");
  107. assert (aTuple.getName(0) == "New Name");
  108. try { aTuple.setName(20, ""); fail("must fail"); }
  109. catch (InvalidArgumentException&) { }
  110. }
  111. void NamedTuplesTest::testNamedTuple3()
  112. {
  113. typedef NamedTuple<std::string,
  114. int,
  115. bool> TupleType;
  116. TupleType aTuple;
  117. assert (aTuple["A"] == "");
  118. assert (aTuple["B"] == 0);
  119. assert (aTuple["C"] == false);
  120. try { int xyz; xyz = aTuple["XYZ"]; }
  121. catch (NotFoundException&) { }
  122. assert (aTuple.length == 3);
  123. TupleType aTuple2("string1", "1",
  124. "int1", 1,
  125. "bool1", true);
  126. assert (aTuple2["string1"] == "1");
  127. assert (aTuple2["int1"] == 1);
  128. assert (aTuple2["bool1"] == true);
  129. assert (aTuple != aTuple2);
  130. aTuple = aTuple2;
  131. assert (aTuple == aTuple2);
  132. aTuple2.get<1>()++;
  133. assert (aTuple < aTuple2);
  134. TupleType aTuple3(aTuple2.names());
  135. assert (aTuple3.names() == aTuple2.names());
  136. assert (aTuple3["string1"] == "");
  137. assert (aTuple3["int1"] == 0);
  138. assert (aTuple3["bool1"] == false);
  139. assert (aTuple3.length == 3);
  140. assert (aTuple.getName(0) == "string1");
  141. aTuple.setName(0, "New Name");
  142. assert (aTuple.getName(0) == "New Name");
  143. try { aTuple.setName(20, ""); fail("must fail"); }
  144. catch (InvalidArgumentException&) { }
  145. }
  146. void NamedTuplesTest::testNamedTuple4()
  147. {
  148. typedef NamedTuple<std::string,
  149. int,
  150. bool,
  151. float> TupleType;
  152. TupleType aTuple;
  153. assert (aTuple["A"] == "");
  154. assert (aTuple["B"] == 0);
  155. assert (aTuple["C"] == false);
  156. try { int xyz; xyz = aTuple["XYZ"]; }
  157. catch (NotFoundException&) { }
  158. assert (aTuple.length == 4);
  159. TupleType aTuple2("string1", "1",
  160. "int1", 1,
  161. "bool1", true,
  162. "float1", 1.5f);
  163. assert (aTuple2["string1"] == "1");
  164. assert (aTuple2["int1"] == 1);
  165. assert (aTuple2["bool1"] == true);
  166. assert (aTuple2["float1"] == 1.5);
  167. assert (aTuple != aTuple2);
  168. aTuple = aTuple2;
  169. assert (aTuple == aTuple2);
  170. aTuple2.get<1>()++;
  171. assert (aTuple < aTuple2);
  172. TupleType aTuple3(aTuple2.names());
  173. assert (aTuple3.names() == aTuple2.names());
  174. assert (aTuple3["string1"] == "");
  175. assert (aTuple3["int1"] == 0);
  176. assert (aTuple3["bool1"] == false);
  177. assert (aTuple3.length == 4);
  178. assert (aTuple.getName(0) == "string1");
  179. aTuple.setName(0, "New Name");
  180. assert (aTuple.getName(0) == "New Name");
  181. try { aTuple.setName(20, ""); fail("must fail"); }
  182. catch (InvalidArgumentException&) { }
  183. }
  184. void NamedTuplesTest::testNamedTuple5()
  185. {
  186. typedef NamedTuple<std::string,
  187. int,
  188. bool,
  189. float,
  190. char> TupleType;
  191. TupleType aTuple;
  192. assert (aTuple["A"] == "");
  193. assert (aTuple["B"] == 0);
  194. assert (aTuple["C"] == false);
  195. assert (aTuple["E"] == 0);
  196. try { int xyz; xyz = aTuple["XYZ"]; }
  197. catch (NotFoundException&) { }
  198. assert (aTuple.length == 5);
  199. TupleType aTuple2("string1", "1",
  200. "int1", 1,
  201. "bool1", true,
  202. "float1", 1.5f,
  203. "char1", 'c');
  204. assert (aTuple2["string1"] == "1");
  205. assert (aTuple2["int1"] == 1);
  206. assert (aTuple2["bool1"] == true);
  207. assert (aTuple2["float1"] == 1.5);
  208. assert (aTuple2["char1"] == 'c');
  209. assert (aTuple != aTuple2);
  210. aTuple = aTuple2;
  211. assert (aTuple == aTuple2);
  212. aTuple2.get<1>()++;
  213. assert (aTuple < aTuple2);
  214. TupleType aTuple3(aTuple2.names());
  215. assert (aTuple3.names() == aTuple2.names());
  216. assert (aTuple3["string1"] == "");
  217. assert (aTuple3["int1"] == 0);
  218. assert (aTuple3["bool1"] == false);
  219. assert (aTuple3["char1"] == 0);
  220. assert (aTuple3.length == 5);
  221. assert (aTuple.getName(0) == "string1");
  222. aTuple.setName(0, "New Name");
  223. assert (aTuple.getName(0) == "New Name");
  224. try { aTuple.setName(20, ""); fail("must fail"); }
  225. catch (InvalidArgumentException&) { }
  226. }
  227. void NamedTuplesTest::testNamedTuple6()
  228. {
  229. typedef NamedTuple<std::string,
  230. int,
  231. bool,
  232. float,
  233. char,
  234. long> TupleType;
  235. TupleType aTuple;
  236. assert (aTuple["A"] == "");
  237. assert (aTuple["B"] == 0);
  238. assert (aTuple["C"] == false);
  239. assert (aTuple["E"] == 0);
  240. assert (aTuple["F"] == 0);
  241. try { int xyz; xyz = aTuple["XYZ"]; }
  242. catch (NotFoundException&) { }
  243. assert (aTuple.length == 6);
  244. TupleType aTuple2("string1", "1",
  245. "int1", 1,
  246. "bool1", true,
  247. "float1", 1.5f,
  248. "char1", 'c',
  249. "long1", 999);
  250. assert (aTuple2["string1"] == "1");
  251. assert (aTuple2["int1"] == 1);
  252. assert (aTuple2["bool1"] == true);
  253. assert (aTuple2["float1"] == 1.5);
  254. assert (aTuple2["char1"] == 'c');
  255. assert (aTuple2["long1"] == 999);
  256. assert (aTuple != aTuple2);
  257. aTuple = aTuple2;
  258. assert (aTuple == aTuple2);
  259. aTuple2.get<1>()++;
  260. assert (aTuple < aTuple2);
  261. TupleType aTuple3(aTuple2.names());
  262. assert (aTuple3.names() == aTuple2.names());
  263. assert (aTuple3["string1"] == "");
  264. assert (aTuple3["int1"] == 0);
  265. assert (aTuple3["bool1"] == false);
  266. assert (aTuple3["char1"] == 0);
  267. assert (aTuple3["long1"] == 0);
  268. assert (aTuple3.length == 6);
  269. assert (aTuple.getName(0) == "string1");
  270. aTuple.setName(0, "New Name");
  271. assert (aTuple.getName(0) == "New Name");
  272. try { aTuple.setName(20, ""); fail("must fail"); }
  273. catch (InvalidArgumentException&) { }
  274. }
  275. void NamedTuplesTest::testNamedTuple7()
  276. {
  277. typedef NamedTuple<std::string,
  278. int,
  279. bool,
  280. float,
  281. char,
  282. long,
  283. double> TupleType;
  284. TupleType aTuple;
  285. assert (aTuple["A"] == "");
  286. assert (aTuple["B"] == 0);
  287. assert (aTuple["C"] == false);
  288. assert (aTuple["E"] == 0);
  289. assert (aTuple["F"] == 0);
  290. try { int xyz; xyz = aTuple["XYZ"]; }
  291. catch (NotFoundException&) { }
  292. assert (aTuple.length == 7);
  293. TupleType aTuple2("string1", "1",
  294. "int1", 1,
  295. "bool1", true,
  296. "float1", 1.5f,
  297. "char1", 'c',
  298. "long1", 999,
  299. "double1", 1.5);
  300. assert (aTuple2["string1"] == "1");
  301. assert (aTuple2["int1"] == 1);
  302. assert (aTuple2["bool1"] == true);
  303. assert (aTuple2["float1"] == 1.5);
  304. assert (aTuple2["char1"] == 'c');
  305. assert (aTuple2["long1"] == 999);
  306. assert (aTuple2["double1"] == 1.5);
  307. assert (aTuple != aTuple2);
  308. aTuple = aTuple2;
  309. assert (aTuple == aTuple2);
  310. aTuple2.get<1>()++;
  311. assert (aTuple < aTuple2);
  312. TupleType aTuple3(aTuple2.names());
  313. assert (aTuple3.names() == aTuple2.names());
  314. assert (aTuple3["string1"] == "");
  315. assert (aTuple3["int1"] == 0);
  316. assert (aTuple3["bool1"] == false);
  317. assert (aTuple3["char1"] == 0);
  318. assert (aTuple3["long1"] == 0);
  319. assert (aTuple3.length == 7);
  320. assert (aTuple.getName(0) == "string1");
  321. aTuple.setName(0, "New Name");
  322. assert (aTuple.getName(0) == "New Name");
  323. try { aTuple.setName(20, ""); fail("must fail"); }
  324. catch (InvalidArgumentException&) { }
  325. }
  326. void NamedTuplesTest::testNamedTuple8()
  327. {
  328. typedef NamedTuple<std::string,
  329. int,
  330. bool,
  331. float,
  332. char,
  333. long,
  334. double,
  335. short> TupleType;
  336. TupleType aTuple;
  337. assert (aTuple["A"] == "");
  338. assert (aTuple["B"] == 0);
  339. assert (aTuple["C"] == false);
  340. assert (aTuple["E"] == 0);
  341. assert (aTuple["F"] == 0);
  342. assert (aTuple["H"] == 0);
  343. try { int xyz; xyz = aTuple["XYZ"]; }
  344. catch (NotFoundException&) { }
  345. assert (aTuple.length == 8);
  346. TupleType aTuple2("string1", "1",
  347. "int1", 1,
  348. "bool1", true,
  349. "float1", 1.5f,
  350. "char1", 'c',
  351. "long1", 999,
  352. "double1", 1.5,
  353. "short1", 32700);
  354. assert (aTuple2["string1"] == "1");
  355. assert (aTuple2["int1"] == 1);
  356. assert (aTuple2["bool1"] == true);
  357. assert (aTuple2["float1"] == 1.5);
  358. assert (aTuple2["char1"] == 'c');
  359. assert (aTuple2["long1"] == 999);
  360. assert (aTuple2["double1"] == 1.5);
  361. assert (aTuple2["short1"] == 32700);
  362. assert (aTuple != aTuple2);
  363. aTuple = aTuple2;
  364. assert (aTuple == aTuple2);
  365. aTuple2.get<1>()++;
  366. assert (aTuple < aTuple2);
  367. TupleType aTuple3(aTuple2.names());
  368. assert (aTuple3.names() == aTuple2.names());
  369. assert (aTuple3["string1"] == "");
  370. assert (aTuple3["int1"] == 0);
  371. assert (aTuple3["bool1"] == false);
  372. assert (aTuple3["char1"] == 0);
  373. assert (aTuple3["long1"] == 0);
  374. assert (aTuple3["short1"] == 0);
  375. assert (aTuple3.length == 8);
  376. assert (aTuple.getName(0) == "string1");
  377. aTuple.setName(0, "New Name");
  378. assert (aTuple.getName(0) == "New Name");
  379. try { aTuple.setName(20, ""); fail("must fail"); }
  380. catch (InvalidArgumentException&) { }
  381. }
  382. void NamedTuplesTest::testNamedTuple9()
  383. {
  384. typedef NamedTuple<std::string,
  385. int,
  386. bool,
  387. float,
  388. char,
  389. long,
  390. double,
  391. short,
  392. std::string> TupleType;
  393. TupleType aTuple;
  394. assert (aTuple["A"] == "");
  395. assert (aTuple["B"] == 0);
  396. assert (aTuple["C"] == false);
  397. assert (aTuple["E"] == 0);
  398. assert (aTuple["F"] == 0);
  399. assert (aTuple["H"] == 0);
  400. assert (aTuple["I"] == "");
  401. try { int xyz; xyz = aTuple["XYZ"]; }
  402. catch (NotFoundException&) { }
  403. assert (aTuple.length == 9);
  404. TupleType aTuple2("string1", "1",
  405. "int1", 1,
  406. "bool1", true,
  407. "float1", 1.5f,
  408. "char1", 'c',
  409. "long1", 999,
  410. "double1", 1.5,
  411. "short1", 32700,
  412. "string2", "2");
  413. assert (aTuple2["string1"] == "1");
  414. assert (aTuple2["int1"] == 1);
  415. assert (aTuple2["bool1"] == true);
  416. assert (aTuple2["float1"] == 1.5);
  417. assert (aTuple2["char1"] == 'c');
  418. assert (aTuple2["long1"] == 999);
  419. assert (aTuple2["double1"] == 1.5);
  420. assert (aTuple2["short1"] == 32700);
  421. assert (aTuple2["string2"] == "2");
  422. assert (aTuple != aTuple2);
  423. aTuple = aTuple2;
  424. assert (aTuple == aTuple2);
  425. aTuple2.get<1>()++;
  426. assert (aTuple < aTuple2);
  427. TupleType aTuple3(aTuple2.names());
  428. assert (aTuple3.names() == aTuple2.names());
  429. assert (aTuple3["string1"] == "");
  430. assert (aTuple3["int1"] == 0);
  431. assert (aTuple3["bool1"] == false);
  432. assert (aTuple3["char1"] == 0);
  433. assert (aTuple3["long1"] == 0);
  434. assert (aTuple3["short1"] == 0);
  435. assert (aTuple3["string2"] == "");
  436. assert (aTuple3.length == 9);
  437. assert (aTuple.getName(0) == "string1");
  438. aTuple.setName(0, "New Name");
  439. assert (aTuple.getName(0) == "New Name");
  440. try { aTuple.setName(20, ""); fail("must fail"); }
  441. catch (InvalidArgumentException&) { }
  442. }
  443. void NamedTuplesTest::testNamedTuple10()
  444. {
  445. typedef NamedTuple<std::string,
  446. int,
  447. bool,
  448. float,
  449. char,
  450. long,
  451. double,
  452. short,
  453. std::string,
  454. int> TupleType;
  455. TupleType aTuple;
  456. assert (aTuple["A"] == "");
  457. assert (aTuple["B"] == 0);
  458. assert (aTuple["C"] == false);
  459. assert (aTuple["E"] == 0);
  460. assert (aTuple["F"] == 0);
  461. assert (aTuple["H"] == 0);
  462. assert (aTuple["I"] == "");
  463. assert (aTuple["J"] == 0);
  464. try { int xyz; xyz = aTuple["XYZ"]; }
  465. catch (NotFoundException&) { }
  466. assert (aTuple.length == 10);
  467. TupleType aTuple2("string1", "1",
  468. "int1", 1,
  469. "bool1", true,
  470. "float1", 1.5f,
  471. "char1", 'c',
  472. "long1", 999,
  473. "double1", 1.5,
  474. "short1", 32700,
  475. "string2", "2",
  476. "int2", 2 );
  477. assert (aTuple2["string1"] == "1");
  478. assert (aTuple2["int1"] == 1);
  479. assert (aTuple2["bool1"] == true);
  480. assert (aTuple2["float1"] == 1.5);
  481. assert (aTuple2["char1"] == 'c');
  482. assert (aTuple2["long1"] == 999);
  483. assert (aTuple2["double1"] == 1.5);
  484. assert (aTuple2["short1"] == 32700);
  485. assert (aTuple2["string2"] == "2");
  486. assert (aTuple2["int2"] == 2);
  487. assert (aTuple != aTuple2);
  488. aTuple = aTuple2;
  489. assert (aTuple == aTuple2);
  490. aTuple2.get<1>()++;
  491. assert (aTuple < aTuple2);
  492. TupleType aTuple3(aTuple2.names());
  493. assert (aTuple3.names() == aTuple2.names());
  494. assert (aTuple3["string1"] == "");
  495. assert (aTuple3["int1"] == 0);
  496. assert (aTuple3["bool1"] == false);
  497. assert (aTuple3["char1"] == 0);
  498. assert (aTuple3["long1"] == 0);
  499. assert (aTuple3["short1"] == 0);
  500. assert (aTuple3["string2"] == "");
  501. assert (aTuple3["int2"] == 0);
  502. assert (aTuple3.length == 10);
  503. assert (aTuple.getName(0) == "string1");
  504. aTuple.setName(0, "New Name");
  505. assert (aTuple.getName(0) == "New Name");
  506. try { aTuple.setName(20, ""); fail("must fail"); }
  507. catch (InvalidArgumentException&) { }
  508. }
  509. void NamedTuplesTest::testNamedTuple11()
  510. {
  511. typedef NamedTuple<std::string,
  512. int,
  513. bool,
  514. float,
  515. char,
  516. long,
  517. double,
  518. short,
  519. std::string,
  520. int,
  521. std::string> TupleType;
  522. TupleType aTuple;
  523. assert (aTuple["A"] == "");
  524. assert (aTuple["B"] == 0);
  525. assert (aTuple["C"] == false);
  526. assert (aTuple["E"] == 0);
  527. assert (aTuple["F"] == 0);
  528. assert (aTuple["H"] == 0);
  529. assert (aTuple["I"] == "");
  530. assert (aTuple["J"] == 0);
  531. assert (aTuple["K"] == "");
  532. try { int xyz; xyz = aTuple["XYZ"]; }
  533. catch (NotFoundException&) { }
  534. assert (aTuple.length == 11);
  535. TupleType aTuple2("string1", "1",
  536. "int1", 1,
  537. "bool1", true,
  538. "float1", 1.5f,
  539. "char1", 'c',
  540. "long1", 999,
  541. "double1", 1.5,
  542. "short1", 32700,
  543. "string2", "2",
  544. "int2", 2,
  545. "string3", "3");
  546. assert (aTuple2["string1"] == "1");
  547. assert (aTuple2["int1"] == 1);
  548. assert (aTuple2["bool1"] == true);
  549. assert (aTuple2["float1"] == 1.5);
  550. assert (aTuple2["char1"] == 'c');
  551. assert (aTuple2["long1"] == 999);
  552. assert (aTuple2["double1"] == 1.5);
  553. assert (aTuple2["short1"] == 32700);
  554. assert (aTuple2["string2"] == "2");
  555. assert (aTuple2["int2"] == 2);
  556. assert (aTuple2["string3"] == "3");
  557. assert (aTuple != aTuple2);
  558. aTuple = aTuple2;
  559. assert (aTuple == aTuple2);
  560. aTuple2.get<1>()++;
  561. assert (aTuple < aTuple2);
  562. TupleType aTuple3(aTuple2.names());
  563. assert (aTuple3.names() == aTuple2.names());
  564. assert (aTuple3["string1"] == "");
  565. assert (aTuple3["int1"] == 0);
  566. assert (aTuple3["bool1"] == false);
  567. assert (aTuple3["char1"] == 0);
  568. assert (aTuple3["long1"] == 0);
  569. assert (aTuple3["short1"] == 0);
  570. assert (aTuple3["string2"] == "");
  571. assert (aTuple3["int2"] == 0);
  572. assert (aTuple3["string3"] == "");
  573. assert (aTuple3.length == 11);
  574. assert (aTuple.getName(0) == "string1");
  575. aTuple.setName(0, "New Name");
  576. assert (aTuple.getName(0) == "New Name");
  577. try { aTuple.setName(20, ""); fail("must fail"); }
  578. catch (InvalidArgumentException&) { }
  579. }
  580. void NamedTuplesTest::testNamedTuple12()
  581. {
  582. typedef NamedTuple<std::string,
  583. int,
  584. bool,
  585. float,
  586. char,
  587. long,
  588. double,
  589. short,
  590. std::string,
  591. int,
  592. std::string,
  593. int> TupleType;
  594. TupleType aTuple;
  595. assert (aTuple["A"] == "");
  596. assert (aTuple["B"] == 0);
  597. assert (aTuple["C"] == false);
  598. assert (aTuple["E"] == 0);
  599. assert (aTuple["F"] == 0);
  600. assert (aTuple["H"] == 0);
  601. assert (aTuple["I"] == "");
  602. assert (aTuple["J"] == 0);
  603. assert (aTuple["K"] == "");
  604. assert (aTuple["L"] == 0);
  605. try { int xyz; xyz = aTuple["XYZ"]; }
  606. catch (NotFoundException&) { }
  607. assert (aTuple.length == 12);
  608. TupleType aTuple2("string1", "1",
  609. "int1", 1,
  610. "bool1", true,
  611. "float1", 1.5f,
  612. "char1", 'c',
  613. "long1", 999,
  614. "double1", 1.5,
  615. "short1", 32700,
  616. "string2", "2",
  617. "int2", 2,
  618. "string3", "3",
  619. "int3", 3);
  620. assert (aTuple2["string1"] == "1");
  621. assert (aTuple2["int1"] == 1);
  622. assert (aTuple2["bool1"] == true);
  623. assert (aTuple2["float1"] == 1.5);
  624. assert (aTuple2["char1"] == 'c');
  625. assert (aTuple2["long1"] == 999);
  626. assert (aTuple2["double1"] == 1.5);
  627. assert (aTuple2["short1"] == 32700);
  628. assert (aTuple2["string2"] == "2");
  629. assert (aTuple2["int2"] == 2);
  630. assert (aTuple2["string3"] == "3");
  631. assert (aTuple2["int3"] == 3);
  632. assert (aTuple != aTuple2);
  633. aTuple = aTuple2;
  634. assert (aTuple == aTuple2);
  635. aTuple2.get<1>()++;
  636. assert (aTuple < aTuple2);
  637. TupleType aTuple3(aTuple2.names());
  638. assert (aTuple3.names() == aTuple2.names());
  639. assert (aTuple3["string1"] == "");
  640. assert (aTuple3["int1"] == 0);
  641. assert (aTuple3["bool1"] == false);
  642. assert (aTuple3["char1"] == 0);
  643. assert (aTuple3["long1"] == 0);
  644. assert (aTuple3["short1"] == 0);
  645. assert (aTuple3["string2"] == "");
  646. assert (aTuple3["int2"] == 0);
  647. assert (aTuple3["string3"] == "");
  648. assert (aTuple3.length == 12);
  649. assert (aTuple.getName(0) == "string1");
  650. aTuple.setName(0, "New Name");
  651. assert (aTuple.getName(0) == "New Name");
  652. try { aTuple.setName(20, ""); fail("must fail"); }
  653. catch (InvalidArgumentException&) { }
  654. }
  655. void NamedTuplesTest::testNamedTuple13()
  656. {
  657. typedef NamedTuple<std::string,
  658. int,
  659. bool,
  660. float,
  661. char,
  662. long,
  663. double,
  664. short,
  665. std::string,
  666. int,
  667. std::string,
  668. int,
  669. bool> TupleType;
  670. TupleType aTuple;
  671. assert (aTuple["A"] == "");
  672. assert (aTuple["B"] == 0);
  673. assert (aTuple["C"] == false);
  674. assert (aTuple["E"] == 0);
  675. assert (aTuple["F"] == 0);
  676. assert (aTuple["H"] == 0);
  677. assert (aTuple["I"] == "");
  678. assert (aTuple["J"] == 0);
  679. assert (aTuple["K"] == "");
  680. assert (aTuple["L"] == 0);
  681. assert (aTuple["M"] == false);
  682. try { int xyz; xyz = aTuple["XYZ"]; }
  683. catch (NotFoundException&) { }
  684. assert (aTuple.length == 13);
  685. TupleType aTuple2("string1", "1",
  686. "int1", 1,
  687. "bool1", true,
  688. "float1", 1.5f,
  689. "char1", 'c',
  690. "long1", 999,
  691. "double1", 1.5,
  692. "short1", 32700,
  693. "string2", "2",
  694. "int2", 2,
  695. "string3", "3",
  696. "int3", 3,
  697. "bool2", true);
  698. assert (aTuple2["string1"] == "1");
  699. assert (aTuple2["int1"] == 1);
  700. assert (aTuple2["bool1"] == true);
  701. assert (aTuple2["float1"] == 1.5);
  702. assert (aTuple2["char1"] == 'c');
  703. assert (aTuple2["long1"] == 999);
  704. assert (aTuple2["double1"] == 1.5);
  705. assert (aTuple2["short1"] == 32700);
  706. assert (aTuple2["string2"] == "2");
  707. assert (aTuple2["int2"] == 2);
  708. assert (aTuple2["string3"] == "3");
  709. assert (aTuple2["int3"] == 3);
  710. assert (aTuple2["bool2"] == true);
  711. assert (aTuple != aTuple2);
  712. aTuple = aTuple2;
  713. assert (aTuple == aTuple2);
  714. aTuple2.get<1>()++;
  715. assert (aTuple < aTuple2);
  716. TupleType aTuple3(aTuple2.names());
  717. assert (aTuple3.names() == aTuple2.names());
  718. assert (aTuple3["string1"] == "");
  719. assert (aTuple3["int1"] == 0);
  720. assert (aTuple3["bool1"] == false);
  721. assert (aTuple3["char1"] == 0);
  722. assert (aTuple3["long1"] == 0);
  723. assert (aTuple3["short1"] == 0);
  724. assert (aTuple3["string2"] == "");
  725. assert (aTuple3["int2"] == 0);
  726. assert (aTuple3["string3"] == "");
  727. assert (aTuple3.length == 13);
  728. assert (aTuple.getName(0) == "string1");
  729. aTuple.setName(0, "New Name");
  730. assert (aTuple.getName(0) == "New Name");
  731. try { aTuple.setName(20, ""); fail("must fail"); }
  732. catch (InvalidArgumentException&) { }
  733. }
  734. void NamedTuplesTest::testNamedTuple14()
  735. {
  736. typedef NamedTuple<std::string,
  737. int,
  738. bool,
  739. float,
  740. char,
  741. long,
  742. double,
  743. short,
  744. std::string,
  745. int,
  746. std::string,
  747. int,
  748. bool,
  749. float> TupleType;
  750. TupleType aTuple;
  751. assert (aTuple["A"] == "");
  752. assert (aTuple["B"] == 0);
  753. assert (aTuple["C"] == false);
  754. assert (aTuple["E"] == 0);
  755. assert (aTuple["F"] == 0);
  756. assert (aTuple["H"] == 0);
  757. assert (aTuple["I"] == "");
  758. assert (aTuple["J"] == 0);
  759. assert (aTuple["K"] == "");
  760. assert (aTuple["L"] == 0);
  761. assert (aTuple["M"] == false);
  762. try { int xyz; xyz = aTuple["XYZ"]; }
  763. catch (NotFoundException&) { }
  764. assert (aTuple.length == 14);
  765. TupleType aTuple2("string1", "1",
  766. "int1", 1,
  767. "bool1", true,
  768. "float1", 1.5f,
  769. "char1", 'c',
  770. "long1", 999,
  771. "double1", 1.5,
  772. "short1", 32700,
  773. "string2", "2",
  774. "int2", 2,
  775. "string3", "3",
  776. "int3", 3,
  777. "bool2", true,
  778. "float2", 2.5);
  779. assert (aTuple2["string1"] == "1");
  780. assert (aTuple2["int1"] == 1);
  781. assert (aTuple2["bool1"] == true);
  782. assert (aTuple2["float1"] == 1.5);
  783. assert (aTuple2["char1"] == 'c');
  784. assert (aTuple2["long1"] == 999);
  785. assert (aTuple2["double1"] == 1.5);
  786. assert (aTuple2["short1"] == 32700);
  787. assert (aTuple2["string2"] == "2");
  788. assert (aTuple2["int2"] == 2);
  789. assert (aTuple2["string3"] == "3");
  790. assert (aTuple2["int3"] == 3);
  791. assert (aTuple2["bool2"] == true);
  792. assert (aTuple2["float2"] == 2.5);
  793. assert (aTuple != aTuple2);
  794. aTuple = aTuple2;
  795. assert (aTuple == aTuple2);
  796. aTuple2.get<1>()++;
  797. assert (aTuple < aTuple2);
  798. TupleType aTuple3(aTuple2.names());
  799. assert (aTuple3.names() == aTuple2.names());
  800. assert (aTuple3["string1"] == "");
  801. assert (aTuple3["int1"] == 0);
  802. assert (aTuple3["bool1"] == false);
  803. assert (aTuple3["char1"] == 0);
  804. assert (aTuple3["long1"] == 0);
  805. assert (aTuple3["short1"] == 0);
  806. assert (aTuple3["string2"] == "");
  807. assert (aTuple3["int2"] == 0);
  808. assert (aTuple3["string3"] == "");
  809. assert (aTuple3["int3"] == 0);
  810. assert (aTuple3.length == 14);
  811. assert (aTuple.getName(0) == "string1");
  812. aTuple.setName(0, "New Name");
  813. assert (aTuple.getName(0) == "New Name");
  814. try { aTuple.setName(20, ""); fail("must fail"); }
  815. catch (InvalidArgumentException&) { }
  816. }
  817. void NamedTuplesTest::testNamedTuple15()
  818. {
  819. typedef NamedTuple<std::string,
  820. int,
  821. bool,
  822. float,
  823. char,
  824. long,
  825. double,
  826. short,
  827. std::string,
  828. int,
  829. std::string,
  830. int,
  831. bool,
  832. float,
  833. char> TupleType;
  834. TupleType aTuple;
  835. assert (aTuple["A"] == "");
  836. assert (aTuple["B"] == 0);
  837. assert (aTuple["C"] == false);
  838. assert (aTuple["E"] == 0);
  839. assert (aTuple["F"] == 0);
  840. assert (aTuple["H"] == 0);
  841. assert (aTuple["I"] == "");
  842. assert (aTuple["J"] == 0);
  843. assert (aTuple["K"] == "");
  844. assert (aTuple["L"] == 0);
  845. assert (aTuple["M"] == false);
  846. try { int xyz; xyz = aTuple["XYZ"]; }
  847. catch (NotFoundException&) { }
  848. assert (aTuple.length == 15);
  849. TupleType aTuple2("string1", "1",
  850. "int1", 1,
  851. "bool1", true,
  852. "float1", 1.5f,
  853. "char1", 'c',
  854. "long1", 999,
  855. "double1", 1.5,
  856. "short1", 32700,
  857. "string2", "2",
  858. "int2", 2,
  859. "string3", "3",
  860. "int3", 3,
  861. "bool2", true,
  862. "float2", 2.5,
  863. "char2", 'c');
  864. assert (aTuple2["string1"] == "1");
  865. assert (aTuple2["int1"] == 1);
  866. assert (aTuple2["bool1"] == true);
  867. assert (aTuple2["float1"] == 1.5);
  868. assert (aTuple2["char1"] == 'c');
  869. assert (aTuple2["long1"] == 999);
  870. assert (aTuple2["double1"] == 1.5);
  871. assert (aTuple2["short1"] == 32700);
  872. assert (aTuple2["string2"] == "2");
  873. assert (aTuple2["int2"] == 2);
  874. assert (aTuple2["string3"] == "3");
  875. assert (aTuple2["int3"] == 3);
  876. assert (aTuple2["bool2"] == true);
  877. assert (aTuple2["float2"] == 2.5);
  878. assert (aTuple2["char2"] == 'c');
  879. assert (aTuple != aTuple2);
  880. aTuple = aTuple2;
  881. assert (aTuple == aTuple2);
  882. aTuple2.get<1>()++;
  883. assert (aTuple < aTuple2);
  884. TupleType aTuple3(aTuple2.names());
  885. assert (aTuple3.names() == aTuple2.names());
  886. assert (aTuple3["string1"] == "");
  887. assert (aTuple3["int1"] == 0);
  888. assert (aTuple3["bool1"] == false);
  889. assert (aTuple3["char1"] == 0);
  890. assert (aTuple3["long1"] == 0);
  891. assert (aTuple3["short1"] == 0);
  892. assert (aTuple3["string2"] == "");
  893. assert (aTuple3["int2"] == 0);
  894. assert (aTuple3["string3"] == "");
  895. assert (aTuple3["int3"] == 0);
  896. assert (aTuple3["bool2"] == false);
  897. assert (aTuple3.length == 15);
  898. assert (aTuple.getName(0) == "string1");
  899. aTuple.setName(0, "New Name");
  900. assert (aTuple.getName(0) == "New Name");
  901. try { aTuple.setName(20, ""); fail("must fail"); }
  902. catch (InvalidArgumentException&) { }
  903. }
  904. void NamedTuplesTest::testNamedTuple16()
  905. {
  906. typedef NamedTuple<std::string,
  907. int,
  908. bool,
  909. float,
  910. char,
  911. long,
  912. double,
  913. short,
  914. std::string,
  915. int,
  916. std::string,
  917. int,
  918. bool,
  919. float,
  920. char,
  921. long> TupleType;
  922. TupleType aTuple;
  923. assert (aTuple["A"] == "");
  924. assert (aTuple["B"] == 0);
  925. assert (aTuple["C"] == false);
  926. assert (aTuple["E"] == 0);
  927. assert (aTuple["F"] == 0);
  928. assert (aTuple["H"] == 0);
  929. assert (aTuple["I"] == "");
  930. assert (aTuple["J"] == 0);
  931. assert (aTuple["K"] == "");
  932. assert (aTuple["L"] == 0);
  933. assert (aTuple["M"] == false);
  934. assert (aTuple["O"] == 0);
  935. try { int xyz; xyz = aTuple["XYZ"]; }
  936. catch (NotFoundException&) { }
  937. assert (aTuple.length == 16);
  938. TupleType aTuple2("string1", "1",
  939. "int1", 1,
  940. "bool1", true,
  941. "float1", 1.5f,
  942. "char1", 'c',
  943. "long1", 999,
  944. "double1", 1.5,
  945. "short1", 32700,
  946. "string2", "2",
  947. "int2", 2,
  948. "string3", "3",
  949. "int3", 3,
  950. "bool2", true,
  951. "float2", 2.5,
  952. "char2", 'c',
  953. "long2", 999);
  954. assert (aTuple2["string1"] == "1");
  955. assert (aTuple2["int1"] == 1);
  956. assert (aTuple2["bool1"] == true);
  957. assert (aTuple2["float1"] == 1.5);
  958. assert (aTuple2["char1"] == 'c');
  959. assert (aTuple2["long1"] == 999);
  960. assert (aTuple2["double1"] == 1.5);
  961. assert (aTuple2["short1"] == 32700);
  962. assert (aTuple2["string2"] == "2");
  963. assert (aTuple2["int2"] == 2);
  964. assert (aTuple2["string3"] == "3");
  965. assert (aTuple2["int3"] == 3);
  966. assert (aTuple2["bool2"] == true);
  967. assert (aTuple2["float2"] == 2.5);
  968. assert (aTuple2["char2"] == 'c');
  969. assert (aTuple2["long2"] == 999);
  970. assert (aTuple2.length == 16);
  971. assert (aTuple != aTuple2);
  972. aTuple = aTuple2;
  973. assert (aTuple == aTuple2);
  974. aTuple2.get<1>()++;
  975. assert (aTuple < aTuple2);
  976. TupleType aTuple3(aTuple2.names());
  977. assert (aTuple3.names() == aTuple2.names());
  978. assert (aTuple3["string1"] == "");
  979. assert (aTuple3["int1"] == 0);
  980. assert (aTuple3["bool1"] == false);
  981. assert (aTuple3["char1"] == 0);
  982. assert (aTuple3["long1"] == 0);
  983. assert (aTuple3["short1"] == 0);
  984. assert (aTuple3["string2"] == "");
  985. assert (aTuple3["int2"] == 0);
  986. assert (aTuple3["string3"] == "");
  987. assert (aTuple3["int3"] == 0);
  988. assert (aTuple3["bool2"] == false);
  989. assert (aTuple3["char2"] == 0);
  990. assert (aTuple3.length == 16);
  991. assert (aTuple.getName(0) == "string1");
  992. aTuple.setName(0, "New Name");
  993. assert (aTuple.getName(0) == "New Name");
  994. try { aTuple.setName(20, ""); fail("must fail"); }
  995. catch (InvalidArgumentException&) { }
  996. }
  997. void NamedTuplesTest::testNamedTuple17()
  998. {
  999. typedef NamedTuple<std::string,
  1000. int,
  1001. bool,
  1002. float,
  1003. char,
  1004. long,
  1005. double,
  1006. short,
  1007. std::string,
  1008. int,
  1009. std::string,
  1010. int,
  1011. bool,
  1012. float,
  1013. char,
  1014. long,
  1015. double> TupleType;
  1016. TupleType aTuple;
  1017. assert (aTuple["A"] == "");
  1018. assert (aTuple["B"] == 0);
  1019. assert (aTuple["C"] == false);
  1020. assert (aTuple["E"] == 0);
  1021. assert (aTuple["F"] == 0);
  1022. assert (aTuple["H"] == 0);
  1023. assert (aTuple["I"] == "");
  1024. assert (aTuple["J"] == 0);
  1025. assert (aTuple["K"] == "");
  1026. assert (aTuple["L"] == 0);
  1027. assert (aTuple["M"] == false);
  1028. assert (aTuple["O"] == 0);
  1029. assert (aTuple["P"] == 0);
  1030. try { int xyz; xyz = aTuple["XYZ"]; }
  1031. catch (NotFoundException&) { }
  1032. assert (aTuple.length == 17);
  1033. TupleType aTuple2("string1", "1",
  1034. "int1", 1,
  1035. "bool1", true,
  1036. "float1", 1.5f,
  1037. "char1", 'c',
  1038. "long1", 999,
  1039. "double1", 1.5,
  1040. "short1", 32700,
  1041. "string2", "2",
  1042. "int2", 2,
  1043. "string3", "3",
  1044. "int3", 3,
  1045. "bool2", true,
  1046. "float2", 2.5,
  1047. "char2", 'c',
  1048. "long2", 999,
  1049. "double2", 2.5);
  1050. assert (aTuple2["string1"] == "1");
  1051. assert (aTuple2["int1"] == 1);
  1052. assert (aTuple2["bool1"] == true);
  1053. assert (aTuple2["float1"] == 1.5);
  1054. assert (aTuple2["char1"] == 'c');
  1055. assert (aTuple2["long1"] == 999);
  1056. assert (aTuple2["double1"] == 1.5);
  1057. assert (aTuple2["short1"] == 32700);
  1058. assert (aTuple2["string2"] == "2");
  1059. assert (aTuple2["int2"] == 2);
  1060. assert (aTuple2["string3"] == "3");
  1061. assert (aTuple2["int3"] == 3);
  1062. assert (aTuple2["bool2"] == true);
  1063. assert (aTuple2["float2"] == 2.5);
  1064. assert (aTuple2["char2"] == 'c');
  1065. assert (aTuple2["long2"] == 999);
  1066. assert (aTuple2["float2"] == 2.5);
  1067. assert (aTuple2.length == 17);
  1068. assert (aTuple != aTuple2);
  1069. aTuple = aTuple2;
  1070. assert (aTuple == aTuple2);
  1071. aTuple2.get<1>()++;
  1072. assert (aTuple < aTuple2);
  1073. TupleType aTuple3(aTuple2.names());
  1074. assert (aTuple3.names() == aTuple2.names());
  1075. assert (aTuple3["string1"] == "");
  1076. assert (aTuple3["int1"] == 0);
  1077. assert (aTuple3["bool1"] == false);
  1078. assert (aTuple3["char1"] == 0);
  1079. assert (aTuple3["long1"] == 0);
  1080. assert (aTuple3["short1"] == 0);
  1081. assert (aTuple3["string2"] == "");
  1082. assert (aTuple3["int2"] == 0);
  1083. assert (aTuple3["string3"] == "");
  1084. assert (aTuple3["int3"] == 0);
  1085. assert (aTuple3["bool2"] == false);
  1086. assert (aTuple3["char2"] == 0);
  1087. assert (aTuple3["long2"] == 0);
  1088. assert (aTuple3.length == 17);
  1089. assert (aTuple.getName(0) == "string1");
  1090. aTuple.setName(0, "New Name");
  1091. assert (aTuple.getName(0) == "New Name");
  1092. try { aTuple.setName(20, ""); fail("must fail"); }
  1093. catch (InvalidArgumentException&) { }
  1094. }
  1095. void NamedTuplesTest::testNamedTuple18()
  1096. {
  1097. typedef NamedTuple<std::string,
  1098. int,
  1099. bool,
  1100. float,
  1101. char,
  1102. long,
  1103. double,
  1104. short,
  1105. std::string,
  1106. int,
  1107. std::string,
  1108. int,
  1109. bool,
  1110. float,
  1111. char,
  1112. long,
  1113. double,
  1114. short> TupleType;
  1115. TupleType aTuple;
  1116. assert (aTuple["A"] == "");
  1117. assert (aTuple["B"] == 0);
  1118. assert (aTuple["C"] == false);
  1119. assert (aTuple["E"] == 0);
  1120. assert (aTuple["F"] == 0);
  1121. assert (aTuple["H"] == 0);
  1122. assert (aTuple["I"] == "");
  1123. assert (aTuple["J"] == 0);
  1124. assert (aTuple["K"] == "");
  1125. assert (aTuple["L"] == 0);
  1126. assert (aTuple["M"] == false);
  1127. assert (aTuple["O"] == 0);
  1128. assert (aTuple["P"] == 0);
  1129. assert (aTuple["R"] == 0);
  1130. try { int xyz; xyz = aTuple["XYZ"]; }
  1131. catch (NotFoundException&) { }
  1132. assert (aTuple.length == 18);
  1133. TupleType aTuple2("string1", "1",
  1134. "int1", 1,
  1135. "bool1", true,
  1136. "float1", 1.5f,
  1137. "char1", 'c',
  1138. "long1", 999,
  1139. "double1", 1.5,
  1140. "short1", 32700,
  1141. "string2", "2",
  1142. "int2", 2,
  1143. "string3", "3",
  1144. "int3", 3,
  1145. "bool2", true,
  1146. "float2", 2.5,
  1147. "char2", 'c',
  1148. "long2", 999,
  1149. "double2", 2.5,
  1150. "short2", 32700);
  1151. assert (aTuple2["string1"] == "1");
  1152. assert (aTuple2["int1"] == 1);
  1153. assert (aTuple2["bool1"] == true);
  1154. assert (aTuple2["float1"] == 1.5);
  1155. assert (aTuple2["char1"] == 'c');
  1156. assert (aTuple2["long1"] == 999);
  1157. assert (aTuple2["double1"] == 1.5);
  1158. assert (aTuple2["short1"] == 32700);
  1159. assert (aTuple2["string2"] == "2");
  1160. assert (aTuple2["int2"] == 2);
  1161. assert (aTuple2["string3"] == "3");
  1162. assert (aTuple2["int3"] == 3);
  1163. assert (aTuple2["bool2"] == true);
  1164. assert (aTuple2["float2"] == 2.5);
  1165. assert (aTuple2["char2"] == 'c');
  1166. assert (aTuple2["long2"] == 999);
  1167. assert (aTuple2["float2"] == 2.5);
  1168. assert (aTuple2["short2"] == 32700);
  1169. assert (aTuple2.length == 18);
  1170. assert (aTuple != aTuple2);
  1171. aTuple = aTuple2;
  1172. assert (aTuple == aTuple2);
  1173. aTuple2.get<1>()++;
  1174. assert (aTuple < aTuple2);
  1175. TupleType aTuple3(aTuple2.names());
  1176. assert (aTuple3.names() == aTuple2.names());
  1177. assert (aTuple3["string1"] == "");
  1178. assert (aTuple3["int1"] == 0);
  1179. assert (aTuple3["bool1"] == false);
  1180. assert (aTuple3["char1"] == 0);
  1181. assert (aTuple3["long1"] == 0);
  1182. assert (aTuple3["short1"] == 0);
  1183. assert (aTuple3["string2"] == "");
  1184. assert (aTuple3["int2"] == 0);
  1185. assert (aTuple3["string3"] == "");
  1186. assert (aTuple3["int3"] == 0);
  1187. assert (aTuple3["bool2"] == false);
  1188. assert (aTuple3["char2"] == 0);
  1189. assert (aTuple3["long2"] == 0);
  1190. assert (aTuple3["short2"] == 0);
  1191. assert (aTuple3.length == 18);
  1192. assert (aTuple.getName(0) == "string1");
  1193. aTuple.setName(0, "New Name");
  1194. assert (aTuple.getName(0) == "New Name");
  1195. try { aTuple.setName(20, ""); fail("must fail"); }
  1196. catch (InvalidArgumentException&) { }
  1197. }
  1198. void NamedTuplesTest::testNamedTuple19()
  1199. {
  1200. typedef NamedTuple<std::string,
  1201. int,
  1202. bool,
  1203. float,
  1204. char,
  1205. long,
  1206. double,
  1207. short,
  1208. std::string,
  1209. int,
  1210. std::string,
  1211. int,
  1212. bool,
  1213. float,
  1214. char,
  1215. long,
  1216. double,
  1217. short,
  1218. std::string> TupleType;
  1219. TupleType aTuple;
  1220. assert (aTuple["A"] == "");
  1221. assert (aTuple["B"] == 0);
  1222. assert (aTuple["C"] == false);
  1223. assert (aTuple["E"] == 0);
  1224. assert (aTuple["F"] == 0);
  1225. assert (aTuple["H"] == 0);
  1226. assert (aTuple["I"] == "");
  1227. assert (aTuple["J"] == 0);
  1228. assert (aTuple["K"] == "");
  1229. assert (aTuple["L"] == 0);
  1230. assert (aTuple["M"] == false);
  1231. assert (aTuple["O"] == 0);
  1232. assert (aTuple["P"] == 0);
  1233. assert (aTuple["R"] == 0);
  1234. assert (aTuple["S"] == "");
  1235. try { int xyz; xyz = aTuple["XYZ"]; }
  1236. catch (NotFoundException&) { }
  1237. assert (aTuple.length == 19);
  1238. TupleType aTuple2("string1", "1",
  1239. "int1", 1,
  1240. "bool1", true,
  1241. "float1", 1.5f,
  1242. "char1", 'c',
  1243. "long1", 999,
  1244. "double1", 1.5,
  1245. "short1", 32700,
  1246. "string2", "2",
  1247. "int2", 2,
  1248. "string3", "3",
  1249. "int3", 3,
  1250. "bool2", true,
  1251. "float2", 2.5,
  1252. "char2", 'c',
  1253. "long2", 999,
  1254. "double2", 2.5,
  1255. "short2", 32700,
  1256. "string4", "4");
  1257. assert (aTuple2["string1"] == "1");
  1258. assert (aTuple2["int1"] == 1);
  1259. assert (aTuple2["bool1"] == true);
  1260. assert (aTuple2["float1"] == 1.5);
  1261. assert (aTuple2["char1"] == 'c');
  1262. assert (aTuple2["long1"] == 999);
  1263. assert (aTuple2["double1"] == 1.5);
  1264. assert (aTuple2["short1"] == 32700);
  1265. assert (aTuple2["string2"] == "2");
  1266. assert (aTuple2["int2"] == 2);
  1267. assert (aTuple2["string3"] == "3");
  1268. assert (aTuple2["int3"] == 3);
  1269. assert (aTuple2["bool2"] == true);
  1270. assert (aTuple2["float2"] == 2.5);
  1271. assert (aTuple2["char2"] == 'c');
  1272. assert (aTuple2["long2"] == 999);
  1273. assert (aTuple2["float2"] == 2.5);
  1274. assert (aTuple2["short2"] == 32700);
  1275. assert (aTuple2["string4"] == "4");
  1276. assert (aTuple2.length == 19);
  1277. assert (aTuple != aTuple2);
  1278. aTuple = aTuple2;
  1279. assert (aTuple == aTuple2);
  1280. aTuple2.get<1>()++;
  1281. assert (aTuple < aTuple2);
  1282. TupleType aTuple3(aTuple2.names());
  1283. assert (aTuple3.names() == aTuple2.names());
  1284. assert (aTuple3["string1"] == "");
  1285. assert (aTuple3["int1"] == 0);
  1286. assert (aTuple3["bool1"] == false);
  1287. assert (aTuple3["char1"] == 0);
  1288. assert (aTuple3["long1"] == 0);
  1289. assert (aTuple3["short1"] == 0);
  1290. assert (aTuple3["string2"] == "");
  1291. assert (aTuple3["int2"] == 0);
  1292. assert (aTuple3["string3"] == "");
  1293. assert (aTuple3["int3"] == 0);
  1294. assert (aTuple3["bool2"] == false);
  1295. assert (aTuple3["char2"] == 0);
  1296. assert (aTuple3["long2"] == 0);
  1297. assert (aTuple3["short2"] == 0);
  1298. assert (aTuple3["string4"] == "");
  1299. assert (aTuple3.length == 19);
  1300. assert (aTuple.getName(0) == "string1");
  1301. aTuple.setName(0, "New Name");
  1302. assert (aTuple.getName(0) == "New Name");
  1303. try { aTuple.setName(20, ""); fail("must fail"); }
  1304. catch (InvalidArgumentException&) { }
  1305. }
  1306. void NamedTuplesTest::testNamedTuple20()
  1307. {
  1308. typedef NamedTuple<std::string,
  1309. int,
  1310. bool,
  1311. float,
  1312. char,
  1313. long,
  1314. double,
  1315. short,
  1316. std::string,
  1317. int,
  1318. std::string,
  1319. int,
  1320. bool,
  1321. float,
  1322. char,
  1323. long,
  1324. double,
  1325. short,
  1326. std::string,
  1327. int> TupleType;
  1328. TupleType aTuple;
  1329. assert (aTuple["A"] == "");
  1330. assert (aTuple["B"] == 0);
  1331. assert (aTuple["C"] == false);
  1332. assert (aTuple["E"] == 0);
  1333. assert (aTuple["F"] == 0);
  1334. assert (aTuple["H"] == 0);
  1335. assert (aTuple["I"] == "");
  1336. assert (aTuple["J"] == 0);
  1337. assert (aTuple["K"] == "");
  1338. assert (aTuple["L"] == 0);
  1339. assert (aTuple["M"] == false);
  1340. assert (aTuple["O"] == 0);
  1341. assert (aTuple["P"] == 0);
  1342. assert (aTuple["R"] == 0);
  1343. assert (aTuple["S"] == "");
  1344. assert (aTuple["T"] == 0);
  1345. try { int xyz; xyz = aTuple["XYZ"]; }
  1346. catch (NotFoundException&) { }
  1347. assert (aTuple.length == 20);
  1348. TupleType aTuple2("string1", "1",
  1349. "int1", 1,
  1350. "bool1", true,
  1351. "float1", 1.5f,
  1352. "char1", 'c',
  1353. "long1", 999,
  1354. "double1", 1.5,
  1355. "short1", 32700,
  1356. "string2", "2",
  1357. "int2", 2,
  1358. "string3", "3",
  1359. "int3", 3,
  1360. "bool2", true,
  1361. "float2", 2.5,
  1362. "char2", 'c',
  1363. "long2", 999,
  1364. "double2", 2.5,
  1365. "short2", 32700,
  1366. "string4", "4",
  1367. "int4", 4);
  1368. assert (aTuple2["string1"] == "1");
  1369. assert (aTuple2["int1"] == 1);
  1370. assert (aTuple2["bool1"] == true);
  1371. assert (aTuple2["float1"] == 1.5);
  1372. assert (aTuple2["char1"] == 'c');
  1373. assert (aTuple2["long1"] == 999);
  1374. assert (aTuple2["double1"] == 1.5);
  1375. assert (aTuple2["short1"] == 32700);
  1376. assert (aTuple2["string2"] == "2");
  1377. assert (aTuple2["int2"] == 2);
  1378. assert (aTuple2["string3"] == "3");
  1379. assert (aTuple2["int3"] == 3);
  1380. assert (aTuple2["bool2"] == true);
  1381. assert (aTuple2["float2"] == 2.5);
  1382. assert (aTuple2["char2"] == 'c');
  1383. assert (aTuple2["long2"] == 999);
  1384. assert (aTuple2["float2"] == 2.5);
  1385. assert (aTuple2["short2"] == 32700);
  1386. assert (aTuple2["string4"] == "4");
  1387. assert (aTuple2["int4"] == 4);
  1388. assert (aTuple2.length == 20);
  1389. assert (aTuple != aTuple2);
  1390. aTuple = aTuple2;
  1391. assert (aTuple == aTuple2);
  1392. aTuple2.get<1>()++;
  1393. assert (aTuple < aTuple2);
  1394. TupleType aTuple3(aTuple2.names());
  1395. assert (aTuple3.names() == aTuple2.names());
  1396. assert (aTuple3["string1"] == "");
  1397. assert (aTuple3["int1"] == 0);
  1398. assert (aTuple3["bool1"] == false);
  1399. assert (aTuple3["char1"] == 0);
  1400. assert (aTuple3["long1"] == 0);
  1401. assert (aTuple3["short1"] == 0);
  1402. assert (aTuple3["string2"] == "");
  1403. assert (aTuple3["int2"] == 0);
  1404. assert (aTuple3["string3"] == "");
  1405. assert (aTuple3["int3"] == 0);
  1406. assert (aTuple3["bool2"] == false);
  1407. assert (aTuple3["char2"] == 0);
  1408. assert (aTuple3["long2"] == 0);
  1409. assert (aTuple3["short2"] == 0);
  1410. assert (aTuple3["string4"] == "");
  1411. assert (aTuple3["int4"] == 0);
  1412. assert (aTuple3.length == 20);
  1413. assert (aTuple.getName(0) == "string1");
  1414. aTuple.setName(0, "New Name");
  1415. assert (aTuple.getName(0) == "New Name");
  1416. try { aTuple.setName(20, ""); fail("must fail"); }
  1417. catch (InvalidArgumentException&) { }
  1418. }
  1419. void NamedTuplesTest::setUp()
  1420. {
  1421. }
  1422. void NamedTuplesTest::tearDown()
  1423. {
  1424. }
  1425. CppUnit::Test* NamedTuplesTest::suite()
  1426. {
  1427. CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NamedTuplesTest");
  1428. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple1);
  1429. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple2);
  1430. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple3);
  1431. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple4);
  1432. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple5);
  1433. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple6);
  1434. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple7);
  1435. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple8);
  1436. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple9);
  1437. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple10);
  1438. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple11);
  1439. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple12);
  1440. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple13);
  1441. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple14);
  1442. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple15);
  1443. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple16);
  1444. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple17);
  1445. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple18);
  1446. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple19);
  1447. CppUnit_addTest(pSuite, NamedTuplesTest, testNamedTuple20);
  1448. return pSuite;
  1449. }