package com.android.camera.gallery; import android.test.AndroidTestCase; import android.util.Log; public class LruCacheUnitTests extends AndroidTestCase { public void testPut() { LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2); Integer key = Integer.valueOf(1); Integer value = Integer.valueOf(3); cache.put(key, value); assertEquals(value, cache.get(key)); } public void testTracingInUsedObject() { LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2); Integer key = Integer.valueOf(1); Integer value = new Integer(3); cache.put(key, value); for (int i = 0; i < 3; ++i) { cache.put(i + 10, i * i); } System.gc(); assertEquals(value, cache.get(key)); } public void testLruAlgorithm() { LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2); cache.put(0, new Integer(0)); for (int i = 0; i < 3; ++i) { cache.put(i + 1, i * i); cache.get(0); } System.gc(); assertEquals(Integer.valueOf(0), cache.get(0)); } private static final int TEST_COUNT = 10000; static class Accessor extends Thread { private final LruCache<Integer,Integer> mMap; public Accessor(LruCache<Integer, Integer> map) { mMap = map; } @Override public void run() { Log.v("TAG", "start get " + this); for (int i = 0; i < TEST_COUNT; ++i) { mMap.get(i % 2); } Log.v("TAG", "finish get " + this); } } @SuppressWarnings("unchecked") public void testConcurrentAccess() throws Exception { LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(4); cache.put(0, 0); cache.put(1, 1); Accessor accessor[] = new Accessor[4]; for (int i = 0; i < accessor.length; ++i) { accessor[i] = new Accessor(cache); } for (int i = 0; i < accessor.length; ++i) { accessor[i].start(); } for (int i = 0; i < accessor.length; ++i) { accessor[i].join(); } } }