| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/assert.h" | 5 #include "platform/assert.h" |
| 6 #include "vm/unit_test.h" | 6 #include "vm/unit_test.h" |
| 7 #include "vm/hash_map.h" | 7 #include "vm/hash_map.h" |
| 8 | 8 |
| 9 namespace dart { | 9 namespace dart { |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 EXPECT(map.IsEmpty()); | 24 EXPECT(map.IsEmpty()); |
| 25 TestValue v1(0); | 25 TestValue v1(0); |
| 26 TestValue v2(1); | 26 TestValue v2(1); |
| 27 TestValue v3(0); | 27 TestValue v3(0); |
| 28 map.Insert(&v1); | 28 map.Insert(&v1); |
| 29 EXPECT(map.LookupValue(&v1) == &v1); | 29 EXPECT(map.LookupValue(&v1) == &v1); |
| 30 map.Insert(&v2); | 30 map.Insert(&v2); |
| 31 EXPECT(map.LookupValue(&v1) == &v1); | 31 EXPECT(map.LookupValue(&v1) == &v1); |
| 32 EXPECT(map.LookupValue(&v2) == &v2); | 32 EXPECT(map.LookupValue(&v2) == &v2); |
| 33 EXPECT(map.LookupValue(&v3) == &v1); | 33 EXPECT(map.LookupValue(&v3) == &v1); |
| 34 EXPECT(map.Remove(&v1)); | |
| 35 EXPECT(map.Lookup(&v1) == NULL); | |
| 36 map.Insert(&v1); | |
| 37 DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map2(map); | 34 DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map2(map); |
| 38 EXPECT(map2.LookupValue(&v1) == &v1); | 35 EXPECT(map2.LookupValue(&v1) == &v1); |
| 39 EXPECT(map2.LookupValue(&v2) == &v2); | 36 EXPECT(map2.LookupValue(&v2) == &v2); |
| 40 EXPECT(map2.LookupValue(&v3) == &v1); | 37 EXPECT(map2.LookupValue(&v3) == &v1); |
| 41 } | 38 } |
| 42 | 39 |
| 43 | 40 |
| 44 TEST_CASE(DirectChainedHashMapInsertRemove) { | |
| 45 DirectChainedHashMap<PointerKeyValueTrait<TestValue> > map; | |
| 46 EXPECT(map.IsEmpty()); | |
| 47 TestValue v1(1); | |
| 48 TestValue v2(3); // Note: v1, v2, v3 should have the same hash. | |
| 49 TestValue v3(5); | |
| 50 | |
| 51 // Start with adding and removing the same element. | |
| 52 map.Insert(&v1); | |
| 53 EXPECT(map.LookupValue(&v1) == &v1); | |
| 54 EXPECT(map.Remove(&v1)); | |
| 55 EXPECT(map.Lookup(&v1) == NULL); | |
| 56 | |
| 57 // Inserting v2 first should put it at the head of the list. | |
| 58 map.Insert(&v2); | |
| 59 map.Insert(&v1); | |
| 60 EXPECT(map.LookupValue(&v2) == &v2); | |
| 61 EXPECT(map.LookupValue(&v1) == &v1); | |
| 62 | |
| 63 // Check to see if removing the head of the list causes issues. | |
| 64 EXPECT(map.Remove(&v2)); | |
| 65 EXPECT(map.Lookup(&v2) == NULL); | |
| 66 EXPECT(map.LookupValue(&v1) == &v1); | |
| 67 | |
| 68 // Reinsert v2, which will place it at the back of the hash map list. | |
| 69 map.Insert(&v2); | |
| 70 EXPECT(map.LookupValue(&v2) == &v2); | |
| 71 | |
| 72 // Remove from the back of the hash map list. | |
| 73 EXPECT(map.Remove(&v2)); | |
| 74 EXPECT(map.Lookup(&v2) == NULL); | |
| 75 EXPECT(map.Remove(&v1)); | |
| 76 EXPECT(map.Lookup(&v1) == NULL); | |
| 77 | |
| 78 // Check to see that removing an invalid element returns false. | |
| 79 EXPECT(!map.Remove(&v1)); | |
| 80 | |
| 81 // One last case: remove from the middle of a hash map list. | |
| 82 map.Insert(&v1); | |
| 83 map.Insert(&v2); | |
| 84 map.Insert(&v3); | |
| 85 | |
| 86 EXPECT(map.LookupValue(&v1) == &v1); | |
| 87 EXPECT(map.LookupValue(&v2) == &v2); | |
| 88 EXPECT(map.LookupValue(&v3) == &v3); | |
| 89 | |
| 90 EXPECT(map.Remove(&v2)); | |
| 91 EXPECT(map.LookupValue(&v1) == &v1); | |
| 92 EXPECT(map.Lookup(&v2) == NULL); | |
| 93 EXPECT(map.LookupValue(&v3) == &v3); | |
| 94 | |
| 95 EXPECT(map.Remove(&v1)); | |
| 96 EXPECT(map.Remove(&v3)); | |
| 97 | |
| 98 EXPECT(map.IsEmpty()); | |
| 99 } | |
| 100 | |
| 101 | |
| 102 TEST_CASE(MallocDirectChainedHashMap) { | 41 TEST_CASE(MallocDirectChainedHashMap) { |
| 103 MallocDirectChainedHashMap<PointerKeyValueTrait<TestValue> > map; | 42 MallocDirectChainedHashMap<PointerKeyValueTrait<TestValue> > map; |
| 104 EXPECT(map.IsEmpty()); | 43 EXPECT(map.IsEmpty()); |
| 105 TestValue v1(0); | 44 TestValue v1(0); |
| 106 TestValue v2(1); | 45 TestValue v2(1); |
| 107 TestValue v3(0); | 46 TestValue v3(0); |
| 108 map.Insert(&v1); | 47 map.Insert(&v1); |
| 109 EXPECT(map.LookupValue(&v1) == &v1); | 48 EXPECT(map.LookupValue(&v1) == &v1); |
| 110 map.Insert(&v2); | 49 map.Insert(&v2); |
| 111 EXPECT(map.LookupValue(&v1) == &v1); | 50 EXPECT(map.LookupValue(&v1) == &v1); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 } | 110 } |
| 172 count++; | 111 count++; |
| 173 sum += p->second(); | 112 sum += p->second(); |
| 174 } | 113 } |
| 175 | 114 |
| 176 EXPECT(count == 5); | 115 EXPECT(count == 5); |
| 177 EXPECT(sum == 15); | 116 EXPECT(sum == 15); |
| 178 } | 117 } |
| 179 | 118 |
| 180 } // namespace dart | 119 } // namespace dart |
| OLD | NEW |