| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2012 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 template <typename Set> | 41 template <typename Set> |
| 42 class ListOrLinkedHashSetTest : public ::testing::Test {}; | 42 class ListOrLinkedHashSetTest : public ::testing::Test {}; |
| 43 | 43 |
| 44 using SetTypes = | 44 using SetTypes = |
| 45 ::testing::Types<ListHashSet<int>, ListHashSet<int, 1>, LinkedHashSet<int>>; | 45 ::testing::Types<ListHashSet<int>, ListHashSet<int, 1>, LinkedHashSet<int>>; |
| 46 TYPED_TEST_CASE(ListOrLinkedHashSetTest, SetTypes); | 46 TYPED_TEST_CASE(ListOrLinkedHashSetTest, SetTypes); |
| 47 | 47 |
| 48 TYPED_TEST(ListOrLinkedHashSetTest, RemoveFirst) { | 48 TYPED_TEST(ListOrLinkedHashSetTest, RemoveFirst) { |
| 49 using Set = TypeParam; | 49 using Set = TypeParam; |
| 50 Set list; | 50 Set list; |
| 51 list.add(-1); | 51 list.insert(-1); |
| 52 list.add(0); | 52 list.insert(0); |
| 53 list.add(1); | 53 list.insert(1); |
| 54 list.add(2); | 54 list.insert(2); |
| 55 list.add(3); | 55 list.insert(3); |
| 56 | 56 |
| 57 EXPECT_EQ(-1, list.first()); | 57 EXPECT_EQ(-1, list.first()); |
| 58 EXPECT_EQ(3, list.last()); | 58 EXPECT_EQ(3, list.last()); |
| 59 | 59 |
| 60 list.removeFirst(); | 60 list.removeFirst(); |
| 61 EXPECT_EQ(0, list.first()); | 61 EXPECT_EQ(0, list.first()); |
| 62 | 62 |
| 63 list.removeLast(); | 63 list.removeLast(); |
| 64 EXPECT_EQ(2, list.last()); | 64 EXPECT_EQ(2, list.last()); |
| 65 | 65 |
| 66 list.removeFirst(); | 66 list.removeFirst(); |
| 67 EXPECT_EQ(1, list.first()); | 67 EXPECT_EQ(1, list.first()); |
| 68 | 68 |
| 69 list.removeFirst(); | 69 list.removeFirst(); |
| 70 EXPECT_EQ(2, list.first()); | 70 EXPECT_EQ(2, list.first()); |
| 71 | 71 |
| 72 list.removeFirst(); | 72 list.removeFirst(); |
| 73 EXPECT_TRUE(list.isEmpty()); | 73 EXPECT_TRUE(list.isEmpty()); |
| 74 } | 74 } |
| 75 | 75 |
| 76 TYPED_TEST(ListOrLinkedHashSetTest, AppendOrMoveToLastNewItems) { | 76 TYPED_TEST(ListOrLinkedHashSetTest, AppendOrMoveToLastNewItems) { |
| 77 using Set = TypeParam; | 77 using Set = TypeParam; |
| 78 Set list; | 78 Set list; |
| 79 typename Set::AddResult result = list.appendOrMoveToLast(1); | 79 typename Set::AddResult result = list.appendOrMoveToLast(1); |
| 80 EXPECT_TRUE(result.isNewEntry); | 80 EXPECT_TRUE(result.isNewEntry); |
| 81 result = list.add(2); | 81 result = list.insert(2); |
| 82 EXPECT_TRUE(result.isNewEntry); | 82 EXPECT_TRUE(result.isNewEntry); |
| 83 result = list.appendOrMoveToLast(3); | 83 result = list.appendOrMoveToLast(3); |
| 84 EXPECT_TRUE(result.isNewEntry); | 84 EXPECT_TRUE(result.isNewEntry); |
| 85 | 85 |
| 86 EXPECT_EQ(list.size(), 3UL); | 86 EXPECT_EQ(list.size(), 3UL); |
| 87 | 87 |
| 88 // The list should be in order 1, 2, 3. | 88 // The list should be in order 1, 2, 3. |
| 89 typename Set::iterator iterator = list.begin(); | 89 typename Set::iterator iterator = list.begin(); |
| 90 EXPECT_EQ(1, *iterator); | 90 EXPECT_EQ(1, *iterator); |
| 91 ++iterator; | 91 ++iterator; |
| 92 EXPECT_EQ(2, *iterator); | 92 EXPECT_EQ(2, *iterator); |
| 93 ++iterator; | 93 ++iterator; |
| 94 EXPECT_EQ(3, *iterator); | 94 EXPECT_EQ(3, *iterator); |
| 95 ++iterator; | 95 ++iterator; |
| 96 } | 96 } |
| 97 | 97 |
| 98 TYPED_TEST(ListOrLinkedHashSetTest, AppendOrMoveToLastWithDuplicates) { | 98 TYPED_TEST(ListOrLinkedHashSetTest, AppendOrMoveToLastWithDuplicates) { |
| 99 using Set = TypeParam; | 99 using Set = TypeParam; |
| 100 Set list; | 100 Set list; |
| 101 | 101 |
| 102 // Add a single element twice. | 102 // Add a single element twice. |
| 103 typename Set::AddResult result = list.add(1); | 103 typename Set::AddResult result = list.insert(1); |
| 104 EXPECT_TRUE(result.isNewEntry); | 104 EXPECT_TRUE(result.isNewEntry); |
| 105 result = list.appendOrMoveToLast(1); | 105 result = list.appendOrMoveToLast(1); |
| 106 EXPECT_FALSE(result.isNewEntry); | 106 EXPECT_FALSE(result.isNewEntry); |
| 107 EXPECT_EQ(1UL, list.size()); | 107 EXPECT_EQ(1UL, list.size()); |
| 108 | 108 |
| 109 list.add(2); | 109 list.insert(2); |
| 110 list.add(3); | 110 list.insert(3); |
| 111 EXPECT_EQ(3UL, list.size()); | 111 EXPECT_EQ(3UL, list.size()); |
| 112 | 112 |
| 113 // Appending 2 move it to the end. | 113 // Appending 2 move it to the end. |
| 114 EXPECT_EQ(3, list.last()); | 114 EXPECT_EQ(3, list.last()); |
| 115 result = list.appendOrMoveToLast(2); | 115 result = list.appendOrMoveToLast(2); |
| 116 EXPECT_FALSE(result.isNewEntry); | 116 EXPECT_FALSE(result.isNewEntry); |
| 117 EXPECT_EQ(2, list.last()); | 117 EXPECT_EQ(2, list.last()); |
| 118 | 118 |
| 119 // Inverse the list by moving each element to end end. | 119 // Inverse the list by moving each element to end end. |
| 120 result = list.appendOrMoveToLast(3); | 120 result = list.appendOrMoveToLast(3); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 132 ++iterator; | 132 ++iterator; |
| 133 EXPECT_EQ(1, *iterator); | 133 EXPECT_EQ(1, *iterator); |
| 134 ++iterator; | 134 ++iterator; |
| 135 } | 135 } |
| 136 | 136 |
| 137 TYPED_TEST(ListOrLinkedHashSetTest, PrependOrMoveToFirstNewItems) { | 137 TYPED_TEST(ListOrLinkedHashSetTest, PrependOrMoveToFirstNewItems) { |
| 138 using Set = TypeParam; | 138 using Set = TypeParam; |
| 139 Set list; | 139 Set list; |
| 140 typename Set::AddResult result = list.prependOrMoveToFirst(1); | 140 typename Set::AddResult result = list.prependOrMoveToFirst(1); |
| 141 EXPECT_TRUE(result.isNewEntry); | 141 EXPECT_TRUE(result.isNewEntry); |
| 142 result = list.add(2); | 142 result = list.insert(2); |
| 143 EXPECT_TRUE(result.isNewEntry); | 143 EXPECT_TRUE(result.isNewEntry); |
| 144 result = list.prependOrMoveToFirst(3); | 144 result = list.prependOrMoveToFirst(3); |
| 145 EXPECT_TRUE(result.isNewEntry); | 145 EXPECT_TRUE(result.isNewEntry); |
| 146 | 146 |
| 147 EXPECT_EQ(list.size(), 3UL); | 147 EXPECT_EQ(list.size(), 3UL); |
| 148 | 148 |
| 149 // The list should be in order 3, 1, 2. | 149 // The list should be in order 3, 1, 2. |
| 150 typename Set::iterator iterator = list.begin(); | 150 typename Set::iterator iterator = list.begin(); |
| 151 EXPECT_EQ(3, *iterator); | 151 EXPECT_EQ(3, *iterator); |
| 152 ++iterator; | 152 ++iterator; |
| 153 EXPECT_EQ(1, *iterator); | 153 EXPECT_EQ(1, *iterator); |
| 154 ++iterator; | 154 ++iterator; |
| 155 EXPECT_EQ(2, *iterator); | 155 EXPECT_EQ(2, *iterator); |
| 156 ++iterator; | 156 ++iterator; |
| 157 } | 157 } |
| 158 | 158 |
| 159 TYPED_TEST(ListOrLinkedHashSetTest, PrependOrMoveToLastWithDuplicates) { | 159 TYPED_TEST(ListOrLinkedHashSetTest, PrependOrMoveToLastWithDuplicates) { |
| 160 using Set = TypeParam; | 160 using Set = TypeParam; |
| 161 Set list; | 161 Set list; |
| 162 | 162 |
| 163 // Add a single element twice. | 163 // Add a single element twice. |
| 164 typename Set::AddResult result = list.add(1); | 164 typename Set::AddResult result = list.insert(1); |
| 165 EXPECT_TRUE(result.isNewEntry); | 165 EXPECT_TRUE(result.isNewEntry); |
| 166 result = list.prependOrMoveToFirst(1); | 166 result = list.prependOrMoveToFirst(1); |
| 167 EXPECT_FALSE(result.isNewEntry); | 167 EXPECT_FALSE(result.isNewEntry); |
| 168 EXPECT_EQ(1UL, list.size()); | 168 EXPECT_EQ(1UL, list.size()); |
| 169 | 169 |
| 170 list.add(2); | 170 list.insert(2); |
| 171 list.add(3); | 171 list.insert(3); |
| 172 EXPECT_EQ(3UL, list.size()); | 172 EXPECT_EQ(3UL, list.size()); |
| 173 | 173 |
| 174 // Prepending 2 move it to the beginning. | 174 // Prepending 2 move it to the beginning. |
| 175 EXPECT_EQ(1, list.first()); | 175 EXPECT_EQ(1, list.first()); |
| 176 result = list.prependOrMoveToFirst(2); | 176 result = list.prependOrMoveToFirst(2); |
| 177 EXPECT_FALSE(result.isNewEntry); | 177 EXPECT_FALSE(result.isNewEntry); |
| 178 EXPECT_EQ(2, list.first()); | 178 EXPECT_EQ(2, list.first()); |
| 179 | 179 |
| 180 // Inverse the list by moving each element to the first position. | 180 // Inverse the list by moving each element to the first position. |
| 181 result = list.prependOrMoveToFirst(1); | 181 result = list.prependOrMoveToFirst(1); |
| 182 EXPECT_FALSE(result.isNewEntry); | 182 EXPECT_FALSE(result.isNewEntry); |
| 183 result = list.prependOrMoveToFirst(2); | 183 result = list.prependOrMoveToFirst(2); |
| 184 EXPECT_FALSE(result.isNewEntry); | 184 EXPECT_FALSE(result.isNewEntry); |
| 185 result = list.prependOrMoveToFirst(3); | 185 result = list.prependOrMoveToFirst(3); |
| 186 EXPECT_FALSE(result.isNewEntry); | 186 EXPECT_FALSE(result.isNewEntry); |
| 187 EXPECT_EQ(3UL, list.size()); | 187 EXPECT_EQ(3UL, list.size()); |
| 188 | 188 |
| 189 typename Set::iterator iterator = list.begin(); | 189 typename Set::iterator iterator = list.begin(); |
| 190 EXPECT_EQ(3, *iterator); | 190 EXPECT_EQ(3, *iterator); |
| 191 ++iterator; | 191 ++iterator; |
| 192 EXPECT_EQ(2, *iterator); | 192 EXPECT_EQ(2, *iterator); |
| 193 ++iterator; | 193 ++iterator; |
| 194 EXPECT_EQ(1, *iterator); | 194 EXPECT_EQ(1, *iterator); |
| 195 ++iterator; | 195 ++iterator; |
| 196 } | 196 } |
| 197 | 197 |
| 198 TYPED_TEST(ListOrLinkedHashSetTest, Find) { | 198 TYPED_TEST(ListOrLinkedHashSetTest, Find) { |
| 199 using Set = TypeParam; | 199 using Set = TypeParam; |
| 200 Set set; | 200 Set set; |
| 201 set.add(-1); | 201 set.insert(-1); |
| 202 set.add(0); | 202 set.insert(0); |
| 203 set.add(1); | 203 set.insert(1); |
| 204 set.add(2); | 204 set.insert(2); |
| 205 set.add(3); | 205 set.insert(3); |
| 206 | 206 |
| 207 { | 207 { |
| 208 const Set& ref = set; | 208 const Set& ref = set; |
| 209 typename Set::const_iterator it = ref.find(2); | 209 typename Set::const_iterator it = ref.find(2); |
| 210 EXPECT_EQ(2, *it); | 210 EXPECT_EQ(2, *it); |
| 211 ++it; | 211 ++it; |
| 212 EXPECT_EQ(3, *it); | 212 EXPECT_EQ(3, *it); |
| 213 --it; | 213 --it; |
| 214 --it; | 214 --it; |
| 215 EXPECT_EQ(1, *it); | 215 EXPECT_EQ(1, *it); |
| 216 } | 216 } |
| 217 { | 217 { |
| 218 Set& ref = set; | 218 Set& ref = set; |
| 219 typename Set::iterator it = ref.find(2); | 219 typename Set::iterator it = ref.find(2); |
| 220 EXPECT_EQ(2, *it); | 220 EXPECT_EQ(2, *it); |
| 221 ++it; | 221 ++it; |
| 222 EXPECT_EQ(3, *it); | 222 EXPECT_EQ(3, *it); |
| 223 --it; | 223 --it; |
| 224 --it; | 224 --it; |
| 225 EXPECT_EQ(1, *it); | 225 EXPECT_EQ(1, *it); |
| 226 } | 226 } |
| 227 } | 227 } |
| 228 | 228 |
| 229 TYPED_TEST(ListOrLinkedHashSetTest, InsertBefore) { | 229 TYPED_TEST(ListOrLinkedHashSetTest, InsertBefore) { |
| 230 using Set = TypeParam; | 230 using Set = TypeParam; |
| 231 bool canModifyWhileIterating = !std::is_same<Set, LinkedHashSet<int>>::value; | 231 bool canModifyWhileIterating = !std::is_same<Set, LinkedHashSet<int>>::value; |
| 232 Set set; | 232 Set set; |
| 233 set.add(-1); | 233 set.insert(-1); |
| 234 set.add(0); | 234 set.insert(0); |
| 235 set.add(2); | 235 set.insert(2); |
| 236 set.add(3); | 236 set.insert(3); |
| 237 | 237 |
| 238 typename Set::iterator it = set.find(2); | 238 typename Set::iterator it = set.find(2); |
| 239 EXPECT_EQ(2, *it); | 239 EXPECT_EQ(2, *it); |
| 240 set.insertBefore(it, 1); | 240 set.insertBefore(it, 1); |
| 241 if (!canModifyWhileIterating) | 241 if (!canModifyWhileIterating) |
| 242 it = set.find(2); | 242 it = set.find(2); |
| 243 ++it; | 243 ++it; |
| 244 EXPECT_EQ(3, *it); | 244 EXPECT_EQ(3, *it); |
| 245 EXPECT_EQ(5u, set.size()); | 245 EXPECT_EQ(5u, set.size()); |
| 246 --it; | 246 --it; |
| 247 --it; | 247 --it; |
| 248 EXPECT_EQ(1, *it); | 248 EXPECT_EQ(1, *it); |
| 249 if (canModifyWhileIterating) { | 249 if (canModifyWhileIterating) { |
| 250 set.remove(-1); | 250 set.remove(-1); |
| 251 set.remove(0); | 251 set.remove(0); |
| 252 set.remove(2); | 252 set.remove(2); |
| 253 set.remove(3); | 253 set.remove(3); |
| 254 EXPECT_EQ(1u, set.size()); | 254 EXPECT_EQ(1u, set.size()); |
| 255 EXPECT_EQ(1, *it); | 255 EXPECT_EQ(1, *it); |
| 256 ++it; | 256 ++it; |
| 257 EXPECT_EQ(it, set.end()); | 257 EXPECT_EQ(it, set.end()); |
| 258 --it; | 258 --it; |
| 259 EXPECT_EQ(1, *it); | 259 EXPECT_EQ(1, *it); |
| 260 set.insertBefore(it, -1); | 260 set.insertBefore(it, -1); |
| 261 set.insertBefore(it, 0); | 261 set.insertBefore(it, 0); |
| 262 set.add(2); | 262 set.insert(2); |
| 263 set.add(3); | 263 set.insert(3); |
| 264 } | 264 } |
| 265 set.insertBefore(2, 42); | 265 set.insertBefore(2, 42); |
| 266 set.insertBefore(-1, 103); | 266 set.insertBefore(-1, 103); |
| 267 EXPECT_EQ(103, set.first()); | 267 EXPECT_EQ(103, set.first()); |
| 268 if (!canModifyWhileIterating) | 268 if (!canModifyWhileIterating) |
| 269 it = set.find(1); | 269 it = set.find(1); |
| 270 ++it; | 270 ++it; |
| 271 EXPECT_EQ(42, *it); | 271 EXPECT_EQ(42, *it); |
| 272 EXPECT_EQ(7u, set.size()); | 272 EXPECT_EQ(7u, set.size()); |
| 273 } | 273 } |
| 274 | 274 |
| 275 TYPED_TEST(ListOrLinkedHashSetTest, AddReturnIterator) { | 275 TYPED_TEST(ListOrLinkedHashSetTest, AddReturnIterator) { |
| 276 using Set = TypeParam; | 276 using Set = TypeParam; |
| 277 bool canModifyWhileIterating = !std::is_same<Set, LinkedHashSet<int>>::value; | 277 bool canModifyWhileIterating = !std::is_same<Set, LinkedHashSet<int>>::value; |
| 278 Set set; | 278 Set set; |
| 279 set.add(-1); | 279 set.insert(-1); |
| 280 set.add(0); | 280 set.insert(0); |
| 281 set.add(1); | 281 set.insert(1); |
| 282 set.add(2); | 282 set.insert(2); |
| 283 | 283 |
| 284 typename Set::iterator it = set.addReturnIterator(3); | 284 typename Set::iterator it = set.addReturnIterator(3); |
| 285 EXPECT_EQ(3, *it); | 285 EXPECT_EQ(3, *it); |
| 286 --it; | 286 --it; |
| 287 EXPECT_EQ(2, *it); | 287 EXPECT_EQ(2, *it); |
| 288 EXPECT_EQ(5u, set.size()); | 288 EXPECT_EQ(5u, set.size()); |
| 289 --it; | 289 --it; |
| 290 EXPECT_EQ(1, *it); | 290 EXPECT_EQ(1, *it); |
| 291 --it; | 291 --it; |
| 292 EXPECT_EQ(0, *it); | 292 EXPECT_EQ(0, *it); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 319 EXPECT_EQ(4, set.last()); | 319 EXPECT_EQ(4, set.last()); |
| 320 } | 320 } |
| 321 | 321 |
| 322 TYPED_TEST(ListOrLinkedHashSetTest, Swap) { | 322 TYPED_TEST(ListOrLinkedHashSetTest, Swap) { |
| 323 using Set = TypeParam; | 323 using Set = TypeParam; |
| 324 int num = 10; | 324 int num = 10; |
| 325 Set set0; | 325 Set set0; |
| 326 Set set1; | 326 Set set1; |
| 327 Set set2; | 327 Set set2; |
| 328 for (int i = 0; i < num; ++i) { | 328 for (int i = 0; i < num; ++i) { |
| 329 set1.add(i + 1); | 329 set1.insert(i + 1); |
| 330 set2.add(num - i); | 330 set2.insert(num - i); |
| 331 } | 331 } |
| 332 | 332 |
| 333 typename Set::iterator it1 = set1.begin(); | 333 typename Set::iterator it1 = set1.begin(); |
| 334 typename Set::iterator it2 = set2.begin(); | 334 typename Set::iterator it2 = set2.begin(); |
| 335 for (int i = 0; i < num; ++i, ++it1, ++it2) { | 335 for (int i = 0; i < num; ++i, ++it1, ++it2) { |
| 336 EXPECT_EQ(*it1, i + 1); | 336 EXPECT_EQ(*it1, i + 1); |
| 337 EXPECT_EQ(*it2, num - i); | 337 EXPECT_EQ(*it2, num - i); |
| 338 } | 338 } |
| 339 EXPECT_EQ(set0.begin(), set0.end()); | 339 EXPECT_EQ(set0.begin(), set0.end()); |
| 340 EXPECT_EQ(it1, set1.end()); | 340 EXPECT_EQ(it1, set1.end()); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 TYPED_TEST_CASE(ListOrLinkedHashSetRefPtrTest, RefPtrSetTypes); | 398 TYPED_TEST_CASE(ListOrLinkedHashSetRefPtrTest, RefPtrSetTypes); |
| 399 | 399 |
| 400 TYPED_TEST(ListOrLinkedHashSetRefPtrTest, WithRefPtr) { | 400 TYPED_TEST(ListOrLinkedHashSetRefPtrTest, WithRefPtr) { |
| 401 using Set = TypeParam; | 401 using Set = TypeParam; |
| 402 bool isDeleted = false; | 402 bool isDeleted = false; |
| 403 DummyRefCounted::m_refInvokesCount = 0; | 403 DummyRefCounted::m_refInvokesCount = 0; |
| 404 RefPtr<DummyRefCounted> ptr = adoptRef(new DummyRefCounted(isDeleted)); | 404 RefPtr<DummyRefCounted> ptr = adoptRef(new DummyRefCounted(isDeleted)); |
| 405 EXPECT_EQ(0, DummyRefCounted::m_refInvokesCount); | 405 EXPECT_EQ(0, DummyRefCounted::m_refInvokesCount); |
| 406 | 406 |
| 407 Set set; | 407 Set set; |
| 408 set.add(ptr); | 408 set.insert(ptr); |
| 409 // Referenced only once (to store a copy in the container). | 409 // Referenced only once (to store a copy in the container). |
| 410 EXPECT_EQ(1, DummyRefCounted::m_refInvokesCount); | 410 EXPECT_EQ(1, DummyRefCounted::m_refInvokesCount); |
| 411 EXPECT_EQ(ptr, set.first()); | 411 EXPECT_EQ(ptr, set.first()); |
| 412 EXPECT_EQ(1, DummyRefCounted::m_refInvokesCount); | 412 EXPECT_EQ(1, DummyRefCounted::m_refInvokesCount); |
| 413 | 413 |
| 414 DummyRefCounted* rawPtr = ptr.get(); | 414 DummyRefCounted* rawPtr = ptr.get(); |
| 415 | 415 |
| 416 EXPECT_TRUE(set.contains(ptr)); | 416 EXPECT_TRUE(set.contains(ptr)); |
| 417 EXPECT_TRUE(set.contains(rawPtr)); | 417 EXPECT_TRUE(set.contains(rawPtr)); |
| 418 EXPECT_EQ(1, DummyRefCounted::m_refInvokesCount); | 418 EXPECT_EQ(1, DummyRefCounted::m_refInvokesCount); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 429 | 429 |
| 430 TYPED_TEST(ListOrLinkedHashSetRefPtrTest, ExerciseValuePeekInType) { | 430 TYPED_TEST(ListOrLinkedHashSetRefPtrTest, ExerciseValuePeekInType) { |
| 431 using Set = TypeParam; | 431 using Set = TypeParam; |
| 432 Set set; | 432 Set set; |
| 433 bool isDeleted = false; | 433 bool isDeleted = false; |
| 434 bool isDeleted2 = false; | 434 bool isDeleted2 = false; |
| 435 | 435 |
| 436 RefPtr<DummyRefCounted> ptr = adoptRef(new DummyRefCounted(isDeleted)); | 436 RefPtr<DummyRefCounted> ptr = adoptRef(new DummyRefCounted(isDeleted)); |
| 437 RefPtr<DummyRefCounted> ptr2 = adoptRef(new DummyRefCounted(isDeleted2)); | 437 RefPtr<DummyRefCounted> ptr2 = adoptRef(new DummyRefCounted(isDeleted2)); |
| 438 | 438 |
| 439 typename Set::AddResult addResult = set.add(ptr); | 439 typename Set::AddResult addResult = set.insert(ptr); |
| 440 EXPECT_TRUE(addResult.isNewEntry); | 440 EXPECT_TRUE(addResult.isNewEntry); |
| 441 set.find(ptr); | 441 set.find(ptr); |
| 442 const Set& constSet(set); | 442 const Set& constSet(set); |
| 443 constSet.find(ptr); | 443 constSet.find(ptr); |
| 444 EXPECT_TRUE(set.contains(ptr)); | 444 EXPECT_TRUE(set.contains(ptr)); |
| 445 typename Set::iterator it = set.addReturnIterator(ptr); | 445 typename Set::iterator it = set.addReturnIterator(ptr); |
| 446 set.appendOrMoveToLast(ptr); | 446 set.appendOrMoveToLast(ptr); |
| 447 set.prependOrMoveToFirst(ptr); | 447 set.prependOrMoveToFirst(ptr); |
| 448 set.insertBefore(ptr, ptr); | 448 set.insertBefore(ptr, ptr); |
| 449 set.insertBefore(it, ptr); | 449 set.insertBefore(it, ptr); |
| 450 EXPECT_EQ(1u, set.size()); | 450 EXPECT_EQ(1u, set.size()); |
| 451 set.add(ptr2); | 451 set.insert(ptr2); |
| 452 ptr2.clear(); | 452 ptr2.clear(); |
| 453 set.remove(ptr); | 453 set.remove(ptr); |
| 454 | 454 |
| 455 EXPECT_FALSE(isDeleted); | 455 EXPECT_FALSE(isDeleted); |
| 456 ptr.clear(); | 456 ptr.clear(); |
| 457 EXPECT_TRUE(isDeleted); | 457 EXPECT_TRUE(isDeleted); |
| 458 | 458 |
| 459 EXPECT_FALSE(isDeleted2); | 459 EXPECT_FALSE(isDeleted2); |
| 460 set.removeFirst(); | 460 set.removeFirst(); |
| 461 EXPECT_TRUE(isDeleted2); | 461 EXPECT_TRUE(isDeleted2); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 | 502 |
| 503 using TranslatorSetTypes = | 503 using TranslatorSetTypes = |
| 504 ::testing::Types<ListHashSet<Complicated, 256, ComplicatedHashFunctions>, | 504 ::testing::Types<ListHashSet<Complicated, 256, ComplicatedHashFunctions>, |
| 505 ListHashSet<Complicated, 1, ComplicatedHashFunctions>, | 505 ListHashSet<Complicated, 1, ComplicatedHashFunctions>, |
| 506 LinkedHashSet<Complicated, ComplicatedHashFunctions>>; | 506 LinkedHashSet<Complicated, ComplicatedHashFunctions>>; |
| 507 TYPED_TEST_CASE(ListOrLinkedHashSetTranslatorTest, TranslatorSetTypes); | 507 TYPED_TEST_CASE(ListOrLinkedHashSetTranslatorTest, TranslatorSetTypes); |
| 508 | 508 |
| 509 TYPED_TEST(ListOrLinkedHashSetTranslatorTest, ComplexityTranslator) { | 509 TYPED_TEST(ListOrLinkedHashSetTranslatorTest, ComplexityTranslator) { |
| 510 using Set = TypeParam; | 510 using Set = TypeParam; |
| 511 Set set; | 511 Set set; |
| 512 set.add(Complicated(42)); | 512 set.insert(Complicated(42)); |
| 513 int baseLine = Complicated::s_objectsConstructed; | 513 int baseLine = Complicated::s_objectsConstructed; |
| 514 | 514 |
| 515 typename Set::iterator it = | 515 typename Set::iterator it = |
| 516 set.template find<ComplexityTranslator>(Simple(42)); | 516 set.template find<ComplexityTranslator>(Simple(42)); |
| 517 EXPECT_NE(it, set.end()); | 517 EXPECT_NE(it, set.end()); |
| 518 EXPECT_EQ(baseLine, Complicated::s_objectsConstructed); | 518 EXPECT_EQ(baseLine, Complicated::s_objectsConstructed); |
| 519 | 519 |
| 520 it = set.template find<ComplexityTranslator>(Simple(103)); | 520 it = set.template find<ComplexityTranslator>(Simple(103)); |
| 521 EXPECT_EQ(it, set.end()); | 521 EXPECT_EQ(it, set.end()); |
| 522 EXPECT_EQ(baseLine, Complicated::s_objectsConstructed); | 522 EXPECT_EQ(baseLine, Complicated::s_objectsConstructed); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 544 TEST(ListHashSetTest, WithOwnPtr) { | 544 TEST(ListHashSetTest, WithOwnPtr) { |
| 545 bool deleted1 = false, deleted2 = false; | 545 bool deleted1 = false, deleted2 = false; |
| 546 | 546 |
| 547 typedef ListHashSet<std::unique_ptr<Dummy>> OwnPtrSet; | 547 typedef ListHashSet<std::unique_ptr<Dummy>> OwnPtrSet; |
| 548 OwnPtrSet set; | 548 OwnPtrSet set; |
| 549 | 549 |
| 550 Dummy* ptr1 = new Dummy(deleted1); | 550 Dummy* ptr1 = new Dummy(deleted1); |
| 551 { | 551 { |
| 552 // AddResult in a separate scope to avoid assertion hit, | 552 // AddResult in a separate scope to avoid assertion hit, |
| 553 // since we modify the container further. | 553 // since we modify the container further. |
| 554 OwnPtrSet::AddResult res1 = set.add(WTF::wrapUnique(ptr1)); | 554 OwnPtrSet::AddResult res1 = set.insert(WTF::wrapUnique(ptr1)); |
| 555 EXPECT_EQ(res1.storedValue->get(), ptr1); | 555 EXPECT_EQ(res1.storedValue->get(), ptr1); |
| 556 } | 556 } |
| 557 | 557 |
| 558 EXPECT_FALSE(deleted1); | 558 EXPECT_FALSE(deleted1); |
| 559 EXPECT_EQ(1UL, set.size()); | 559 EXPECT_EQ(1UL, set.size()); |
| 560 OwnPtrSet::iterator it1 = set.find(ptr1); | 560 OwnPtrSet::iterator it1 = set.find(ptr1); |
| 561 EXPECT_NE(set.end(), it1); | 561 EXPECT_NE(set.end(), it1); |
| 562 EXPECT_EQ(ptr1, (*it1).get()); | 562 EXPECT_EQ(ptr1, (*it1).get()); |
| 563 | 563 |
| 564 Dummy* ptr2 = new Dummy(deleted2); | 564 Dummy* ptr2 = new Dummy(deleted2); |
| 565 { | 565 { |
| 566 OwnPtrSet::AddResult res2 = set.add(WTF::wrapUnique(ptr2)); | 566 OwnPtrSet::AddResult res2 = set.insert(WTF::wrapUnique(ptr2)); |
| 567 EXPECT_EQ(res2.storedValue->get(), ptr2); | 567 EXPECT_EQ(res2.storedValue->get(), ptr2); |
| 568 } | 568 } |
| 569 | 569 |
| 570 EXPECT_FALSE(deleted2); | 570 EXPECT_FALSE(deleted2); |
| 571 EXPECT_EQ(2UL, set.size()); | 571 EXPECT_EQ(2UL, set.size()); |
| 572 OwnPtrSet::iterator it2 = set.find(ptr2); | 572 OwnPtrSet::iterator it2 = set.find(ptr2); |
| 573 EXPECT_NE(set.end(), it2); | 573 EXPECT_NE(set.end(), it2); |
| 574 EXPECT_EQ(ptr2, (*it2).get()); | 574 EXPECT_EQ(ptr2, (*it2).get()); |
| 575 | 575 |
| 576 set.remove(ptr1); | 576 set.remove(ptr1); |
| 577 EXPECT_TRUE(deleted1); | 577 EXPECT_TRUE(deleted1); |
| 578 | 578 |
| 579 set.clear(); | 579 set.clear(); |
| 580 EXPECT_TRUE(deleted2); | 580 EXPECT_TRUE(deleted2); |
| 581 EXPECT_TRUE(set.isEmpty()); | 581 EXPECT_TRUE(set.isEmpty()); |
| 582 | 582 |
| 583 deleted1 = false; | 583 deleted1 = false; |
| 584 deleted2 = false; | 584 deleted2 = false; |
| 585 { | 585 { |
| 586 OwnPtrSet set; | 586 OwnPtrSet set; |
| 587 set.add(WTF::makeUnique<Dummy>(deleted1)); | 587 set.insert(WTF::makeUnique<Dummy>(deleted1)); |
| 588 set.add(WTF::makeUnique<Dummy>(deleted2)); | 588 set.insert(WTF::makeUnique<Dummy>(deleted2)); |
| 589 } | 589 } |
| 590 EXPECT_TRUE(deleted1); | 590 EXPECT_TRUE(deleted1); |
| 591 EXPECT_TRUE(deleted2); | 591 EXPECT_TRUE(deleted2); |
| 592 | 592 |
| 593 deleted1 = false; | 593 deleted1 = false; |
| 594 deleted2 = false; | 594 deleted2 = false; |
| 595 std::unique_ptr<Dummy> ownPtr1; | 595 std::unique_ptr<Dummy> ownPtr1; |
| 596 std::unique_ptr<Dummy> ownPtr2; | 596 std::unique_ptr<Dummy> ownPtr2; |
| 597 ptr1 = new Dummy(deleted1); | 597 ptr1 = new Dummy(deleted1); |
| 598 ptr2 = new Dummy(deleted2); | 598 ptr2 = new Dummy(deleted2); |
| 599 { | 599 { |
| 600 OwnPtrSet set; | 600 OwnPtrSet set; |
| 601 set.add(WTF::wrapUnique(ptr1)); | 601 set.insert(WTF::wrapUnique(ptr1)); |
| 602 set.add(WTF::wrapUnique(ptr2)); | 602 set.insert(WTF::wrapUnique(ptr2)); |
| 603 ownPtr1 = set.takeFirst(); | 603 ownPtr1 = set.takeFirst(); |
| 604 EXPECT_EQ(1UL, set.size()); | 604 EXPECT_EQ(1UL, set.size()); |
| 605 ownPtr2 = set.take(ptr2); | 605 ownPtr2 = set.take(ptr2); |
| 606 EXPECT_TRUE(set.isEmpty()); | 606 EXPECT_TRUE(set.isEmpty()); |
| 607 } | 607 } |
| 608 EXPECT_FALSE(deleted1); | 608 EXPECT_FALSE(deleted1); |
| 609 EXPECT_FALSE(deleted2); | 609 EXPECT_FALSE(deleted2); |
| 610 | 610 |
| 611 EXPECT_EQ(ptr1, ownPtr1.get()); | 611 EXPECT_EQ(ptr1, ownPtr1.get()); |
| 612 EXPECT_EQ(ptr2, ownPtr2.get()); | 612 EXPECT_EQ(ptr2, ownPtr2.get()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 using CountCopySetTypes = ::testing::Types<ListHashSet<CountCopy>, | 667 using CountCopySetTypes = ::testing::Types<ListHashSet<CountCopy>, |
| 668 ListHashSet<CountCopy, 1>, | 668 ListHashSet<CountCopy, 1>, |
| 669 LinkedHashSet<CountCopy>>; | 669 LinkedHashSet<CountCopy>>; |
| 670 TYPED_TEST_CASE(ListOrLinkedHashSetCountCopyTest, CountCopySetTypes); | 670 TYPED_TEST_CASE(ListOrLinkedHashSetCountCopyTest, CountCopySetTypes); |
| 671 | 671 |
| 672 TYPED_TEST(ListOrLinkedHashSetCountCopyTest, | 672 TYPED_TEST(ListOrLinkedHashSetCountCopyTest, |
| 673 MoveConstructionShouldNotMakeCopy) { | 673 MoveConstructionShouldNotMakeCopy) { |
| 674 using Set = TypeParam; | 674 using Set = TypeParam; |
| 675 Set set; | 675 Set set; |
| 676 int counter = 0; | 676 int counter = 0; |
| 677 set.add(CountCopy(&counter)); | 677 set.insert(CountCopy(&counter)); |
| 678 | 678 |
| 679 counter = 0; | 679 counter = 0; |
| 680 Set other(std::move(set)); | 680 Set other(std::move(set)); |
| 681 EXPECT_EQ(0, counter); | 681 EXPECT_EQ(0, counter); |
| 682 } | 682 } |
| 683 | 683 |
| 684 TYPED_TEST(ListOrLinkedHashSetCountCopyTest, MoveAssignmentShouldNotMakeACopy) { | 684 TYPED_TEST(ListOrLinkedHashSetCountCopyTest, MoveAssignmentShouldNotMakeACopy) { |
| 685 using Set = TypeParam; | 685 using Set = TypeParam; |
| 686 Set set; | 686 Set set; |
| 687 int counter = 0; | 687 int counter = 0; |
| 688 set.add(CountCopy(&counter)); | 688 set.insert(CountCopy(&counter)); |
| 689 | 689 |
| 690 Set other(set); | 690 Set other(set); |
| 691 counter = 0; | 691 counter = 0; |
| 692 set = std::move(other); | 692 set = std::move(other); |
| 693 EXPECT_EQ(0, counter); | 693 EXPECT_EQ(0, counter); |
| 694 } | 694 } |
| 695 | 695 |
| 696 class MoveOnly { | 696 class MoveOnly { |
| 697 public: | 697 public: |
| 698 // kEmpty and kDeleted have special meanings when MoveOnly is used as the key | 698 // kEmpty and kDeleted have special meanings when MoveOnly is used as the key |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 using MoveOnlySetTypes = ::testing::Types<ListHashSet<MoveOnly>, | 749 using MoveOnlySetTypes = ::testing::Types<ListHashSet<MoveOnly>, |
| 750 ListHashSet<MoveOnly, 1>, | 750 ListHashSet<MoveOnly, 1>, |
| 751 LinkedHashSet<MoveOnly>>; | 751 LinkedHashSet<MoveOnly>>; |
| 752 TYPED_TEST_CASE(ListOrLinkedHashSetMoveOnlyTest, MoveOnlySetTypes); | 752 TYPED_TEST_CASE(ListOrLinkedHashSetMoveOnlyTest, MoveOnlySetTypes); |
| 753 | 753 |
| 754 TYPED_TEST(ListOrLinkedHashSetMoveOnlyTest, MoveOnlyValue) { | 754 TYPED_TEST(ListOrLinkedHashSetMoveOnlyTest, MoveOnlyValue) { |
| 755 using Set = TypeParam; | 755 using Set = TypeParam; |
| 756 using AddResult = typename Set::AddResult; | 756 using AddResult = typename Set::AddResult; |
| 757 Set set; | 757 Set set; |
| 758 { | 758 { |
| 759 AddResult addResult = set.add(MoveOnly(1, 1)); | 759 AddResult addResult = set.insert(MoveOnly(1, 1)); |
| 760 EXPECT_TRUE(addResult.isNewEntry); | 760 EXPECT_TRUE(addResult.isNewEntry); |
| 761 EXPECT_EQ(1, addResult.storedValue->value()); | 761 EXPECT_EQ(1, addResult.storedValue->value()); |
| 762 EXPECT_EQ(1, addResult.storedValue->id()); | 762 EXPECT_EQ(1, addResult.storedValue->id()); |
| 763 } | 763 } |
| 764 { | 764 { |
| 765 AddResult addResult = set.add(MoveOnly(1, 111)); | 765 AddResult addResult = set.insert(MoveOnly(1, 111)); |
| 766 EXPECT_FALSE(addResult.isNewEntry); | 766 EXPECT_FALSE(addResult.isNewEntry); |
| 767 EXPECT_EQ(1, addResult.storedValue->value()); | 767 EXPECT_EQ(1, addResult.storedValue->value()); |
| 768 EXPECT_EQ(1, addResult.storedValue->id()); | 768 EXPECT_EQ(1, addResult.storedValue->id()); |
| 769 } | 769 } |
| 770 auto iter = set.find(MoveOnly(1)); | 770 auto iter = set.find(MoveOnly(1)); |
| 771 ASSERT_TRUE(iter != set.end()); | 771 ASSERT_TRUE(iter != set.end()); |
| 772 EXPECT_EQ(1, iter->value()); | 772 EXPECT_EQ(1, iter->value()); |
| 773 EXPECT_EQ(1, iter->id()); | 773 EXPECT_EQ(1, iter->id()); |
| 774 | 774 |
| 775 iter = set.find(MoveOnly(2)); | 775 iter = set.find(MoveOnly(2)); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 | 813 |
| 814 // ... but they don't have any pass-out (like take()) methods. | 814 // ... but they don't have any pass-out (like take()) methods. |
| 815 | 815 |
| 816 set.remove(MoveOnly(3)); | 816 set.remove(MoveOnly(3)); |
| 817 set.clear(); | 817 set.clear(); |
| 818 } | 818 } |
| 819 | 819 |
| 820 } // anonymous namespace | 820 } // anonymous namespace |
| 821 | 821 |
| 822 } // namespace WTF | 822 } // namespace WTF |
| OLD | NEW |