Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: runtime/vm/hash_map_test.cc

Issue 2623613003: Implemented basic heap memory allocation tracking in MallocHooks using hooks registered with tcmall… (Closed)
Patch Set: Implemented basic heap memory allocation tracking in MallocHooks using hooks registered with tcmall… Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/hash_map_test.cc
diff --git a/runtime/vm/hash_map_test.cc b/runtime/vm/hash_map_test.cc
index b3afddedf4942cecffdd117660d7e59a9cd875f6..2f49b362983d7b82dbff7e4b8f43748025a778fc 100644
--- a/runtime/vm/hash_map_test.cc
+++ b/runtime/vm/hash_map_test.cc
@@ -31,6 +31,9 @@ TEST_CASE(DirectChainedHashMap) {
EXPECT(map.LookupValue(&v1) == &v1);
EXPECT(map.LookupValue(&v2) == &v2);
EXPECT(map.LookupValue(&v3) == &v1);
+ EXPECT(map.Remove(&v1));
+ EXPECT(map.Lookup(&v1) == NULL);
+ map.Insert(&v1);
DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map2(map);
EXPECT(map2.LookupValue(&v1) == &v1);
EXPECT(map2.LookupValue(&v2) == &v2);
@@ -38,6 +41,64 @@ TEST_CASE(DirectChainedHashMap) {
}
+TEST_CASE(DirectChainedHashMapInsertRemove) {
+ DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map;
+ EXPECT(map.IsEmpty());
+ TestValue v1(1);
+ TestValue v2(3); // Note: v1, v2, v3 should have the same hash.
+ TestValue v3(5);
+
+ // Start with adding and removing the same element.
+ map.Insert(&v1);
+ EXPECT(map.LookupValue(&v1) == &v1);
+ EXPECT(map.Remove(&v1));
+ EXPECT(map.Lookup(&v1) == NULL);
+
+ // Inserting v2 first should put it at the head of the list.
+ map.Insert(&v2);
+ map.Insert(&v1);
+ EXPECT(map.LookupValue(&v2) == &v2);
+ EXPECT(map.LookupValue(&v1) == &v1);
+
+ // Check to see if removing the head of the list causes issues.
+ EXPECT(map.Remove(&v2));
+ EXPECT(map.Lookup(&v2) == NULL);
+ EXPECT(map.LookupValue(&v1) == &v1);
+
+ // Reinsert v2, which will place it at the back of the hash map list.
+ map.Insert(&v2);
+ EXPECT(map.LookupValue(&v2) == &v2);
+
+ // Remove from the back of the hash map list.
+ EXPECT(map.Remove(&v2));
+ EXPECT(map.Lookup(&v2) == NULL);
+ EXPECT(map.Remove(&v1));
+ EXPECT(map.Lookup(&v1) == NULL);
+
+ // Check to see that removing an invalid element returns false.
+ EXPECT(!map.Remove(&v1));
+
+ // One last case: remove from the middle of a hash map list.
+ map.Insert(&v1);
+ map.Insert(&v2);
+ map.Insert(&v3);
+
+ EXPECT(map.LookupValue(&v1) == &v1);
+ EXPECT(map.LookupValue(&v2) == &v2);
+ EXPECT(map.LookupValue(&v3) == &v3);
+
+ EXPECT(map.Remove(&v2));
+ EXPECT(map.LookupValue(&v1) == &v1);
+ EXPECT(map.Lookup(&v2) == NULL);
+ EXPECT(map.LookupValue(&v3) == &v3);
+
+ EXPECT(map.Remove(&v1));
+ EXPECT(map.Remove(&v3));
+
+ EXPECT(map.IsEmpty());
+}
+
+
TEST_CASE(MallocDirectChainedHashMap) {
MallocDirectChainedHashMap<PointerKeyValueTrait<TestValue> > map;
EXPECT(map.IsEmpty());

Powered by Google App Engine
This is Rietveld 408576698