72 // verify key iterator |
72 // verify key iterator |
73 { |
73 { |
74 auto keyiter = cxMapIteratorKeys(map); |
74 auto keyiter = cxMapIteratorKeys(map); |
75 std::unordered_set<std::string> keys; |
75 std::unordered_set<std::string> keys; |
76 cx_foreach(CxHashKey*, elem, keyiter) { |
76 cx_foreach(CxHashKey*, elem, keyiter) { |
77 keys.insert(std::string(elem->data.cstr, elem->len)); |
77 keys.insert(std::string(reinterpret_cast<char const*>(elem->data), elem->len)); |
78 } |
78 } |
79 EXPECT_EQ(keyiter.index, map->size); |
79 EXPECT_EQ(keyiter.index, map->size); |
80 ASSERT_EQ(keys.size(), map->size); |
80 ASSERT_EQ(keys.size(), map->size); |
81 for (auto &&k: keys) { |
81 for (auto &&k: keys) { |
82 EXPECT_NE(refmap.find(k), refmap.end()); |
82 EXPECT_NE(refmap.find(k), refmap.end()); |
101 // verify pair iterator |
101 // verify pair iterator |
102 { |
102 { |
103 auto pairiter = cxMapIterator(map); |
103 auto pairiter = cxMapIterator(map); |
104 std::unordered_map<std::string, std::string> pairs; |
104 std::unordered_map<std::string, std::string> pairs; |
105 cx_foreach(CxMapEntry*, entry, pairiter) { |
105 cx_foreach(CxMapEntry*, entry, pairiter) { |
106 pairs[std::string(entry->key->data.cstr, entry->key->len)] = std::string((char *) entry->value); |
106 pairs[std::string(reinterpret_cast<char const*>(entry->key->data), entry->key->len)] = std::string((char *) entry->value); |
107 } |
107 } |
108 EXPECT_EQ(pairiter.index, map->size); |
108 EXPECT_EQ(pairiter.index, map->size); |
109 ASSERT_EQ(pairs.size(), refmap.size()); |
109 ASSERT_EQ(pairs.size(), refmap.size()); |
110 for (auto &&p: pairs) { |
110 for (auto &&p: pairs) { |
111 ASSERT_EQ(p.second, refmap.at(p.first)); |
111 ASSERT_EQ(p.second, refmap.at(p.first)); |
212 cxMapPut(map, cx_hash_key_str("key 5"), (void *) "val 5"); |
212 cxMapPut(map, cx_hash_key_str("key 5"), (void *) "val 5"); |
213 cxMapPut(map, cx_hash_key_str("key 6"), (void *) "val 6"); |
213 cxMapPut(map, cx_hash_key_str("key 6"), (void *) "val 6"); |
214 |
214 |
215 auto iter = cxMapMutIterator(map); |
215 auto iter = cxMapMutIterator(map); |
216 cx_foreach(CxMapEntry*, entry, iter) { |
216 cx_foreach(CxMapEntry*, entry, iter) { |
217 if (entry->key->data.cstr[4] % 2 == 1) cxIteratorFlagRemoval(iter); |
217 if (reinterpret_cast<char const*>(entry->key->data)[4] % 2 == 1) cxIteratorFlagRemoval(iter); |
218 } |
218 } |
219 EXPECT_EQ(map->size, 3); |
219 EXPECT_EQ(map->size, 3); |
220 EXPECT_EQ(iter.index, map->size); |
220 EXPECT_EQ(iter.index, map->size); |
221 |
221 |
222 EXPECT_EQ(cxMapGet(map, cx_hash_key_str("key 1")), nullptr); |
222 EXPECT_EQ(cxMapGet(map, cx_hash_key_str("key 1")), nullptr); |
403 cxMapPut(map, k5, (void *) v5); |
403 cxMapPut(map, k5, (void *) v5); |
404 |
404 |
405 { |
405 { |
406 auto iter = cxMapMutIteratorKeys(map); |
406 auto iter = cxMapMutIteratorKeys(map); |
407 cx_foreach(CxHashKey*, key, iter) { |
407 cx_foreach(CxHashKey*, key, iter) { |
408 if (key->data.cstr[4] == '1') cxIteratorFlagRemoval(iter); |
408 if (reinterpret_cast<char const*>(key->data)[4] == '1') cxIteratorFlagRemoval(iter); |
409 } |
409 } |
410 } |
410 } |
411 { |
411 { |
412 auto iter = cxMapMutIteratorValues(map); |
412 auto iter = cxMapMutIteratorValues(map); |
413 cx_foreach(char*, v, iter) { |
413 cx_foreach(char*, v, iter) { |