Fix inconsistent Node::size when removing a key with unassigned node and key is a node (#327)

This commit is contained in:
butataatawa 2017-02-18 13:34:42 +01:00
parent d08f68ff02
commit 4329bb7c02
2 changed files with 16 additions and 0 deletions

View File

@ -235,6 +235,14 @@ bool node_data::remove(node& key, shared_memory_holder /* pMemory */) {
if (m_type != NodeType::Map)
return false;
kv_pairs::iterator it = m_undefinedPairs.begin();
while (it != m_undefinedPairs.end()) {
kv_pairs::iterator jt = std::next(it);
if (it->first->is(key))
m_undefinedPairs.erase(it);
it = jt;
}
for (node_map::iterator it = m_map.begin(); it != m_map.end(); ++it) {
if (it->first->is(key)) {
m_map.erase(it);

View File

@ -106,6 +106,14 @@ TEST(NodeTest, RemoveUnassignedNode) {
EXPECT_EQ(0, node.size());
}
TEST(NodeTest, RemoveUnassignedNodeFromMap) {
Node node(NodeType::Map);
Node n;
node[n];
node.remove(n);
EXPECT_EQ(0, node.size());
}
TEST(NodeTest, MapForceInsert) {
Node node;
Node k1("k1");