@@ -327,6 +327,63 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrayIssue252) {
327
327
// JSONTEST_ASSERT_EQUAL(5, root["array"].size());
328
328
}
329
329
330
+ JSONTEST_FIXTURE_LOCAL (ValueTest, arrayInsertAtRandomIndex) {
331
+ Json::Value array;
332
+ const Json::Value str0 (" index2" );
333
+ const Json::Value str1 (" index3" );
334
+ array.append (" index0" ); // append rvalue
335
+ array.append (" index1" );
336
+ array.append (str0); // append lvalue
337
+
338
+ std::vector<Json::Value*> vec; // storage value address for checking
339
+ for (int i = 0 ; i < 3 ; i++) {
340
+ vec.push_back (&array[i]);
341
+ }
342
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[0 ]); // check append
343
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[1 ]);
344
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[2 ]);
345
+
346
+ // insert lvalue at the head
347
+ JSONTEST_ASSERT (array.insert (0 , str1));
348
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
349
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
350
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[2 ]);
351
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[3 ]);
352
+ // checking address
353
+ for (int i = 0 ; i < 3 ; i++) {
354
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
355
+ }
356
+ vec.push_back (&array[3 ]);
357
+ // insert rvalue at middle
358
+ JSONTEST_ASSERT (array.insert (2 , " index4" ));
359
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
360
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
361
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index4" ), array[2 ]);
362
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[3 ]);
363
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[4 ]);
364
+ // checking address
365
+ for (int i = 0 ; i < 4 ; i++) {
366
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
367
+ }
368
+ vec.push_back (&array[4 ]);
369
+ // insert rvalue at the tail
370
+ Json::Value index5 (" index5" );
371
+ JSONTEST_ASSERT (array.insert (5 , std::move (index5)));
372
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
373
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
374
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index4" ), array[2 ]);
375
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[3 ]);
376
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[4 ]);
377
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index5" ), array[5 ]);
378
+ // checking address
379
+ for (int i = 0 ; i < 5 ; i++) {
380
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
381
+ }
382
+ vec.push_back (&array[5 ]);
383
+ // beyond max array size, it should not be allowed to insert into its tail
384
+ JSONTEST_ASSERT (!array.insert (10 , " index10" ));
385
+ }
386
+
330
387
JSONTEST_FIXTURE_LOCAL (ValueTest, null) {
331
388
JSONTEST_ASSERT_EQUAL (Json::nullValue, null_.type ());
332
389
0 commit comments