Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPhilipp A. Hartmann <pah@qo.cx>2014-07-31 14:47:41 +0400
committerPhilipp A. Hartmann <pah@qo.cx>2014-07-31 15:03:51 +0400
commitb98852e1656207fcd7573eac1c8718431be1e88f (patch)
treea65adbff1edbac724b716d2cb33953bd995ab9b6 /test
parent96af95c945970d935e5f9fdd57e6ece5d071e880 (diff)
GenericValue: add tests for Erase(ConstMemberIterator[, ConstMemberIterator])
Diffstat (limited to 'test')
-rw-r--r--test/unittest/valuetest.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/unittest/valuetest.cpp b/test/unittest/valuetest.cpp
index 3bd0afcf..9991ddbd 100644
--- a/test/unittest/valuetest.cpp
+++ b/test/unittest/valuetest.cpp
@@ -789,6 +789,72 @@ TEST(Value, Object) {
EXPECT_TRUE(x.MemberBegin() == x.MemberEnd());
+ // Erase(ConstMemberIterator)
+
+ // Use array members to ensure removed elements' destructor is called.
+ // { "a": [0], "b": [1],[2],...]
+ const char keys[][2] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
+ for (int i = 0; i < 10; i++)
+ x.AddMember(keys[i], Value(kArrayType).PushBack(i, allocator), allocator);
+
+ // Erase the first
+ itr = x.Erase(x.MemberBegin());
+ EXPECT_FALSE(x.HasMember(keys[0]));
+ EXPECT_EQ(x.MemberBegin(), itr);
+ EXPECT_EQ(9u, x.MemberEnd() - x.MemberBegin());
+ for (; itr != x.MemberEnd(); ++itr) {
+ int i = (itr - x.MemberBegin()) + 1;
+ EXPECT_STREQ(itr->name.GetString(), keys[i]);
+ EXPECT_EQ(i, itr->value[0u].GetInt());
+ }
+
+ // Erase the last
+ itr = x.Erase(x.MemberEnd() - 1);
+ EXPECT_FALSE(x.HasMember(keys[9]));
+ EXPECT_EQ(x.MemberEnd(), itr);
+ EXPECT_EQ(8u, x.MemberEnd() - x.MemberBegin());
+ for (; itr != x.MemberEnd(); ++itr) {
+ int i = (itr - x.MemberBegin()) + 1;
+ EXPECT_STREQ(itr->name.GetString(), keys[i]);
+ EXPECT_EQ(i, itr->value[0u].GetInt());
+ }
+
+ // Erase the middle
+ itr = x.Erase(x.MemberBegin() + 4);
+ EXPECT_FALSE(x.HasMember(keys[5]));
+ EXPECT_EQ(x.MemberBegin() + 4, itr);
+ EXPECT_EQ(7u, x.MemberEnd() - x.MemberBegin());
+ for (; itr != x.MemberEnd(); ++itr) {
+ int i = (itr - x.MemberBegin());
+ i += (i<4) ? 1 : 2;
+ EXPECT_STREQ(itr->name.GetString(), keys[i]);
+ EXPECT_EQ(i, itr->value[0u].GetInt());
+ }
+
+ // Erase(ConstMemberIterator, ConstMemberIterator)
+ // Exhaustive test with all 0 <= first < n, first <= last <= n cases
+ const unsigned n = 10;
+ for (unsigned first = 0; first < n; first++) {
+ for (unsigned last = first; last <= n; last++) {
+ Value(kObjectType).Swap(x);
+ for (unsigned i = 0; i < n; i++)
+ x.AddMember(keys[i], Value(kArrayType).PushBack(i, allocator), allocator);
+
+ itr = x.Erase(x.MemberBegin() + first, x.MemberBegin() + last);
+ if (last == n)
+ EXPECT_EQ(x.MemberEnd(), itr);
+ else
+ EXPECT_EQ(x.MemberBegin() + first, itr);
+
+ size_t removeCount = last - first;
+ EXPECT_EQ(n - removeCount, size_t(x.MemberEnd() - x.MemberBegin());
+ for (unsigned i = 0; i < first; i++)
+ EXPECT_EQ(i, x[keys[i]][0u].GetUint());
+ for (unsigned i = first; i < n - removeCount; i++)
+ EXPECT_EQ(i + removeCount, x[keys[i+removeCount]][0u].GetUint());
+ }
+ }
+
// SetObject()
Value z;
z.SetObject();