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