1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkLRUCache.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Test.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct Value { 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Value(int value, int* counter) 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : fValue(value) 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fCounter(counter) { 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (*fCounter)++; 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ~Value() { 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (*fCounter)--; 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int fValue; 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int* fCounter; 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(LRUCacheSequential, r) { 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int instances = 0; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kSize = 100; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkLRUCache<int, std::unique_ptr<Value>> test(kSize); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 1; i < kSize * 2; i++) { 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, !test.find(i)); 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot test.insert(i, std::unique_ptr<Value>(new Value(i * i, &instances))); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, test.find(i)); 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, i * i == (*test.find(i))->fValue); 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (i > kSize) { 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, kSize == instances); 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, !test.find(i - kSize)); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } else { 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, i == instances); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, (int) test.count() == instances); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, 0 == instances); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(LRUCacheRandom, r) { 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int instances = 0; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int seq[] = { 0, 1, 2, 3, 4, 1, 6, 2, 7, 5, 3, 2, 2, 3, 1, 7 }; 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int expected[] = { 7, 1, 3, 2, 5 }; 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kSize = 5; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkLRUCache<int, std::unique_ptr<Value>> test(kSize); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < (int) (sizeof(seq) / sizeof(int)); i++) { 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int k = seq[i]; 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!test.find(k)) { 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot test.insert(k, std::unique_ptr<Value>(new Value(k, &instances))); 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, kSize == instances); 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, kSize == test.count()); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < kSize; i++) { 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int k = expected[i]; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, test.find(k)); 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, k == (*test.find(k))->fValue); 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, 0 == instances); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 71