1package com.android.camera.gallery;
2
3import android.test.AndroidTestCase;
4import android.util.Log;
5
6public class LruCacheUnitTests extends AndroidTestCase {
7
8    public void testPut() {
9        LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2);
10        Integer key = Integer.valueOf(1);
11        Integer value = Integer.valueOf(3);
12        cache.put(key, value);
13        assertEquals(value, cache.get(key));
14    }
15
16    public void testTracingInUsedObject() {
17        LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2);
18        Integer key = Integer.valueOf(1);
19        Integer value = new Integer(3);
20        cache.put(key, value);
21        for (int i = 0; i < 3; ++i) {
22            cache.put(i + 10, i * i);
23        }
24        System.gc();
25        assertEquals(value, cache.get(key));
26    }
27
28    public void testLruAlgorithm() {
29        LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(2);
30        cache.put(0, new Integer(0));
31        for (int i = 0; i < 3; ++i) {
32            cache.put(i + 1, i * i);
33            cache.get(0);
34        }
35        System.gc();
36        assertEquals(Integer.valueOf(0), cache.get(0));
37    }
38
39    private static final int TEST_COUNT = 10000;
40
41    static class Accessor extends Thread {
42        private final LruCache<Integer,Integer> mMap;
43
44        public Accessor(LruCache<Integer, Integer> map) {
45            mMap = map;
46        }
47
48        @Override
49        public void run() {
50            Log.v("TAG", "start get " + this);
51            for (int i = 0; i < TEST_COUNT; ++i) {
52                mMap.get(i % 2);
53            }
54            Log.v("TAG", "finish get " + this);
55        }
56    }
57
58    @SuppressWarnings("unchecked")
59    public void testConcurrentAccess() throws Exception {
60        LruCache<Integer, Integer> cache = new LruCache<Integer, Integer>(4);
61        cache.put(0, 0);
62        cache.put(1, 1);
63        Accessor accessor[] = new Accessor[4];
64        for (int i = 0; i < accessor.length; ++i) {
65            accessor[i] = new Accessor(cache);
66        }
67        for (int i = 0; i < accessor.length; ++i) {
68            accessor[i].start();
69        }
70        for (int i = 0; i < accessor.length; ++i) {
71            accessor[i].join();
72        }
73    }
74}
75