Fix sequence sometimes not turning into a map

This commit is contained in:
butataatawa 2016-12-08 15:50:28 +01:00
parent 147d909fe6
commit e96654e409
2 changed files with 13 additions and 2 deletions

View File

@ -32,7 +32,7 @@ struct get_idx<Key,
static node* get(std::vector<node*>& sequence, const Key& key, static node* get(std::vector<node*>& sequence, const Key& key,
shared_memory_holder pMemory) { shared_memory_holder pMemory) {
if (key > sequence.size()) if (key > sequence.size() || (key > 0 && !sequence[key-1]->is_defined()))
return 0; return 0;
if (key == sequence.size()) if (key == sequence.size())
sequence.push_back(&pMemory->create_node()); sequence.push_back(&pMemory->create_node());

View File

@ -88,11 +88,22 @@ TEST(NodeTest, MapWithUndefinedValues) {
EXPECT_EQ(2, node.size()); EXPECT_EQ(2, node.size());
} }
TEST(NodeTest, SeqIntoMap) {
Node node;
node[0] = "test";
node[1];
node[2] = "value";
EXPECT_TRUE(node.IsMap());
EXPECT_EQ("test", node[0].as<std::string>());
EXPECT_EQ("value", node[2].as<std::string>());
EXPECT_EQ(2, node.size());
}
TEST(NodeTest, RemoveUnassignedNode) { TEST(NodeTest, RemoveUnassignedNode) {
Node node(NodeType::Map); Node node(NodeType::Map);
node["key"]; node["key"];
node.remove("key"); node.remove("key");
EXPECT_EQ(node.size(), 0); EXPECT_EQ(0, node.size());
} }
TEST(NodeTest, MapForceInsert) { TEST(NodeTest, MapForceInsert) {