12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "src/core/SkLRUCache.h"
- #include "tests/Test.h"
- struct Value {
- Value(int value, int* counter)
- : fValue(value)
- , fCounter(counter) {
- (*fCounter)++;
- }
- ~Value() {
- (*fCounter)--;
- }
- int fValue;
- int* fCounter;
- };
- DEF_TEST(LRUCacheSequential, r) {
- int instances = 0;
- {
- static const int kSize = 100;
- SkLRUCache<int, std::unique_ptr<Value>> test(kSize);
- for (int i = 1; i < kSize * 2; i++) {
- REPORTER_ASSERT(r, !test.find(i));
- test.insert(i, std::unique_ptr<Value>(new Value(i * i, &instances)));
- REPORTER_ASSERT(r, test.find(i));
- REPORTER_ASSERT(r, i * i == (*test.find(i))->fValue);
- if (i > kSize) {
- REPORTER_ASSERT(r, kSize == instances);
- REPORTER_ASSERT(r, !test.find(i - kSize));
- } else {
- REPORTER_ASSERT(r, i == instances);
- }
- REPORTER_ASSERT(r, (int) test.count() == instances);
- }
- }
- REPORTER_ASSERT(r, 0 == instances);
- }
- DEF_TEST(LRUCacheRandom, r) {
- int instances = 0;
- {
- int seq[] = { 0, 1, 2, 3, 4, 1, 6, 2, 7, 5, 3, 2, 2, 3, 1, 7 };
- int expected[] = { 7, 1, 3, 2, 5 };
- static const int kSize = 5;
- SkLRUCache<int, std::unique_ptr<Value>> test(kSize);
- for (int i = 0; i < (int) (sizeof(seq) / sizeof(int)); i++) {
- int k = seq[i];
- if (!test.find(k)) {
- test.insert(k, std::unique_ptr<Value>(new Value(k, &instances)));
- }
- }
- REPORTER_ASSERT(r, kSize == instances);
- REPORTER_ASSERT(r, kSize == test.count());
- for (int i = 0; i < kSize; i++) {
- int k = expected[i];
- REPORTER_ASSERT(r, test.find(k));
- REPORTER_ASSERT(r, k == (*test.find(k))->fValue);
- }
- }
- REPORTER_ASSERT(r, 0 == instances);
- }
|