1bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton/* 2bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * Copyright (C) 2018 The Android Open Source Project 3bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * 4bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * Licensed under the Apache License, Version 2.0 (the "License"); 5bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * you may not use this file except in compliance with the License. 6bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * You may obtain a copy of the License at 7bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * 8bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * http://www.apache.org/licenses/LICENSE-2.0 9bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * 10bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * Unless required by applicable law or agreed to in writing, software 11bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * distributed under the License is distributed on an "AS IS" BASIS, 12bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * See the License for the specific language governing permissions and 14bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton * limitations under the License. 15bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton */ 16bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 17bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Whartonpackage androidx.collection 18bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 19bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Whartonimport org.junit.Assert.assertEquals 20bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Whartonimport org.junit.Assert.assertTrue 21bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Whartonimport org.junit.Test 22bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 23bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Whartonclass LruCacheTest { 24bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton private data class TestData(val x: String = "bla") 25bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 26bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton @Test fun size() { 27bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton val cache = lruCache<String, TestData>(200, { k, (x) -> k.length * x.length }) 28bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton cache.put("long", TestData()) 29bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton assertEquals(cache.size(), 12) 30bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton } 31bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 32bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton @Test fun create() { 33bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton val cache = lruCache<String, TestData>(200, create = { key -> TestData("$key foo") }) 34bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton assertEquals(cache.get("kung"), TestData("kung foo")) 35bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton } 36bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 37bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton @Test fun onEntryRemoved() { 38bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton var wasCalled = false 39bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton 40bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton val cache = lruCache<String, TestData>(200, onEntryRemoved = { _, _, _, _ -> 41bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton wasCalled = true 42bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton }) 43bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton val initial = TestData() 44bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton cache.put("a", initial) 45bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton cache.remove("a") 46bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton assertTrue(wasCalled) 47bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton } 48bf04c31bd91bc6188abef45f7d9c1fa4040e5633Jake Wharton} 49