| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkRandom.h" | 8 #include "SkRandom.h" |
| 9 #include "SkTInternalLList.h" | 9 #include "SkTInternalLList.h" |
| 10 #include "SkTLList.h" | 10 #include "SkTLList.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 list.addToHead(&elements[2]); | 66 list.addToHead(&elements[2]); |
| 67 list.addToHead(&elements[3]); | 67 list.addToHead(&elements[3]); |
| 68 | 68 |
| 69 check_list(list, reporter, false, 4, true, true, true, true, elements); | 69 check_list(list, reporter, false, 4, true, true, true, true, elements); |
| 70 | 70 |
| 71 // test out iterators | 71 // test out iterators |
| 72 typedef SkTInternalLList<ListElement>::Iter Iter; | 72 typedef SkTInternalLList<ListElement>::Iter Iter; |
| 73 Iter iter; | 73 Iter iter; |
| 74 | 74 |
| 75 ListElement* cur = iter.init(list, Iter::kHead_IterStart); | 75 ListElement* cur = iter.init(list, Iter::kHead_IterStart); |
| 76 for (int i = 0; NULL != cur; ++i, cur = iter.next()) { | 76 for (int i = 0; cur; ++i, cur = iter.next()) { |
| 77 REPORTER_ASSERT(reporter, cur->fID == 3-i); | 77 REPORTER_ASSERT(reporter, cur->fID == 3-i); |
| 78 } | 78 } |
| 79 | 79 |
| 80 cur = iter.init(list, Iter::kTail_IterStart); | 80 cur = iter.init(list, Iter::kTail_IterStart); |
| 81 for (int i = 0; NULL != cur; ++i, cur = iter.prev()) { | 81 for (int i = 0; cur; ++i, cur = iter.prev()) { |
| 82 REPORTER_ASSERT(reporter, cur->fID == i); | 82 REPORTER_ASSERT(reporter, cur->fID == i); |
| 83 } | 83 } |
| 84 | 84 |
| 85 // remove middle, frontmost then backmost | 85 // remove middle, frontmost then backmost |
| 86 list.remove(&elements[1]); | 86 list.remove(&elements[1]); |
| 87 list.remove(&elements[3]); | 87 list.remove(&elements[3]); |
| 88 list.remove(&elements[0]); | 88 list.remove(&elements[0]); |
| 89 | 89 |
| 90 check_list(list, reporter, false, 1, false, false, true, false, elements); | 90 check_list(list, reporter, false, 1, false, false, true, false, elements); |
| 91 | 91 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 107 list.addBefore(&elements[0], &elements[1]); | 107 list.addBefore(&elements[0], &elements[1]); |
| 108 check_list(list, reporter, false, 2, true, true, false, false, elements); | 108 check_list(list, reporter, false, 2, true, true, false, false, elements); |
| 109 | 109 |
| 110 list.addAfter(&elements[3], &elements[1]); | 110 list.addAfter(&elements[3], &elements[1]); |
| 111 check_list(list, reporter, false, 3, true, true, false, true, elements); | 111 check_list(list, reporter, false, 3, true, true, false, true, elements); |
| 112 | 112 |
| 113 list.addBefore(&elements[2], &elements[3]); | 113 list.addBefore(&elements[2], &elements[3]); |
| 114 check_list(list, reporter, false, 4, true, true, true, true, elements); | 114 check_list(list, reporter, false, 4, true, true, true, true, elements); |
| 115 | 115 |
| 116 cur = iter.init(list, Iter::kHead_IterStart); | 116 cur = iter.init(list, Iter::kHead_IterStart); |
| 117 for (int i = 0; NULL != cur; ++i, cur = iter.next()) { | 117 for (int i = 0; cur; ++i, cur = iter.next()) { |
| 118 REPORTER_ASSERT(reporter, cur->fID == i); | 118 REPORTER_ASSERT(reporter, cur->fID == i); |
| 119 } | 119 } |
| 120 } | 120 } |
| 121 | 121 |
| 122 static void TestTLList(skiatest::Reporter* reporter) { | 122 static void TestTLList(skiatest::Reporter* reporter) { |
| 123 typedef SkTLList<ListElement> ElList; | 123 typedef SkTLList<ListElement> ElList; |
| 124 typedef ElList::Iter Iter; | 124 typedef ElList::Iter Iter; |
| 125 SkRandom random; | 125 SkRandom random; |
| 126 | 126 |
| 127 for (int i = 1; i <= 16; i *= 2) { | 127 for (int i = 1; i <= 16; i *= 2) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 Iter iter = list1.headIter(); | 221 Iter iter = list1.headIter(); |
| 222 // remember the elements before/after the insertion poin
t. | 222 // remember the elements before/after the insertion poin
t. |
| 223 while (n--) { | 223 while (n--) { |
| 224 iter.next(); | 224 iter.next(); |
| 225 } | 225 } |
| 226 Iter prev(iter); | 226 Iter prev(iter); |
| 227 Iter next(iter); | 227 Iter next(iter); |
| 228 next.next(); | 228 next.next(); |
| 229 prev.prev(); | 229 prev.prev(); |
| 230 | 230 |
| 231 SkASSERT(NULL != iter.get()); | 231 SkASSERT(iter.get()); |
| 232 // insert either before or after the iterator, then chec
k that the | 232 // insert either before or after the iterator, then chec
k that the |
| 233 // surrounding sequence is correct. | 233 // surrounding sequence is correct. |
| 234 if (2 == insertionMethod) { | 234 if (2 == insertionMethod) { |
| 235 SkNEW_INSERT_IN_LLIST_BEFORE(&list1, iter, ListEleme
nt, (id)); | 235 SkNEW_INSERT_IN_LLIST_BEFORE(&list1, iter, ListEleme
nt, (id)); |
| 236 Iter newItem(iter); | 236 Iter newItem(iter); |
| 237 newItem.prev(); | 237 newItem.prev(); |
| 238 REPORTER_ASSERT(reporter, newItem.get()->fID == id); | 238 REPORTER_ASSERT(reporter, newItem.get()->fID == id); |
| 239 | 239 |
| 240 if (NULL != next.get()) { | 240 if (next.get()) { |
| 241 REPORTER_ASSERT(reporter, next.prev()->fID == it
er.get()->fID); | 241 REPORTER_ASSERT(reporter, next.prev()->fID == it
er.get()->fID); |
| 242 } | 242 } |
| 243 if (NULL != prev.get()) { | 243 if (prev.get()) { |
| 244 REPORTER_ASSERT(reporter, prev.next()->fID == id
); | 244 REPORTER_ASSERT(reporter, prev.next()->fID == id
); |
| 245 } | 245 } |
| 246 } else { | 246 } else { |
| 247 SkNEW_INSERT_IN_LLIST_AFTER(&list1, iter, ListElemen
t, (id)); | 247 SkNEW_INSERT_IN_LLIST_AFTER(&list1, iter, ListElemen
t, (id)); |
| 248 Iter newItem(iter); | 248 Iter newItem(iter); |
| 249 newItem.next(); | 249 newItem.next(); |
| 250 REPORTER_ASSERT(reporter, newItem.get()->fID == id); | 250 REPORTER_ASSERT(reporter, newItem.get()->fID == id); |
| 251 | 251 |
| 252 if (NULL != next.get()) { | 252 if (next.get()) { |
| 253 REPORTER_ASSERT(reporter, next.prev()->fID == id
); | 253 REPORTER_ASSERT(reporter, next.prev()->fID == id
); |
| 254 } | 254 } |
| 255 if (NULL != prev.get()) { | 255 if (prev.get()) { |
| 256 REPORTER_ASSERT(reporter, prev.next()->fID == it
er.get()->fID); | 256 REPORTER_ASSERT(reporter, prev.next()->fID == it
er.get()->fID); |
| 257 } | 257 } |
| 258 } | 258 } |
| 259 } | 259 } |
| 260 } | 260 } |
| 261 ++count; | 261 ++count; |
| 262 } else { | 262 } else { |
| 263 // walk to a random place either forward or backwards and remove
. | 263 // walk to a random place either forward or backwards and remove
. |
| 264 int n = random.nextULessThan(list1.count()); | 264 int n = random.nextULessThan(list1.count()); |
| 265 Iter::IterStart start; | 265 Iter::IterStart start; |
| 266 ListElement* (Iter::*incrFunc)(); | 266 ListElement* (Iter::*incrFunc)(); |
| 267 | 267 |
| 268 if (random.nextBool()) { | 268 if (random.nextBool()) { |
| 269 start = Iter::kHead_IterStart; | 269 start = Iter::kHead_IterStart; |
| 270 incrFunc = &Iter::next; | 270 incrFunc = &Iter::next; |
| 271 } else { | 271 } else { |
| 272 start = Iter::kTail_IterStart; | 272 start = Iter::kTail_IterStart; |
| 273 incrFunc = &Iter::prev; | 273 incrFunc = &Iter::prev; |
| 274 } | 274 } |
| 275 | 275 |
| 276 // find the element | 276 // find the element |
| 277 Iter iter(list1, start); | 277 Iter iter(list1, start); |
| 278 while (n--) { | 278 while (n--) { |
| 279 REPORTER_ASSERT(reporter, NULL != iter.get()); | 279 REPORTER_ASSERT(reporter, iter.get()); |
| 280 (iter.*incrFunc)(); | 280 (iter.*incrFunc)(); |
| 281 } | 281 } |
| 282 REPORTER_ASSERT(reporter, NULL != iter.get()); | 282 REPORTER_ASSERT(reporter, iter.get()); |
| 283 | 283 |
| 284 // remember the prev and next elements from the element to be re
moved | 284 // remember the prev and next elements from the element to be re
moved |
| 285 Iter prev = iter; | 285 Iter prev = iter; |
| 286 Iter next = iter; | 286 Iter next = iter; |
| 287 prev.prev(); | 287 prev.prev(); |
| 288 next.next(); | 288 next.next(); |
| 289 list1.remove(iter.get()); | 289 list1.remove(iter.get()); |
| 290 | 290 |
| 291 // make sure the remembered next/prev iters still work | 291 // make sure the remembered next/prev iters still work |
| 292 Iter pn = prev; pn.next(); | 292 Iter pn = prev; pn.next(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 307 #if SK_ENABLE_INST_COUNT | 307 #if SK_ENABLE_INST_COUNT |
| 308 SkASSERT(0 == ListElement::InstanceCount()); | 308 SkASSERT(0 == ListElement::InstanceCount()); |
| 309 #endif | 309 #endif |
| 310 } | 310 } |
| 311 } | 311 } |
| 312 | 312 |
| 313 DEF_TEST(LList, reporter) { | 313 DEF_TEST(LList, reporter) { |
| 314 TestTInternalLList(reporter); | 314 TestTInternalLList(reporter); |
| 315 TestTLList(reporter); | 315 TestTLList(reporter); |
| 316 } | 316 } |
| OLD | NEW |