@@ -310,38 +310,72 @@ JSONTEST_FIXTURE(ValueTest, arrayIssue252) {
310
310
}
311
311
// JSONTEST_ASSERT_EQUAL(5, root["array"].size());
312
312
}
313
+
313
314
JSONTEST_FIXTURE (ValueTest, arrayInsertAtRandomIndex) {
314
315
Json::Value array;
315
- JSONCPP_STRING str0 = " index2" ;
316
- JSONCPP_STRING str1 = " index4 " ;
317
- array.append (" index0" );
316
+ Json::Value str0 ( " index2" ) ;
317
+ Json::Value str1 ( " index3 " ) ;
318
+ array.append (" index0" ); // append rvalue
318
319
array.append (" index1" );
319
- array.append (str0);
320
- JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[0 ]);
320
+ array.append (str0); // append lvalue
321
+
322
+ std::vector<Json::Value *> vec; // storage value address for checking
323
+ for (int i = 0 ; i < 3 ; i++) {
324
+ vec.push_back (&array[i]);
325
+ }
326
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[0 ]); // check append
321
327
JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[1 ]);
322
328
JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[2 ]);
323
329
324
- array.insert (0 , " index3" ); // rvalue
330
+ // insert lvalue at the head
331
+ array.insert (0 , str1);
325
332
JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
326
333
JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
327
334
JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[2 ]);
328
335
JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[3 ]);
329
-
330
- array.insert (3 , str1); // lvalue
336
+ // checking address
337
+ for (int i = 0 ; i < 3 ; i++) {
338
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
339
+ }
340
+ vec.push_back (&array[3 ]);
341
+ // insert rvalue at middle
342
+ array.insert (2 , " index4" );
331
343
JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
332
344
JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
333
- JSONTEST_ASSERT_EQUAL (Json::Value (" index1 " ), array[2 ]);
334
- JSONTEST_ASSERT_EQUAL (Json::Value (" index4 " ), array[3 ]);
345
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index4 " ), array[2 ]);
346
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1 " ), array[3 ]);
335
347
JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[4 ]);
336
-
337
- array.insert (9 , " index6" );
338
- // beyond size(). it should be allowed to insert into its tail.
348
+ // checking address
349
+ for (int i = 0 ; i < 4 ; i++) {
350
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
351
+ }
352
+ vec.push_back (&array[4 ]);
353
+ // insert rvalue at the tail
354
+ array.insert (5 , " index5" );
339
355
JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
340
356
JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
341
- JSONTEST_ASSERT_EQUAL (Json::Value (" index1 " ), array[2 ]);
342
- JSONTEST_ASSERT_EQUAL (Json::Value (" index4 " ), array[3 ]);
357
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index4 " ), array[2 ]);
358
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1 " ), array[3 ]);
343
359
JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[4 ]);
344
- JSONTEST_ASSERT_EQUAL (Json::Value (" index6" ), array[5 ]);
360
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index5" ), array[5 ]);
361
+ // checking address
362
+ for (int i = 0 ; i < 5 ; i++) {
363
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
364
+ }
365
+ vec.push_back (&array[5 ]);
366
+ // beyond max array size, it should be allowed to insert into its tail
367
+ array.insert (10 , " index10" );
368
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index3" ), array[0 ]);
369
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index0" ), array[1 ]);
370
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index4" ), array[2 ]);
371
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index1" ), array[3 ]);
372
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index2" ), array[4 ]);
373
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index5" ), array[5 ]);
374
+ JSONTEST_ASSERT_EQUAL (Json::Value (" index10" ), array[6 ]);
375
+ // checking address
376
+ for (int i = 0 ; i < 6 ; i++) {
377
+ JSONTEST_ASSERT_EQUAL (vec[i], &array[i]);
378
+ }
345
379
}
346
380
JSONTEST_FIXTURE (ValueTest, null) {
347
381
JSONTEST_ASSERT_EQUAL (Json::nullValue, null_.type ());
0 commit comments