@@ -327,6 +327,63 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrayIssue252) {
327327 // JSONTEST_ASSERT_EQUAL(5, root["array"].size());
328328}
329329
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+
330387JSONTEST_FIXTURE_LOCAL (ValueTest, null) {
331388 JSONTEST_ASSERT_EQUAL (Json::nullValue, null_.type ());
332389
0 commit comments