diff options
Diffstat (limited to 'tests/src')
| -rw-r--r-- | tests/src/cgeo/geocaching/utils/LeastRecentlyUsedMapTest.java | 85 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/utils/LeastRecentlyUsedSetTest.java | 66 |
2 files changed, 151 insertions, 0 deletions
diff --git a/tests/src/cgeo/geocaching/utils/LeastRecentlyUsedMapTest.java b/tests/src/cgeo/geocaching/utils/LeastRecentlyUsedMapTest.java new file mode 100644 index 0000000..723b7153 --- /dev/null +++ b/tests/src/cgeo/geocaching/utils/LeastRecentlyUsedMapTest.java @@ -0,0 +1,85 @@ +package cgeo.geocaching.utils; + +import cgeo.geocaching.cgCache; + +import java.util.Map; + +public class LeastRecentlyUsedMapTest extends AbstractLRUTest { + + public static void testLruMode() { + final Map<String, String> map = new LeastRecentlyUsedMap.LruCache<String, String>(4); + map.put("one", "1"); + map.put("two", "2"); + map.put("three", "3"); + // keep in cache + map.get("one"); + map.put("four", "4"); + map.put("five", "5"); + map.put("six", "6"); + // keep in cache + map.get("one"); + // re-add + map.put("five", "5"); + map.put("seven", "7"); + + assertEquals("six, one, five, seven", colToStr(map.keySet())); + } + + public static void testBoundedMode() { + final Map<String, String> map = new LeastRecentlyUsedMap.Bounded<String, String>(5); + map.put("one", "1"); + map.put("two", "2"); + map.put("three", "3"); + // read does not change anything + map.get("one"); + map.put("four", "4"); + // re-put should update the order + map.put("three", "3"); + map.put("five", "5"); + // read does not change anything + map.get("one"); + map.put("six", "6"); + map.put("seven", "7"); + + assertEquals("four, three, five, six, seven", colToStr(map.keySet())); + } + + public static void testRemoveEldestEntry() { + final LeastRecentlyUsedMap<String, cgCache> cache = new LeastRecentlyUsedMap.LruCache<String, cgCache>(10); + final cgCache first = new cgCache(); + assertNull(cache.put("1", first)); + + final cgCache second = new cgCache(); + assertNull(cache.put("2", second)); + + assertEquals(2, cache.size()); + assertTrue(cache.containsKey("1")); + assertTrue(cache.containsValue(first)); + assertTrue(cache.containsKey("2")); + assertTrue(cache.containsValue(second)); + + for (int i = 3; i <= 10; i++) { + assertNull(cache.put(Integer.toString(i), new cgCache())); + } + + assertEquals(10, cache.size()); + assertTrue(cache.containsKey("1")); + assertTrue(cache.containsValue(first)); + assertTrue(cache.containsKey("2")); + assertTrue(cache.containsValue(second)); + + assertNotNull(cache.remove("1")); // just replacing the old entry would not work + assertNull(cache.put("1", new cgCache())); + assertNull(cache.put("11", new cgCache())); + + assertEquals(10, cache.size()); + + // first has been overwritten by new value, but key must be in, because it is very new + assertTrue(cache.containsKey("1")); + + // second has been overwritten by 11 + assertFalse(cache.containsKey("2")); + assertTrue(cache.containsKey("11")); + } + +} diff --git a/tests/src/cgeo/geocaching/utils/LeastRecentlyUsedSetTest.java b/tests/src/cgeo/geocaching/utils/LeastRecentlyUsedSetTest.java new file mode 100644 index 0000000..4b4e5f7 --- /dev/null +++ b/tests/src/cgeo/geocaching/utils/LeastRecentlyUsedSetTest.java @@ -0,0 +1,66 @@ +package cgeo.geocaching.utils; + +import cgeo.geocaching.cgCache; + +import java.util.Set; + +public class LeastRecentlyUsedSetTest extends AbstractLRUTest { + + public static void testLruMode() { + final Set<String> set = new LeastRecentlyUsedSet<String>(5); + set.add("one"); + set.add("two"); + set.add("three"); + // read does not change anything + set.contains("one"); + set.add("four"); + // re-put should update the order + set.add("three"); + set.add("five"); + // read does not change anything + set.contains("one"); + set.add("six"); + set.add("seven"); + + assertEquals("four, three, five, six, seven", colToStr(set)); + } + + public static void testRemoveEldestEntry() { + final LeastRecentlyUsedSet<cgCache> caches = new LeastRecentlyUsedSet<cgCache>(10); + final cgCache first = new cgCache(); + first.setGeocode("1"); + assertTrue(caches.add(first)); + + final cgCache second = new cgCache(); + second.setGeocode("2"); + assertTrue(caches.add(second)); + + assertEquals(2, caches.size()); + assertTrue(caches.contains(first)); + assertTrue(caches.contains(second)); + + // adding first cache again does not change set + assertFalse(caches.add(first)); + assertEquals(2, caches.size()); + + for (int i = 3; i <= 10; i++) { + final cgCache cache = new cgCache(); + cache.setGeocode(Integer.toString(i)); + assertTrue(caches.add(cache)); + } + + assertEquals(10, caches.size()); + assertTrue(caches.contains(first)); + assertTrue(caches.contains(second)); + + final cgCache c11 = new cgCache(); + c11.setGeocode("11"); + assertTrue(caches.add(c11)); + + assertEquals(10, caches.size()); + + // first was used again, there second is the oldest and has been overwritten by 11 + assertTrue(caches.contains(first)); + assertFalse(caches.contains(second)); + } +}
\ No newline at end of file |
