1666ea1b28a76aeba74744148b15099254d918671Owen Linpackage com.android.camera.gallery; 2666ea1b28a76aeba74744148b15099254d918671Owen Lin 3666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.test.AndroidTestCase; 4666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.util.Log; 5666ea1b28a76aeba74744148b15099254d918671Owen Lin 6666ea1b28a76aeba74744148b15099254d918671Owen Linpublic class LruCacheUnitTests extends AndroidTestCase { 7666ea1b28a76aeba74744148b15099254d918671Owen Lin 8666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testPut() { 9666ea1b28a76aeba74744148b15099254d918671Owen Lin LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2); 10666ea1b28a76aeba74744148b15099254d918671Owen Lin Integer key = Integer.valueOf(1); 11666ea1b28a76aeba74744148b15099254d918671Owen Lin Integer value = Integer.valueOf(3); 12666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(key, value); 13666ea1b28a76aeba74744148b15099254d918671Owen Lin assertEquals(value, cache.get(key)); 14666ea1b28a76aeba74744148b15099254d918671Owen Lin } 15666ea1b28a76aeba74744148b15099254d918671Owen Lin 16666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testTracingInUsedObject() { 17666ea1b28a76aeba74744148b15099254d918671Owen Lin LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2); 18666ea1b28a76aeba74744148b15099254d918671Owen Lin Integer key = Integer.valueOf(1); 19666ea1b28a76aeba74744148b15099254d918671Owen Lin Integer value = new Integer(3); 20666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(key, value); 21666ea1b28a76aeba74744148b15099254d918671Owen Lin for (int i = 0; i < 3; ++i) { 22666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(i + 10, i * i); 23666ea1b28a76aeba74744148b15099254d918671Owen Lin } 24666ea1b28a76aeba74744148b15099254d918671Owen Lin System.gc(); 25666ea1b28a76aeba74744148b15099254d918671Owen Lin assertEquals(value, cache.get(key)); 26666ea1b28a76aeba74744148b15099254d918671Owen Lin } 27666ea1b28a76aeba74744148b15099254d918671Owen Lin 28666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testLruAlgorithm() { 29666ea1b28a76aeba74744148b15099254d918671Owen Lin LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2); 30666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(0, new Integer(0)); 31666ea1b28a76aeba74744148b15099254d918671Owen Lin for (int i = 0; i < 3; ++i) { 32666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(i + 1, i * i); 33666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.get(0); 34666ea1b28a76aeba74744148b15099254d918671Owen Lin } 35666ea1b28a76aeba74744148b15099254d918671Owen Lin System.gc(); 36666ea1b28a76aeba74744148b15099254d918671Owen Lin assertEquals(Integer.valueOf(0), cache.get(0)); 37666ea1b28a76aeba74744148b15099254d918671Owen Lin } 38666ea1b28a76aeba74744148b15099254d918671Owen Lin 39666ea1b28a76aeba74744148b15099254d918671Owen Lin private static final int TEST_COUNT = 10000; 40666ea1b28a76aeba74744148b15099254d918671Owen Lin 41666ea1b28a76aeba74744148b15099254d918671Owen Lin static class Accessor extends Thread { 42666ea1b28a76aeba74744148b15099254d918671Owen Lin private final LruCache<Integer,Integer> mMap; 43666ea1b28a76aeba74744148b15099254d918671Owen Lin 44666ea1b28a76aeba74744148b15099254d918671Owen Lin public Accessor(LruCache<Integer, Integer> map) { 45666ea1b28a76aeba74744148b15099254d918671Owen Lin mMap = map; 46666ea1b28a76aeba74744148b15099254d918671Owen Lin } 47666ea1b28a76aeba74744148b15099254d918671Owen Lin 48666ea1b28a76aeba74744148b15099254d918671Owen Lin @Override 49666ea1b28a76aeba74744148b15099254d918671Owen Lin public void run() { 50666ea1b28a76aeba74744148b15099254d918671Owen Lin Log.v("TAG", "start get " + this); 51666ea1b28a76aeba74744148b15099254d918671Owen Lin for (int i = 0; i < TEST_COUNT; ++i) { 52666ea1b28a76aeba74744148b15099254d918671Owen Lin mMap.get(i % 2); 53666ea1b28a76aeba74744148b15099254d918671Owen Lin } 54666ea1b28a76aeba74744148b15099254d918671Owen Lin Log.v("TAG", "finish get " + this); 55666ea1b28a76aeba74744148b15099254d918671Owen Lin } 56666ea1b28a76aeba74744148b15099254d918671Owen Lin } 57666ea1b28a76aeba74744148b15099254d918671Owen Lin 58666ea1b28a76aeba74744148b15099254d918671Owen Lin @SuppressWarnings("unchecked") 59666ea1b28a76aeba74744148b15099254d918671Owen Lin public void testConcurrentAccess() throws Exception { 60666ea1b28a76aeba74744148b15099254d918671Owen Lin LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(4); 61666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(0, 0); 62666ea1b28a76aeba74744148b15099254d918671Owen Lin cache.put(1, 1); 63666ea1b28a76aeba74744148b15099254d918671Owen Lin Accessor accessor[] = new Accessor[4]; 64666ea1b28a76aeba74744148b15099254d918671Owen Lin for (int i = 0; i < accessor.length; ++i) { 65666ea1b28a76aeba74744148b15099254d918671Owen Lin accessor[i] = new Accessor(cache); 66666ea1b28a76aeba74744148b15099254d918671Owen Lin } 67666ea1b28a76aeba74744148b15099254d918671Owen Lin for (int i = 0; i < accessor.length; ++i) { 68666ea1b28a76aeba74744148b15099254d918671Owen Lin accessor[i].start(); 69666ea1b28a76aeba74744148b15099254d918671Owen Lin } 70666ea1b28a76aeba74744148b15099254d918671Owen Lin for (int i = 0; i < accessor.length; ++i) { 71666ea1b28a76aeba74744148b15099254d918671Owen Lin accessor[i].join(); 72666ea1b28a76aeba74744148b15099254d918671Owen Lin } 73666ea1b28a76aeba74744148b15099254d918671Owen Lin } 74666ea1b28a76aeba74744148b15099254d918671Owen Lin} 75