From 069a2ca329a342ad0559a48719f49264d2610f00 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Mon, 25 Apr 2022 22:45:47 +0200 Subject: Decouple preferences --- .../antennapod/core/feed/SubscriptionsFilter.java | 123 --------------------- .../core/preferences/UserPreferences.java | 41 +------ .../service/download/AntennapodHttpClient.java | 1 + .../core/service/download/DownloadService.java | 3 +- .../service/download/NewEpisodesNotification.java | 10 +- .../core/service/download/ProxyConfig.java | 24 ---- .../core/storage/AutomaticDownloadAlgorithm.java | 2 +- .../danoeh/antennapod/core/storage/DBReader.java | 21 ++-- .../de/danoeh/antennapod/core/storage/DBTasks.java | 2 +- .../storage/EpisodeCleanupAlgorithmFactory.java | 22 ++++ .../antennapod/core/storage/NavDrawerData.java | 6 +- .../antennapod/core/util/LongLongMapTest.java | 68 ------------ 12 files changed, 50 insertions(+), 273 deletions(-) delete mode 100644 core/src/main/java/de/danoeh/antennapod/core/feed/SubscriptionsFilter.java delete mode 100644 core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java create mode 100644 core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithmFactory.java delete mode 100644 core/src/test/java/de/danoeh/antennapod/core/util/LongLongMapTest.java (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/SubscriptionsFilter.java b/core/src/main/java/de/danoeh/antennapod/core/feed/SubscriptionsFilter.java deleted file mode 100644 index 7e80fb231..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/SubscriptionsFilter.java +++ /dev/null @@ -1,123 +0,0 @@ -package de.danoeh.antennapod.core.feed; - -import android.text.TextUtils; - -import java.util.ArrayList; -import java.util.List; - -import de.danoeh.antennapod.storage.database.LongIntMap; -import de.danoeh.antennapod.model.feed.Feed; -import de.danoeh.antennapod.model.feed.FeedPreferences; - -public class SubscriptionsFilter { - private static final String divider = ","; - - private final String[] properties; - - private boolean showIfCounterGreaterZero = false; - - private boolean showAutoDownloadEnabled = false; - private boolean showAutoDownloadDisabled = false; - - private boolean showUpdatedEnabled = false; - private boolean showUpdatedDisabled = false; - - private boolean showEpisodeNotificationEnabled = false; - private boolean showEpisodeNotificationDisabled = false; - - public SubscriptionsFilter(String properties) { - this(TextUtils.split(properties, divider)); - } - - - public SubscriptionsFilter(String[] properties) { - this.properties = properties; - for (String property : properties) { - // see R.arrays.feed_filter_values - switch (property) { - case "counter_greater_zero": - showIfCounterGreaterZero = true; - break; - case "enabled_auto_download": - showAutoDownloadEnabled = true; - break; - case "disabled_auto_download": - showAutoDownloadDisabled = true; - break; - case "enabled_updates": - showUpdatedEnabled = true; - break; - case "disabled_updates": - showUpdatedDisabled = true; - break; - case "episode_notification_enabled": - showEpisodeNotificationEnabled = true; - break; - case "episode_notification_disabled": - showEpisodeNotificationDisabled = true; - break; - default: - break; - } - } - } - - public boolean isEnabled() { - return properties.length > 0; - } - - /** - * Run a list of feed items through the filter. - */ - public List filter(List items, LongIntMap feedCounters) { - if (properties.length == 0) { - return items; - } - - List result = new ArrayList<>(); - - for (Feed item : items) { - FeedPreferences itemPreferences = item.getPreferences(); - - // If the item does not meet a requirement, skip it. - if (showAutoDownloadEnabled && !itemPreferences.getAutoDownload()) { - continue; - } else if (showAutoDownloadDisabled && itemPreferences.getAutoDownload()) { - continue; - } - - if (showUpdatedEnabled && !itemPreferences.getKeepUpdated()) { - continue; - } else if (showUpdatedDisabled && itemPreferences.getKeepUpdated()) { - continue; - } - - if (showEpisodeNotificationEnabled && !itemPreferences.getShowEpisodeNotification()) { - continue; - } else if (showEpisodeNotificationDisabled && itemPreferences.getShowEpisodeNotification()) { - continue; - } - - // If the item reaches here, it meets all criteria (except counter > 0) - result.add(item); - } - - if (showIfCounterGreaterZero) { - for (int i = result.size() - 1; i >= 0; i--) { - if (feedCounters.get(result.get(i).getId()) <= 0) { - result.remove(i); - } - } - } - - return result; - } - - public String[] getValues() { - return properties.clone(); - } - - public String serialize() { - return TextUtils.join(divider, getValues()); - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 081b7d5f0..b1bc38ebc 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -14,7 +14,6 @@ import androidx.annotation.VisibleForTesting; import androidx.core.app.NotificationCompat; import androidx.preference.PreferenceManager; -import de.danoeh.antennapod.model.feed.FeedCounter; import org.json.JSONArray; import org.json.JSONException; @@ -32,16 +31,11 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.model.feed.FeedCounter; import de.danoeh.antennapod.model.playback.MediaType; -import de.danoeh.antennapod.core.feed.SubscriptionsFilter; -import de.danoeh.antennapod.core.service.download.ProxyConfig; -import de.danoeh.antennapod.core.storage.APCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.ExceptFavoriteCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm; -import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm; +import de.danoeh.antennapod.model.feed.SubscriptionsFilter; +import de.danoeh.antennapod.model.download.ProxyConfig; import de.danoeh.antennapod.model.feed.SortOrder; -import de.danoeh.antennapod.core.util.download.AutoUpdateManager; /** * Provides access to preferences set by the user in the settings screen. A @@ -692,33 +686,22 @@ public class UserPreferences { .apply(); } - /** - * Sets the update interval value. - */ public static void setUpdateInterval(long hours) { prefs.edit() .putString(PREF_UPDATE_INTERVAL, String.valueOf(hours)) .apply(); - // when updating with an interval, we assume the user wants - // to update *now* and then every 'hours' interval thereafter. - AutoUpdateManager.restartUpdateAlarm(context); } - /** - * Sets the update interval value. - */ public static void setUpdateTimeOfDay(int hourOfDay, int minute) { prefs.edit() .putString(PREF_UPDATE_INTERVAL, hourOfDay + ":" + minute) .apply(); - AutoUpdateManager.restartUpdateAlarm(context); } - public static void disableAutoUpdate(Context context) { + public static void disableAutoUpdate() { prefs.edit() .putString(PREF_UPDATE_INTERVAL, "0") .apply(); - AutoUpdateManager.disableAutoUpdate(context); } public static boolean gpodnetNotificationsEnabled() { @@ -835,22 +818,6 @@ public class UserPreferences { .apply(); } - public static EpisodeCleanupAlgorithm getEpisodeCleanupAlgorithm() { - if (!isEnableAutodownload()) { - return new APNullCleanupAlgorithm(); - } - int cleanupValue = getEpisodeCleanupValue(); - if (cleanupValue == EPISODE_CLEANUP_EXCEPT_FAVORITE) { - return new ExceptFavoriteCleanupAlgorithm(); - } else if (cleanupValue == EPISODE_CLEANUP_QUEUE) { - return new APQueueCleanupAlgorithm(); - } else if (cleanupValue == EPISODE_CLEANUP_NULL) { - return new APNullCleanupAlgorithm(); - } else { - return new APCleanupAlgorithm(cleanupValue); - } - } - public static int getEpisodeCleanupValue() { return Integer.parseInt(prefs.getString(PREF_EPISODE_CLEANUP, "" + EPISODE_CLEANUP_NULL)); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index b1138eeff..9974fae51 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor; import de.danoeh.antennapod.core.service.UserAgentInterceptor; +import de.danoeh.antennapod.model.download.ProxyConfig; import de.danoeh.antennapod.net.ssl.SslClientSetup; import okhttp3.Cache; import okhttp3.Credentials; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 1cd456072..40cc5f3f3 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -20,6 +20,7 @@ import androidx.core.app.ServiceCompat; import androidx.core.content.ContextCompat; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.LocalFeedUpdater; +import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithmFactory; import de.danoeh.antennapod.model.download.DownloadStatus; import org.apache.commons.io.FileUtils; import org.greenrobot.eventbus.EventBus; @@ -455,7 +456,7 @@ public class DownloadService extends Service { Log.d(TAG, "Received enqueue request. #requests=" + requests.size()); if (intent.getBooleanExtra(EXTRA_CLEANUP_MEDIA, false)) { - UserPreferences.getEpisodeCleanupAlgorithm().makeRoomForEpisodes(getApplicationContext(), requests.size()); + EpisodeCleanupAlgorithmFactory.build().makeRoomForEpisodes(getApplicationContext(), requests.size()); } for (DownloadRequest request : requests) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/NewEpisodesNotification.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/NewEpisodesNotification.java index 0e046978e..8f955e3c5 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/NewEpisodesNotification.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/NewEpisodesNotification.java @@ -20,15 +20,16 @@ import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.model.feed.FeedCounter; import de.danoeh.antennapod.model.feed.FeedPreferences; import de.danoeh.antennapod.core.glide.ApGlideSettings; -import de.danoeh.antennapod.storage.database.LongIntMap; import de.danoeh.antennapod.core.util.gui.NotificationUtils; import de.danoeh.antennapod.storage.database.PodDBAdapter; +import java.util.Map; + public class NewEpisodesNotification { private static final String TAG = "NewEpisodesNotification"; private static final String GROUP_KEY = "de.danoeh.antennapod.EPISODES"; - private LongIntMap countersBefore; + private Map countersBefore; public NewEpisodesNotification() { } @@ -46,7 +47,7 @@ public class NewEpisodesNotification { return; } - int newEpisodesBefore = countersBefore.get(feed.getId()); + int newEpisodesBefore = countersBefore.containsKey(feed.getId()) ? countersBefore.get(feed.getId()) : 0; int newEpisodesAfter = getNewEpisodeCount(feed.getId()); Log.d(TAG, "New episodes before: " + newEpisodesBefore + ", after: " + newEpisodesAfter); @@ -130,7 +131,8 @@ public class NewEpisodesNotification { private static int getNewEpisodeCount(long feedId) { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - int episodeCount = adapter.getFeedCounters(FeedCounter.SHOW_NEW, feedId).get(feedId); + Map counters = adapter.getFeedCounters(FeedCounter.SHOW_NEW, feedId); + int episodeCount = counters.containsKey(feedId) ? counters.get(feedId) : 0; adapter.close(); return episodeCount; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java deleted file mode 100644 index 797001e3a..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/ProxyConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.danoeh.antennapod.core.service.download; - -import androidx.annotation.Nullable; - -import java.net.Proxy; - -public class ProxyConfig { - - public final Proxy.Type type; - @Nullable public final String host; - public final int port; - @Nullable public final String username; - @Nullable public final String password; - - public static final int DEFAULT_PORT = 8080; - - public ProxyConfig(Proxy.Type type, String host, int port, String username, String password) { - this.type = type; - this.host = host; - this.port = port; - this.username = username; - this.password = password; - } -} \ No newline at end of file diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java b/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java index 52638ca77..c410376c2 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/AutomaticDownloadAlgorithm.java @@ -76,7 +76,7 @@ public class AutomaticDownloadAlgorithm { int autoDownloadableEpisodes = candidates.size(); int downloadedEpisodes = DBReader.getNumberOfDownloadedEpisodes(); - int deletedEpisodes = UserPreferences.getEpisodeCleanupAlgorithm() + int deletedEpisodes = EpisodeCleanupAlgorithmFactory.build() .makeRoomForEpisodes(context, autoDownloadableEpisodes); boolean cacheIsUnlimited = UserPreferences.getEpisodeCacheSize() == UserPreferences.getEpisodeCacheSizeUnlimited(); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java index 528ded708..62a461dfe 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java @@ -21,7 +21,7 @@ import de.danoeh.antennapod.model.feed.FeedItem; import de.danoeh.antennapod.model.feed.FeedItemFilter; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.model.feed.FeedPreferences; -import de.danoeh.antennapod.core.feed.SubscriptionsFilter; +import de.danoeh.antennapod.model.feed.SubscriptionsFilter; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.model.download.DownloadStatus; import de.danoeh.antennapod.storage.database.PodDBAdapter; @@ -31,7 +31,6 @@ import de.danoeh.antennapod.storage.database.mapper.FeedCursorMapper; import de.danoeh.antennapod.storage.database.mapper.FeedItemCursorMapper; import de.danoeh.antennapod.storage.database.mapper.FeedMediaCursorMapper; import de.danoeh.antennapod.storage.database.mapper.FeedPreferencesCursorMapper; -import de.danoeh.antennapod.storage.database.LongIntMap; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.comparator.DownloadStatusComparator; import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator; @@ -881,7 +880,7 @@ public final class DBReader { PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); - final LongIntMap feedCounters = adapter.getFeedCounters(UserPreferences.getFeedCounterSetting()); + final Map feedCounters = adapter.getFeedCounters(UserPreferences.getFeedCounterSetting()); SubscriptionsFilter subscriptionsFilter = UserPreferences.getSubscriptionsFilter(); List feeds = subscriptionsFilter.filter(getFeedList(adapter), feedCounters); @@ -889,8 +888,8 @@ public final class DBReader { int feedOrder = UserPreferences.getFeedOrder(); if (feedOrder == UserPreferences.FEED_ORDER_COUNTER) { comparator = (lhs, rhs) -> { - long counterLhs = feedCounters.get(lhs.getId()); - long counterRhs = feedCounters.get(rhs.getId()); + long counterLhs = feedCounters.containsKey(lhs.getId()) ? feedCounters.get(lhs.getId()) : 0; + long counterRhs = feedCounters.containsKey(rhs.getId()) ? feedCounters.get(rhs.getId()) : 0; if (counterLhs > counterRhs) { // reverse natural order: podcast with most unplayed episodes first return -1; @@ -913,11 +912,11 @@ public final class DBReader { } }; } else if (feedOrder == UserPreferences.FEED_ORDER_MOST_PLAYED) { - final LongIntMap playedCounters = adapter.getPlayedEpisodesCounters(); + final Map playedCounters = adapter.getPlayedEpisodesCounters(); comparator = (lhs, rhs) -> { - long counterLhs = playedCounters.get(lhs.getId()); - long counterRhs = playedCounters.get(rhs.getId()); + long counterLhs = playedCounters.containsKey(lhs.getId()) ? playedCounters.get(lhs.getId()) : 0; + long counterRhs = playedCounters.containsKey(rhs.getId()) ? playedCounters.get(rhs.getId()) : 0; if (counterLhs > counterRhs) { // podcast with most played episodes first return -1; @@ -945,8 +944,8 @@ public final class DBReader { Map folders = new HashMap<>(); for (Feed feed : feeds) { for (String tag : feed.getPreferences().getTags()) { - NavDrawerData.FeedDrawerItem drawerItem = new NavDrawerData.FeedDrawerItem(feed, feed.getId(), - feedCounters.get(feed.getId())); + int counter = feedCounters.containsKey(feed.getId()) ? feedCounters.get(feed.getId()) : 0; + NavDrawerData.FeedDrawerItem drawerItem = new NavDrawerData.FeedDrawerItem(feed, feed.getId(), counter); if (FeedPreferences.TAG_ROOT.equals(tag)) { items.add(drawerItem); continue; @@ -967,7 +966,7 @@ public final class DBReader { items.addAll(foldersSorted); NavDrawerData result = new NavDrawerData(items, queueSize, numNewItems, numDownloadedItems, - feedCounters, UserPreferences.getEpisodeCleanupAlgorithm().getReclaimableItems()); + feedCounters, EpisodeCleanupAlgorithmFactory.build().getReclaimableItems()); adapter.close(); return result; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index 6ec27c01e..e9fe3af1a 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -228,7 +228,7 @@ public final class DBTasks { * @param context Used for accessing the DB. */ public static void performAutoCleanup(final Context context) { - UserPreferences.getEpisodeCleanupAlgorithm().performCleanup(context); + EpisodeCleanupAlgorithmFactory.build().performCleanup(context); } private static Feed searchFeedByIdentifyingValueOrID(Feed feed) { diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithmFactory.java b/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithmFactory.java new file mode 100644 index 000000000..123ccba3f --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/EpisodeCleanupAlgorithmFactory.java @@ -0,0 +1,22 @@ +package de.danoeh.antennapod.core.storage; + +import de.danoeh.antennapod.core.preferences.UserPreferences; + +public abstract class EpisodeCleanupAlgorithmFactory { + public static EpisodeCleanupAlgorithm build() { + if (!UserPreferences.isEnableAutodownload()) { + return new APNullCleanupAlgorithm(); + } + int cleanupValue = UserPreferences.getEpisodeCleanupValue(); + switch (cleanupValue) { + case UserPreferences.EPISODE_CLEANUP_EXCEPT_FAVORITE: + return new ExceptFavoriteCleanupAlgorithm(); + case UserPreferences.EPISODE_CLEANUP_QUEUE: + return new APQueueCleanupAlgorithm(); + case UserPreferences.EPISODE_CLEANUP_NULL: + return new APNullCleanupAlgorithm(); + default: + return new APCleanupAlgorithm(cleanupValue); + } + } +} diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java b/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java index 24b55f9f4..af02a7733 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/NavDrawerData.java @@ -1,24 +1,24 @@ package de.danoeh.antennapod.core.storage; import de.danoeh.antennapod.model.feed.Feed; -import de.danoeh.antennapod.storage.database.LongIntMap; import java.util.ArrayList; import java.util.List; +import java.util.Map; public class NavDrawerData { public final List items; public final int queueSize; public final int numNewItems; public final int numDownloadedItems; - public final LongIntMap feedCounters; + public final Map feedCounters; public final int reclaimableSpace; public NavDrawerData(List feeds, int queueSize, int numNewItems, int numDownloadedItems, - LongIntMap feedIndicatorValues, + Map feedIndicatorValues, int reclaimableSpace) { this.items = feeds; this.queueSize = queueSize; diff --git a/core/src/test/java/de/danoeh/antennapod/core/util/LongLongMapTest.java b/core/src/test/java/de/danoeh/antennapod/core/util/LongLongMapTest.java deleted file mode 100644 index 03326d3b1..000000000 --- a/core/src/test/java/de/danoeh/antennapod/core/util/LongLongMapTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package de.danoeh.antennapod.core.util; - -import de.danoeh.antennapod.storage.database.LongIntMap; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class LongLongMapTest { - - @Test - public void testEmptyMap() { - LongIntMap map = new LongIntMap(); - assertEquals(0, map.size()); - assertEquals("LongLongMap{}", map.toString()); - assertEquals(0, map.get(42)); - assertEquals(-1, map.get(42, -1)); - assertFalse(map.delete(42)); - assertEquals(-1, map.indexOfKey(42)); - assertEquals(-1, map.indexOfValue(42)); - assertEquals(1, map.hashCode()); - } - - @Test - public void testSingleElement() { - LongIntMap map = new LongIntMap(); - map.put(17, 42); - assertEquals(1, map.size()); - assertEquals("LongLongMap{17=42}", map.toString()); - assertEquals(42, map.get(17)); - assertEquals(42, map.get(17, -1)); - assertEquals(0, map.indexOfKey(17)); - assertEquals(0, map.indexOfValue(42)); - assertTrue(map.delete(17)); - } - - @Test - public void testAddAndDelete() { - LongIntMap map = new LongIntMap(); - for(int i=0; i < 100; i++) { - map.put(i * 17, i * 42); - } - assertEquals(100, map.size()); - assertEquals(0, map.get(0)); - assertEquals(42, map.get(17)); - assertEquals(42, map.get(17, -1)); - assertEquals(1, map.indexOfKey(17)); - assertEquals(1, map.indexOfValue(42)); - for(int i=0; i < 100; i++) { - assertTrue(map.delete(i * 17)); - } - } - - @Test - public void testOverwrite() { - LongIntMap map = new LongIntMap(); - map.put(17, 42); - assertEquals(1, map.size()); - assertEquals("LongLongMap{17=42}", map.toString()); - assertEquals(42, map.get(17)); - map.put(17, 23); - assertEquals(1, map.size()); - assertEquals("LongLongMap{17=23}", map.toString()); - assertEquals(23, map.get(17)); - } - -} -- cgit v1.2.3