TestIterators.cpp 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. #include "TestSuite.h"
  2. #ifdef JSON_LIBRARY
  3. void CreateTest(JSONNODE * test); //suppress warnings that it wasnt defined
  4. void CreateTest(JSONNODE * test){
  5. json_push_back(test, json_new_a(JSON_TEXT("Hi"), JSON_TEXT("World")));
  6. json_push_back(test, json_new_a(JSON_TEXT("Hello"), JSON_TEXT("There")));
  7. json_push_back(test, json_new_a(JSON_TEXT("Hai"), JSON_TEXT("Mars")));
  8. json_push_back(test, json_new_a(JSON_TEXT("Hia"), JSON_TEXT("Earth")));
  9. json_push_back(test, json_new_a(JSON_TEXT("Hey"), JSON_TEXT("Jude")));
  10. }
  11. #else
  12. void CreateTest(JSONNode & test); //suppress warnings that it wasnt defined
  13. void CreateTest(JSONNode & test){
  14. test.push_back(JSONNode(JSON_TEXT("Hi"), JSON_TEXT("World")));
  15. test.push_back(JSONNode(JSON_TEXT("Hello"), JSON_TEXT("There")));
  16. test.push_back(JSONNode(JSON_TEXT("Hai"), JSON_TEXT("Mars")));
  17. test.push_back(JSONNode(JSON_TEXT("Hia"), JSON_TEXT("Earth")));
  18. test.push_back(JSONNode(JSON_TEXT("Hey"), JSON_TEXT("Jude")));
  19. }
  20. #endif
  21. void TestSuite::TestIterators(void){
  22. #ifdef JSON_ITERATORS
  23. #define assertAutoCString(cone, ctwo)\
  24. {\
  25. json_char * _res = cone;\
  26. assertCStringSame(_res, ctwo);\
  27. json_free(_res);\
  28. }
  29. UnitTest::SetPrefix("TestIterators.cpp - Iterator");
  30. #ifdef JSON_LIBRARY
  31. JSONNODE * empty = json_new(JSON_NODE);
  32. assertEquals(json_begin(empty), json_end(empty));
  33. TestSuite::testParsingItself(empty);
  34. assertNull(json_at(empty, 15));
  35. assertNull(json_get(empty, JSON_TEXT("hello")));
  36. JSONNODE * test = json_new(JSON_NODE);
  37. json_push_back(test, json_new_i(JSON_TEXT(""), 15));
  38. json_push_back(test, json_new_a(JSON_TEXT(""), JSON_TEXT("hello world")));
  39. json_push_back(test, json_new_b(JSON_TEXT(""), true));
  40. assertEquals(json_size(test), 3);
  41. TestSuite::testParsingItself(test);
  42. JSONNODE_ITERATOR it_test = json_begin(test);
  43. assertEquals(json_as_int(*it_test), 15);
  44. ++it_test;
  45. assertAutoCString(json_as_string(*it_test), JSON_TEXT("hello world"));
  46. it_test++;
  47. assertEquals(json_as_bool(*it_test++), true);
  48. assertEquals(it_test, json_end(test));
  49. unsigned int i = 0;
  50. for(JSONNODE_ITERATOR it = json_begin(test), end = json_end(test); it != end; ++it){
  51. ++i;
  52. }
  53. assertEquals(i, 3);
  54. UnitTest::SetPrefix("TestIterators.cpp - Iterator Find");
  55. json_delete(test);
  56. test = json_new(JSON_NODE);
  57. CreateTest(test);
  58. JSONNODE_ITERATOR ti = json_find(test, JSON_TEXT("bye"));
  59. assertEquals(ti, json_end(test));
  60. ti = json_find(test, JSON_TEXT("Hai"));
  61. assertNotEquals(ti, json_end(test));
  62. assertAutoCString(json_as_string(*ti), JSON_TEXT("Mars"));
  63. ti = json_find(test, JSON_TEXT("Hey"));
  64. assertNotEquals(ti, json_end(test));
  65. assertAutoCString(json_as_string(*ti), JSON_TEXT("Jude"));
  66. ti = json_find(test, JSON_TEXT("Hi"));
  67. assertNotEquals(ti, json_end(test));
  68. assertAutoCString(json_as_string(*ti), JSON_TEXT("World"));
  69. #ifdef JSON_CASE_INSENSITIVE_FUNCTIONS
  70. ti = json_find_nocase(test, JSON_TEXT("BYE"));
  71. assertEquals(ti, json_end(test));
  72. ti = json_find_nocase(test, JSON_TEXT("HAI"));
  73. assertNotEquals(ti, json_end(test));
  74. assertAutoCString(json_as_string(*ti), JSON_TEXT("Mars"));
  75. ti = json_find_nocase(test, JSON_TEXT("HEY"));
  76. assertNotEquals(ti, json_end(test));
  77. assertAutoCString(json_as_string(*ti), JSON_TEXT("Jude"));
  78. ti = json_find_nocase(test, JSON_TEXT("HI"));
  79. assertNotEquals(ti, json_end(test));
  80. assertAutoCString(json_as_string(*ti), JSON_TEXT("World"));
  81. #endif
  82. UnitTest::SetPrefix("TestIterators.cpp - Iterator Erase");
  83. ti = json_erase(test, json_begin(test) + 3);
  84. assertEquals(json_size(test), 4);
  85. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("World"));
  86. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("There"));
  87. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Mars"));
  88. assertAutoCString(json_as_string(json_at(test, 3)), JSON_TEXT("Jude"));
  89. assertAutoCString(json_as_string(*ti), JSON_TEXT("Jude"));
  90. ti = json_erase(test, json_begin(test));
  91. assertEquals(json_size(test), 3);
  92. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("There"));
  93. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("Mars"));
  94. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Jude"));
  95. assertAutoCString(json_as_string(*ti), JSON_TEXT("There"));
  96. #ifdef JSON_SAFE
  97. ti = json_erase(test, json_end(test));
  98. assertEquals(json_size(test), 3);
  99. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("There"));
  100. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("Mars"));
  101. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Jude"));
  102. assertEquals(ti, json_end(test));
  103. #endif
  104. ti = json_erase(test, json_begin(test));
  105. assertEquals(json_size(test), 2);
  106. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("Mars"));
  107. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("Jude"));
  108. assertAutoCString(json_as_string(*ti), JSON_TEXT("Mars"));
  109. ti = json_erase(test, json_begin(test));
  110. assertEquals(json_size(test), 1);
  111. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("Jude"));
  112. assertAutoCString(json_as_string(*ti), JSON_TEXT("Jude"));
  113. ti = json_erase(test, json_begin(test));
  114. assertEquals(json_size(test), 0);
  115. assertEquals(ti, json_end(test));
  116. CreateTest(test);
  117. i = 0;
  118. for (JSONNODE_ITERATOR it = json_begin(test); it != json_end(test); it = json_erase(test, it)){
  119. ++i;
  120. }
  121. assertEquals(json_size(test), 0);
  122. assertEquals(i, 5);
  123. UnitTest::SetPrefix("TestIterators.cpp - Iterator Bulk Erase");
  124. CreateTest(test);
  125. ti = json_erase_multi(test, json_begin(test), json_begin(test));
  126. assertEquals(json_size(test), 5);
  127. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("World"));
  128. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("There"));
  129. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Mars"));
  130. assertAutoCString(json_as_string(json_at(test, 3)), JSON_TEXT("Earth"));
  131. assertAutoCString(json_as_string(json_at(test, 4)), JSON_TEXT("Jude"));
  132. assertEquals(ti, json_begin(test));
  133. json_erase_multi(test, json_begin(test), json_end(test));
  134. assertEquals(json_size(test), 0);
  135. CreateTest(test);
  136. ti = json_erase_multi(test, json_begin(test), json_begin(test) + 1);
  137. assertEquals(json_size(test), 4);
  138. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("There"));
  139. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("Mars"));
  140. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Earth"));
  141. assertAutoCString(json_as_string(json_at(test, 3)), JSON_TEXT("Jude"));
  142. assertEquals(ti, json_begin(test));
  143. ti = json_erase_multi(test, json_begin(test), json_begin(test) + 2);
  144. assertEquals(json_size(test), 2);
  145. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("Earth"));
  146. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("Jude"));
  147. assertEquals(ti, json_begin(test));
  148. ti = json_erase_multi(test, json_begin(test), json_end(test) - 1);
  149. assertEquals(json_size(test), 1);
  150. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("Jude"));
  151. assertEquals(ti, json_begin(test));
  152. json_clear(test);
  153. UnitTest::SetPrefix("TestIterators.cpp - Iterator Insert");
  154. CreateTest(test);
  155. ti = json_insert(test, json_begin(test) + 3, json_new_a(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  156. assertEquals(json_size(test), 6);
  157. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("World"));
  158. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("There"));
  159. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Mars"));
  160. assertAutoCString(json_as_string(json_at(test, 3)), JSON_TEXT("Pluto"));
  161. assertAutoCString(json_as_string(json_at(test, 4)), JSON_TEXT("Earth"));
  162. assertAutoCString(json_as_string(json_at(test, 5)), JSON_TEXT("Jude"));
  163. assertAutoCString(json_as_string(*ti), JSON_TEXT("Pluto"));
  164. assertEquals(ti, json_begin(test) + 3);
  165. json_clear(test);
  166. CreateTest(test);
  167. ti = json_insert(test, json_begin(test), json_new_a(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  168. assertEquals(json_size(test), 6);
  169. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("Pluto"));
  170. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("World"));
  171. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("There"));
  172. assertAutoCString(json_as_string(json_at(test, 3)), JSON_TEXT("Mars"));
  173. assertAutoCString(json_as_string(json_at(test, 4)), JSON_TEXT("Earth"));
  174. assertAutoCString(json_as_string(json_at(test, 5)), JSON_TEXT("Jude"));
  175. assertAutoCString(json_as_string(*ti), JSON_TEXT("Pluto"));
  176. assertEquals(ti, json_begin(test));
  177. json_clear(test);
  178. CreateTest(test);
  179. ti = json_insert(test, json_begin(test) + 5, json_new_a(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  180. assertEquals(json_size(test), 6);
  181. assertAutoCString(json_as_string(json_at(test, 0)), JSON_TEXT("World"));
  182. assertAutoCString(json_as_string(json_at(test, 1)), JSON_TEXT("There"));
  183. assertAutoCString(json_as_string(json_at(test, 2)), JSON_TEXT("Mars"));
  184. assertAutoCString(json_as_string(json_at(test, 3)), JSON_TEXT("Earth"));
  185. assertAutoCString(json_as_string(json_at(test, 4)), JSON_TEXT("Jude"));
  186. assertAutoCString(json_as_string(json_at(test, 5)), JSON_TEXT("Pluto"));
  187. assertAutoCString(json_as_string(*ti), JSON_TEXT("Pluto"));
  188. assertEquals(ti, json_begin(test) + 5);
  189. json_clear(test);
  190. UnitTest::SetPrefix("TestIterators.cpp - Iterator Bulk Insert");
  191. JSONNODE * test3 = json_new(JSON_NODE);
  192. CreateTest(test);
  193. CreateTest(test3);
  194. ti = json_insert_multi(test3, json_begin(test3) + 3, json_begin(test) + 1, json_begin(test) + 3);
  195. assertEquals(json_size(test3), 7);
  196. assertAutoCString(json_as_string(json_at(test3, 0)), JSON_TEXT("World"));
  197. assertAutoCString(json_as_string(json_at(test3, 1)), JSON_TEXT("There"));
  198. assertAutoCString(json_as_string(json_at(test3, 2)), JSON_TEXT("Mars"));
  199. assertAutoCString(json_as_string(json_at(test3, 3)), JSON_TEXT("There"));
  200. assertAutoCString(json_as_string(json_at(test3, 4)), JSON_TEXT("Mars"));
  201. assertAutoCString(json_as_string(json_at(test3, 5)), JSON_TEXT("Earth"));
  202. assertAutoCString(json_as_string(json_at(test3, 6)), JSON_TEXT("Jude"));
  203. assertAutoCString(json_as_string(*ti), JSON_TEXT("There"));
  204. assertEquals(ti, json_begin(test3) + 3);
  205. json_clear(test);
  206. json_clear(test3);
  207. CreateTest(test);
  208. CreateTest(test3);
  209. ti = json_insert_multi(test3, json_begin(test3), json_begin(test) + 1, json_begin(test) + 3);
  210. assertEquals(json_size(test3), 7);
  211. assertAutoCString(json_as_string(json_at(test3, 0)), JSON_TEXT("There"));
  212. assertAutoCString(json_as_string(json_at(test3, 1)), JSON_TEXT("Mars"));
  213. assertAutoCString(json_as_string(json_at(test3, 2)), JSON_TEXT("World"));
  214. assertAutoCString(json_as_string(json_at(test3, 3)), JSON_TEXT("There"));
  215. assertAutoCString(json_as_string(json_at(test3, 4)), JSON_TEXT("Mars"));
  216. assertAutoCString(json_as_string(json_at(test3, 5)), JSON_TEXT("Earth"));
  217. assertAutoCString(json_as_string(json_at(test3, 6)), JSON_TEXT("Jude"));
  218. assertAutoCString(json_as_string(*ti), JSON_TEXT("There"));
  219. assertEquals(ti, json_begin(test3));
  220. json_clear(test);
  221. json_clear(test3);
  222. CreateTest(test);
  223. CreateTest(test3);
  224. json_set_a(json_at(test3, 2), JSON_TEXT("lol"));
  225. json_set_a(json_at(test3, 3), JSON_TEXT("lul"));
  226. ti = json_insert_multi(test3, json_begin(test3) + 5, json_begin(test) + 1, json_begin(test) + 3);
  227. assertEquals(json_size(test3), 7);
  228. assertAutoCString(json_as_string(json_at(test3, 0)), JSON_TEXT("World"));
  229. assertAutoCString(json_as_string(json_at(test3, 1)), JSON_TEXT("There"));
  230. assertAutoCString(json_as_string(json_at(test3, 2)), JSON_TEXT("lol"));
  231. assertAutoCString(json_as_string(json_at(test3, 3)), JSON_TEXT("lul"));
  232. assertAutoCString(json_as_string(json_at(test3, 4)), JSON_TEXT("Jude"));
  233. assertAutoCString(json_as_string(json_at(test3, 5)), JSON_TEXT("There"));
  234. assertAutoCString(json_as_string(json_at(test3, 6)), JSON_TEXT("Mars"));
  235. assertAutoCString(json_as_string(*ti), JSON_TEXT("There"));
  236. assertEquals(ti, json_begin(test3) + 5);
  237. json_delete(empty);
  238. json_delete(test);
  239. json_delete(test3);
  240. #else
  241. JSONNode empty = JSONNode(JSON_NODE);
  242. assertEquals(empty.begin(), empty.end());
  243. assertEquals(empty.rbegin(), empty.rend());
  244. TestSuite::testParsingItself(empty);
  245. assertException(empty.at(15), std::out_of_range);
  246. assertException(empty.at(JSON_TEXT("hello")), std::out_of_range);
  247. JSONNode test = JSONNode(JSON_NODE);
  248. test.push_back(JSONNode(JSON_TEXT(""), 15));
  249. test.push_back(JSONNode(JSON_TEXT(""), JSON_TEXT("hello world")));
  250. test.push_back(JSONNode(JSON_TEXT(""), true));
  251. assertEquals(test.size(), 3);
  252. TestSuite::testParsingItself(test);
  253. JSONNode::iterator it_test = test.begin();
  254. assertEquals(*it_test, 15);
  255. ++it_test;
  256. assertEquals(*it_test, JSON_TEXT("hello world"));
  257. it_test++;
  258. assertEquals(*it_test++, true);
  259. assertEquals(it_test, test.end());
  260. unsigned int i = 0;
  261. for(JSONNode::iterator it = test.begin(), end = test.end(); it != end; ++it){
  262. ++i;
  263. }
  264. assertEquals(i, 3);
  265. UnitTest::SetPrefix("TestIterators.cpp - Const Iterator");
  266. const JSONNode test2 = test;
  267. assertEquals(test2.size(), 3);
  268. JSONNode::const_iterator cit_test = test2.begin();
  269. assertEquals(*cit_test, 15);
  270. ++cit_test;
  271. assertEquals(*cit_test, JSON_TEXT("hello world"));
  272. cit_test++;
  273. assertEquals(*cit_test++, true);
  274. assertEquals(cit_test, test2.end());
  275. i = 0;
  276. for(JSONNode::const_iterator it = test2.begin(), end = test2.end(); it != end; ++it){
  277. ++i;
  278. }
  279. assertEquals(i, 3);
  280. UnitTest::SetPrefix("TestIterators.cpp - Reverse Iterator");
  281. assertEquals(test.size(), 3);
  282. JSONNode::reverse_iterator rit_test = test.rbegin();
  283. assertEquals(*rit_test, true);
  284. ++rit_test;
  285. assertEquals(*rit_test, JSON_TEXT("hello world"));
  286. rit_test++;
  287. assertEquals(*rit_test++, 15);
  288. assertEquals(rit_test, test.rend());
  289. i = 0;
  290. for(JSONNode::reverse_iterator it = test.rbegin(), end = test.rend(); it != end; ++it){
  291. ++i;
  292. }
  293. assertEquals(i, 3);
  294. UnitTest::SetPrefix("TestIterators.cpp - Reverse Const Iterator");
  295. assertEquals(test2.size(), 3);
  296. JSONNode::reverse_const_iterator rcit_test = test2.rbegin();
  297. assertEquals(*rcit_test, true);
  298. ++rcit_test;
  299. assertEquals(*rcit_test, JSON_TEXT("hello world"));
  300. rcit_test++;
  301. assertEquals(*rcit_test++, 15);
  302. assertEquals(rcit_test, test2.rend());
  303. i = 0;
  304. for(JSONNode::reverse_const_iterator it = test2.rbegin(), end = test2.rend(); it != end; ++it){
  305. ++i;
  306. }
  307. assertEquals(i, 3);
  308. UnitTest::SetPrefix("TestIterators.cpp - Iterator Find");
  309. test = JSONNode();
  310. CreateTest(test);
  311. JSONNode::iterator ti = test.find(JSON_TEXT("bye"));
  312. assertEquals(ti, test.end());
  313. ti = test.find(JSON_TEXT("Hai"));
  314. assertNotEquals(ti, test.end());
  315. assertEquals(*ti, JSON_TEXT("Mars"));
  316. ti = test.find(JSON_TEXT("Hey"));
  317. assertNotEquals(ti, test.end());
  318. assertEquals(*ti, JSON_TEXT("Jude"));
  319. ti = test.find(JSON_TEXT("Hi"));
  320. assertNotEquals(ti, test.end());
  321. assertEquals(*ti, JSON_TEXT("World"));
  322. #ifdef JSON_CASE_INSENSITIVE_FUNCTIONS
  323. ti = test.find_nocase(JSON_TEXT("BYE"));
  324. assertEquals(ti, test.end());
  325. ti = test.find_nocase(JSON_TEXT("HAI"));
  326. assertNotEquals(ti, test.end());
  327. assertEquals(*ti, JSON_TEXT("Mars"));
  328. ti = test.find_nocase(JSON_TEXT("HEY"));
  329. assertNotEquals(ti, test.end());
  330. assertEquals(*ti, JSON_TEXT("Jude"));
  331. ti = test.find_nocase(JSON_TEXT("HI"));
  332. assertNotEquals(ti, test.end());
  333. assertEquals(*ti, JSON_TEXT("World"));
  334. #endif
  335. UnitTest::SetPrefix("TestIterators.cpp - Iterator Erase");
  336. ti = test.erase(test.begin() + 3);
  337. assertEquals(test.size(), 4);
  338. assertEquals(test[0], JSON_TEXT("World"));
  339. assertEquals(test[1], JSON_TEXT("There"));
  340. assertEquals(test[2], JSON_TEXT("Mars"));
  341. assertEquals(test[3], JSON_TEXT("Jude"));
  342. assertEquals(*ti, JSON_TEXT("Jude"));
  343. ti = test.erase(test.begin());
  344. assertEquals(test.size(), 3);
  345. assertEquals(test[0], JSON_TEXT("There"));
  346. assertEquals(test[1], JSON_TEXT("Mars"));
  347. assertEquals(test[2], JSON_TEXT("Jude"));
  348. assertEquals(*ti, JSON_TEXT("There"));
  349. JSONNode::reverse_iterator rti = test.rbegin();
  350. assertEquals(*rti, JSON_TEXT("Jude"));
  351. #ifdef JSON_SAFE
  352. rti = test.erase(test.rend());
  353. assertEquals(test.size(), 3);
  354. assertEquals(test[0], JSON_TEXT("There"));
  355. assertEquals(test[1], JSON_TEXT("Mars"));
  356. assertEquals(test[2], JSON_TEXT("Jude"));
  357. assertEquals(rti, test.rend());
  358. ti = test.erase(test.end());
  359. assertEquals(test.size(), 3);
  360. assertEquals(test[0], JSON_TEXT("There"));
  361. assertEquals(test[1], JSON_TEXT("Mars"));
  362. assertEquals(test[2], JSON_TEXT("Jude"));
  363. assertEquals(ti, test.end());
  364. #endif
  365. rti = test.erase(test.rbegin());
  366. assertEquals(test.size(), 2);
  367. assertEquals(test[0], JSON_TEXT("There"));
  368. assertEquals(test[1], JSON_TEXT("Mars"));
  369. assertEquals(*rti, JSON_TEXT("Mars"));
  370. rti = test.erase(test.rbegin());
  371. assertEquals(test.size(), 1);
  372. assertEquals(test[0], JSON_TEXT("There"));
  373. assertEquals(*rti, JSON_TEXT("There"));
  374. test.erase(test.rbegin());
  375. assertEquals(test.size(), 0);
  376. #ifdef JSON_SAFE
  377. test.erase(test.rend());
  378. assertEquals(test.size(), 0);
  379. test.erase(test.end());
  380. assertEquals(test.size(), 0);
  381. #endif
  382. CreateTest(test);
  383. i = 0;
  384. for (JSONNode::iterator it = test.begin(); it != test.end(); it = test.erase(it)){
  385. ++i;
  386. }
  387. assertEquals(test.size(), 0);
  388. assertEquals(i, 5);
  389. CreateTest(test);
  390. i = 0;
  391. for (JSONNode::reverse_iterator it = test.rbegin(); it != test.rend(); it = test.erase(it)){
  392. ++i;
  393. }
  394. assertEquals(test.size(), 0);
  395. assertEquals(i, 5);
  396. UnitTest::SetPrefix("TestIterators.cpp - Iterator Bulk Erase");
  397. CreateTest(test);
  398. ti = test.erase(test.begin(), test.begin());
  399. assertEquals(test.size(), 5);
  400. assertEquals(test[0], JSON_TEXT("World"));
  401. assertEquals(test[1], JSON_TEXT("There"));
  402. assertEquals(test[2], JSON_TEXT("Mars"));
  403. assertEquals(test[3], JSON_TEXT("Earth"));
  404. assertEquals(test[4], JSON_TEXT("Jude"));
  405. assertEquals(ti, test.begin());
  406. test.erase(test.begin(), test.end());
  407. assertEquals(test.size(), 0);
  408. CreateTest(test);
  409. ti = test.erase(test.begin(), test.begin() + 1);
  410. assertEquals(test.size(), 4);
  411. assertEquals(test[0], JSON_TEXT("There"));
  412. assertEquals(test[1], JSON_TEXT("Mars"));
  413. assertEquals(test[2], JSON_TEXT("Earth"));
  414. assertEquals(test[3], JSON_TEXT("Jude"));
  415. assertEquals(ti, test.begin());
  416. ti = test.erase(test.begin(), test.begin() + 2);
  417. assertEquals(test.size(), 2);
  418. assertEquals(test[0], JSON_TEXT("Earth"));
  419. assertEquals(test[1], JSON_TEXT("Jude"));
  420. assertEquals(ti, test.begin());
  421. ti = test.erase(test.begin(), test.end() - 1);
  422. assertEquals(test.size(), 1);
  423. assertEquals(test[0], JSON_TEXT("Jude"));
  424. assertEquals(ti, test.begin());
  425. test.clear();
  426. UnitTest::SetPrefix("TestIterators.cpp - Iterator Bulk Reverse Erase");
  427. CreateTest(test);
  428. rti = test.erase(test.rbegin(), test.rbegin());
  429. assertEquals(test.size(), 5);
  430. assertEquals(test[0], JSON_TEXT("World"));
  431. assertEquals(test[1], JSON_TEXT("There"));
  432. assertEquals(test[2], JSON_TEXT("Mars"));
  433. assertEquals(test[3], JSON_TEXT("Earth"));
  434. assertEquals(test[4], JSON_TEXT("Jude"));
  435. assertEquals(rti, test.rbegin());
  436. rti = test.erase(test.rbegin(), test.rend());
  437. assertEquals(test.size(), 0);
  438. assertEquals(rti, test.rbegin());
  439. assertEquals(rti, test.rend());
  440. CreateTest(test);
  441. rti = test.erase(test.rbegin(), test.rbegin() + 1);
  442. assertEquals(test.size(), 4);
  443. assertEquals(test[0], JSON_TEXT("World"));
  444. assertEquals(test[1], JSON_TEXT("There"));
  445. assertEquals(test[2], JSON_TEXT("Mars"));
  446. assertEquals(test[3], JSON_TEXT("Earth"));
  447. assertEquals(rti, test.rbegin());
  448. rti = test.erase(test.rbegin(), test.rbegin() + 2);
  449. assertEquals(rti, test.rbegin());
  450. assertEquals(test.size(), 2);
  451. assertEquals(test[0], JSON_TEXT("World"));
  452. assertEquals(test[1], JSON_TEXT("There"));
  453. assertEquals(rti, test.rbegin());
  454. rti = test.erase(test.rbegin(), test.rend() - 1);
  455. assertEquals(test.size(), 1);
  456. assertEquals(test[0], JSON_TEXT("World"));
  457. assertEquals(rti, test.rbegin());
  458. test.clear();
  459. UnitTest::SetPrefix("TestIterators.cpp - Iterator Insert");
  460. CreateTest(test);
  461. ti = test.insert(test.begin() + 3, JSONNode(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  462. assertEquals(test.size(), 6);
  463. assertEquals(test[0], JSON_TEXT("World"));
  464. assertEquals(test[1], JSON_TEXT("There"));
  465. assertEquals(test[2], JSON_TEXT("Mars"));
  466. assertEquals(test[3], JSON_TEXT("Pluto"));
  467. assertEquals(test[4], JSON_TEXT("Earth"));
  468. assertEquals(test[5], JSON_TEXT("Jude"));
  469. assertEquals(*ti, JSON_TEXT("Pluto"));
  470. assertEquals(ti -> as_string(), JSON_TEXT("Pluto"));
  471. assertEquals(ti, test.begin() + 3);
  472. test.clear();
  473. CreateTest(test);
  474. ti = test.insert(test.begin(), JSONNode(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  475. assertEquals(test.size(), 6);
  476. assertEquals(test[0], JSON_TEXT("Pluto"));
  477. assertEquals(test[1], JSON_TEXT("World"));
  478. assertEquals(test[2], JSON_TEXT("There"));
  479. assertEquals(test[3], JSON_TEXT("Mars"));
  480. assertEquals(test[4], JSON_TEXT("Earth"));
  481. assertEquals(test[5], JSON_TEXT("Jude"));
  482. assertEquals(*ti, JSON_TEXT("Pluto"));
  483. assertEquals(ti -> as_string(), JSON_TEXT("Pluto"));
  484. assertEquals(ti, test.begin());
  485. test.clear();
  486. CreateTest(test);
  487. ti = test.insert(test.begin() + 5, JSONNode(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  488. assertEquals(test.size(), 6);
  489. assertEquals(test[0], JSON_TEXT("World"));
  490. assertEquals(test[1], JSON_TEXT("There"));
  491. assertEquals(test[2], JSON_TEXT("Mars"));
  492. assertEquals(test[3], JSON_TEXT("Earth"));
  493. assertEquals(test[4], JSON_TEXT("Jude"));
  494. assertEquals(test[5], JSON_TEXT("Pluto"));
  495. assertEquals(*ti, JSON_TEXT("Pluto"));
  496. assertEquals(ti -> as_string(), JSON_TEXT("Pluto"));
  497. assertEquals(ti, test.begin() + 5);
  498. test.clear();
  499. CreateTest(test);
  500. rti = test.insert(test.rbegin(), JSONNode(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  501. assertEquals(test.size(), 6);
  502. assertEquals(test[0], JSON_TEXT("World"));
  503. assertEquals(test[1], JSON_TEXT("There"));
  504. assertEquals(test[2], JSON_TEXT("Mars"));
  505. assertEquals(test[3], JSON_TEXT("Earth"));
  506. assertEquals(test[4], JSON_TEXT("Jude"));
  507. assertEquals(test[5], JSON_TEXT("Pluto"));
  508. assertEquals(*rti, JSON_TEXT("Pluto"));
  509. assertEquals(rti, test.rbegin());
  510. test.clear();
  511. CreateTest(test);
  512. rti = test.insert(test.rbegin() + 5, JSONNode(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  513. assertEquals(test.size(), 6);
  514. assertEquals(test[0], JSON_TEXT("Pluto"));
  515. assertEquals(test[1], JSON_TEXT("World"));
  516. assertEquals(test[2], JSON_TEXT("There"));
  517. assertEquals(test[3], JSON_TEXT("Mars"));
  518. assertEquals(test[4], JSON_TEXT("Earth"));
  519. assertEquals(test[5], JSON_TEXT("Jude"))
  520. assertEquals(*rti, JSON_TEXT("Pluto"));
  521. assertEquals(rti, test.rbegin() + 5);
  522. test.clear();
  523. CreateTest(test);
  524. rti = test.insert(test.rbegin() + 2, JSONNode(JSON_TEXT("olah"), JSON_TEXT("Pluto")));
  525. assertEquals(test.size(), 6);
  526. assertEquals(test[0], JSON_TEXT("World"));
  527. assertEquals(test[1], JSON_TEXT("There"));
  528. assertEquals(test[2], JSON_TEXT("Mars"));
  529. assertEquals(test[3], JSON_TEXT("Pluto"));
  530. assertEquals(test[4], JSON_TEXT("Earth"));
  531. assertEquals(test[5], JSON_TEXT("Jude"));
  532. assertEquals(*rti, JSON_TEXT("Pluto"));
  533. assertEquals(rti, test.rbegin() + 2);
  534. test.clear();
  535. JSONNode test3;
  536. CreateTest(test);
  537. CreateTest(test3);
  538. ti = test3.insert(test3.begin() + 3, test.begin() + 1, test.begin() + 3);
  539. assertEquals(test3.size(), 7);
  540. assertEquals(test3[0], JSON_TEXT("World"));
  541. assertEquals(test3[1], JSON_TEXT("There"));
  542. assertEquals(test3[2], JSON_TEXT("Mars"));
  543. assertEquals(test3[3], JSON_TEXT("There"));
  544. assertEquals(test3[4], JSON_TEXT("Mars"));
  545. assertEquals(test3[5], JSON_TEXT("Earth"));
  546. assertEquals(test3[6], JSON_TEXT("Jude"));
  547. assertEquals(*ti, JSON_TEXT("There"));
  548. assertEquals(ti, test3.begin() + 3);
  549. test.clear();
  550. test3.clear();
  551. CreateTest(test);
  552. CreateTest(test3);
  553. ti = test3.insert(test3.begin(), test.begin() + 1, test.begin() + 3);
  554. assertEquals(test3.size(), 7);
  555. assertEquals(test3[0], JSON_TEXT("There"));
  556. assertEquals(test3[1], JSON_TEXT("Mars"));
  557. assertEquals(test3[2], JSON_TEXT("World"));
  558. assertEquals(test3[3], JSON_TEXT("There"));
  559. assertEquals(test3[4], JSON_TEXT("Mars"));
  560. assertEquals(test3[5], JSON_TEXT("Earth"));
  561. assertEquals(test3[6], JSON_TEXT("Jude"));
  562. assertEquals(*ti, JSON_TEXT("There"));
  563. assertEquals(ti, test3.begin());
  564. test.clear();
  565. test3.clear();
  566. CreateTest(test);
  567. CreateTest(test3);
  568. test3[2] = JSON_TEXT("lol");
  569. test3[3] = JSON_TEXT("lul");
  570. ti = test3.insert(test3.begin() + 5, test.begin() + 1, test.begin() + 3);
  571. assertEquals(test3.size(), 7);
  572. assertEquals(test3[0], JSON_TEXT("World"));
  573. assertEquals(test3[1], JSON_TEXT("There"));
  574. assertEquals(test3[2], JSON_TEXT("lol"));
  575. assertEquals(test3[3], JSON_TEXT("lul"));
  576. assertEquals(test3[4], JSON_TEXT("Jude"));
  577. assertEquals(test3[5], JSON_TEXT("There"));
  578. assertEquals(test3[6], JSON_TEXT("Mars"));
  579. assertEquals(*ti, JSON_TEXT("There"));
  580. assertEquals(ti, test3.begin() + 5);
  581. test.clear();
  582. test3.clear();
  583. CreateTest(test);
  584. CreateTest(test3);
  585. test3[2] = JSON_TEXT("lol");
  586. test3[3] = JSON_TEXT("lul");
  587. ti = test3.insert(test3.begin() + 3, test.rbegin() + 1, test.rbegin() + 3);
  588. assertEquals(test3.size(), 7);
  589. assertEquals(test3[0], JSON_TEXT("World"));
  590. assertEquals(test3[1], JSON_TEXT("There"));
  591. assertEquals(test3[2], JSON_TEXT("lol"));
  592. assertEquals(test3[3], JSON_TEXT("Earth"));
  593. assertEquals(test3[4], JSON_TEXT("Mars"));
  594. assertEquals(test3[5], JSON_TEXT("lul"));
  595. assertEquals(test3[6], JSON_TEXT("Jude"));
  596. assertEquals(*ti, JSON_TEXT("Earth"));
  597. assertEquals(ti, test3.begin() + 3);
  598. test.clear();
  599. test3.clear();
  600. CreateTest(test);
  601. CreateTest(test3);
  602. test3[2] = JSON_TEXT("lol");
  603. test3[3] = JSON_TEXT("lul");
  604. ti = test3.insert(test3.begin(), test.rbegin() + 1, test.rbegin() + 3);
  605. assertEquals(test3.size(), 7);
  606. assertEquals(test3[0], JSON_TEXT("Earth"));
  607. assertEquals(test3[1], JSON_TEXT("Mars"));
  608. assertEquals(test3[2], JSON_TEXT("World"));
  609. assertEquals(test3[3], JSON_TEXT("There"));
  610. assertEquals(test3[4], JSON_TEXT("lol"));
  611. assertEquals(test3[5], JSON_TEXT("lul"));
  612. assertEquals(test3[6], JSON_TEXT("Jude"));
  613. assertEquals(*ti, JSON_TEXT("Earth"));
  614. assertEquals(ti, test3.begin());
  615. test.clear();
  616. test3.clear();
  617. CreateTest(test);
  618. CreateTest(test3);
  619. test3[2] = JSON_TEXT("lol");
  620. test3[3] = JSON_TEXT("lul");
  621. ti = test3.insert(test3.begin() + 5, test.rbegin() + 1, test.rbegin() + 3);
  622. assertEquals(test3.size(), 7);
  623. assertEquals(test3[0], JSON_TEXT("World"));
  624. assertEquals(test3[1], JSON_TEXT("There"));
  625. assertEquals(test3[2], JSON_TEXT("lol"));
  626. assertEquals(test3[3], JSON_TEXT("lul"));
  627. assertEquals(test3[4], JSON_TEXT("Jude"));
  628. assertEquals(test3[5], JSON_TEXT("Earth"));
  629. assertEquals(test3[6], JSON_TEXT("Mars"));
  630. assertEquals(*ti, JSON_TEXT("Earth"));
  631. assertEquals(ti, test3.begin() + 5);
  632. test.clear();
  633. test3.clear();
  634. CreateTest(test);
  635. CreateTest(test3);
  636. test3[1] = JSON_TEXT("lol");
  637. test3[2] = JSON_TEXT("lul");
  638. rti = test3.insert(test3.rbegin(), test.begin() + 1, test.begin() + 3);
  639. assertEquals(test3.size(), 7);
  640. assertEquals(test3[0], JSON_TEXT("World"));
  641. assertEquals(test3[1], JSON_TEXT("lol"));
  642. assertEquals(test3[2], JSON_TEXT("lul"));
  643. assertEquals(test3[3], JSON_TEXT("Earth"));
  644. assertEquals(test3[4], JSON_TEXT("Jude"));
  645. assertEquals(test3[5], JSON_TEXT("Mars"));
  646. assertEquals(test3[6], JSON_TEXT("There"));
  647. assertEquals(*rti, JSON_TEXT("There"));
  648. assertEquals(rti, test3.rbegin());
  649. test.clear();
  650. test3.clear();
  651. CreateTest(test);
  652. CreateTest(test3);
  653. test3[1] = JSON_TEXT("lol");
  654. test3[2] = JSON_TEXT("lul");
  655. rti = test3.insert(test3.rbegin() + 3, test.begin() + 1, test.begin() + 3);
  656. assertEquals(test3.size(), 7);
  657. assertEquals(test3[0], JSON_TEXT("World"));
  658. assertEquals(test3[1], JSON_TEXT("lol"));
  659. assertEquals(test3[2], JSON_TEXT("Mars"));
  660. assertEquals(test3[3], JSON_TEXT("There"));
  661. assertEquals(test3[4], JSON_TEXT("lul"));
  662. assertEquals(test3[5], JSON_TEXT("Earth"));
  663. assertEquals(test3[6], JSON_TEXT("Jude"));
  664. assertEquals(*rti, JSON_TEXT("There"));
  665. assertEquals(rti, test3.rbegin() + 3);
  666. test.clear();
  667. test3.clear();
  668. CreateTest(test);
  669. CreateTest(test3);
  670. test3[1] = JSON_TEXT("lol");
  671. test3[2] = JSON_TEXT("lul");
  672. rti = test3.insert(test3.rbegin() + 5, test.begin() + 1, test.begin() + 3);
  673. assertEquals(test3.size(), 7);
  674. assertEquals(test3[0], JSON_TEXT("Mars"));
  675. assertEquals(test3[1], JSON_TEXT("There"));
  676. assertEquals(test3[2], JSON_TEXT("World"));
  677. assertEquals(test3[3], JSON_TEXT("lol"));
  678. assertEquals(test3[4], JSON_TEXT("lul"));
  679. assertEquals(test3[5], JSON_TEXT("Earth"));
  680. assertEquals(test3[6], JSON_TEXT("Jude"));
  681. assertEquals(*rti, JSON_TEXT("There"));
  682. assertEquals(rti, test3.rbegin() + 5);
  683. test.clear();
  684. test3.clear();
  685. CreateTest(test);
  686. CreateTest(test3);
  687. test3[2] = JSON_TEXT("lol");
  688. test3[3] = JSON_TEXT("lul");
  689. rti = test3.insert(test3.rbegin(), test.rbegin() + 1, test.rbegin() + 3);
  690. assertEquals(test3.size(), 7);
  691. assertEquals(test3[0], JSON_TEXT("World"));
  692. assertEquals(test3[1], JSON_TEXT("There"));
  693. assertEquals(test3[2], JSON_TEXT("lol"));
  694. assertEquals(test3[3], JSON_TEXT("lul"));
  695. assertEquals(test3[4], JSON_TEXT("Jude"));
  696. assertEquals(test3[5], JSON_TEXT("Earth"));
  697. assertEquals(test3[6], JSON_TEXT("Mars"));
  698. assertEquals(*rti, JSON_TEXT("Mars"));
  699. assertEquals(rti, test3.rbegin());
  700. test.clear();
  701. test3.clear();
  702. CreateTest(test);
  703. CreateTest(test3);
  704. test3[2] = JSON_TEXT("lol");
  705. test3[3] = JSON_TEXT("lul");
  706. rti = test3.insert(test3.rbegin() + 3, test.rbegin() + 1, test.rbegin() + 3);
  707. assertEquals(test3.size(), 7);
  708. assertEquals(test3[0], JSON_TEXT("World"));
  709. assertEquals(test3[1], JSON_TEXT("There"));
  710. assertEquals(test3[2], JSON_TEXT("Earth"));
  711. assertEquals(test3[3], JSON_TEXT("Mars"));
  712. assertEquals(test3[4], JSON_TEXT("lol"));
  713. assertEquals(test3[5], JSON_TEXT("lul"));
  714. assertEquals(test3[6], JSON_TEXT("Jude"));
  715. assertEquals(*rti, JSON_TEXT("Mars"));
  716. assertEquals(rti, test3.rbegin() + 3);
  717. test.clear();
  718. test3.clear();
  719. CreateTest(test);
  720. CreateTest(test3);
  721. test3[2] = JSON_TEXT("lol");
  722. test3[3] = JSON_TEXT("lul");
  723. rti = test3.insert(test3.rbegin() + 5, test.rbegin() + 1, test.rbegin() + 3);
  724. assertEquals(test3.size(), 7);
  725. assertEquals(test3[0], JSON_TEXT("Earth"));
  726. assertEquals(test3[1], JSON_TEXT("Mars"));
  727. assertEquals(test3[2], JSON_TEXT("World"));
  728. assertEquals(test3[3], JSON_TEXT("There"));
  729. assertEquals(test3[4], JSON_TEXT("lol"));
  730. assertEquals(test3[5], JSON_TEXT("lul"));
  731. assertEquals(test3[6], JSON_TEXT("Jude"));
  732. assertEquals(*rti, JSON_TEXT("Mars"));
  733. assertEquals(rti, test3.rbegin() + 5);
  734. test.clear();
  735. test3.clear();
  736. #endif
  737. #endif
  738. }