+added more useful collections
This commit is contained in:
1 parent
d29bf960aa
commit
f6d2422cc1
8 files changed
+541
-40
No files matched your search
@@ -0,0 +1,81 @@
|
||||
package collections
|
||||
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.test.advanceTimeBy
|
||||
import kotlinx.coroutines.test.resetMain
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import kotlinx.coroutines.test.setMain
|
||||
import net.sergeych.collections.ExpirableAsyncCache
|
||||
import net.sergeych.collections.SortedList
|
||||
import kotlin.test.*
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
class CollectionsTest {
|
||||
|
||||
@Test
|
||||
fun testSortedList1() {
|
||||
val a1 = SortedList(5,4,3,9,1)
|
||||
assertTrue { 4 in a1 }
|
||||
assertTrue { 14 !in a1 }
|
||||
fun <T: Comparable<T>>test(x: SortedList<T>) {
|
||||
var last: T? = null
|
||||
for (i in x.toList()) {
|
||||
if( last == null ) last = i
|
||||
else if( last > i ) fail("invalid order: $last should be <= $i")
|
||||
assertContains(x, i)
|
||||
}
|
||||
}
|
||||
test(a1)
|
||||
a1.add(11, 3, 2, 1, 0, 9, 22, -55, 0, 1, 0)
|
||||
println(a1.toList())
|
||||
assertEquals(listOf(-55, 0, 0, 0, 1, 1, 1, 2, 3, 3, 4, 5, 9, 9, 11, 22), a1.toList())
|
||||
assertEquals(11, a1.find(11))
|
||||
assertEquals(listOf(0,0,0), a1.findAll(0))
|
||||
assertEquals(listOf(11), a1.findAll(11))
|
||||
assertEquals(listOf(3,3), a1.findAll(3))
|
||||
assertTrue { a1.remove(3) }
|
||||
assertEquals(listOf(3), a1.findAll(3))
|
||||
assertTrue { a1.remove(3) }
|
||||
assertEquals(listOf(), a1.findAll(3))
|
||||
assertTrue { 3 !in a1 }
|
||||
assertEquals(3, a1.findAll(1).size)
|
||||
assertEquals( 3, a1.removeAll(1))
|
||||
assertTrue { 1 !in a1 }
|
||||
assertEquals(listOf(-55, 0, 0, 0, 2, 4, 5, 9, 9, 11, 22), a1.toList())
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
fun expirableAsyncCacheTest() = runTest {
|
||||
val removedValues = mutableSetOf<Int>()
|
||||
val m = ExpirableAsyncCache<String,Int>(500.milliseconds) {
|
||||
removedValues += it
|
||||
}
|
||||
m.put("one", 1)
|
||||
m.put("two", 2)
|
||||
assertTrue("one" in m)
|
||||
assertTrue("two" in m)
|
||||
assertEquals(1, m.get("one"))
|
||||
assertEquals(2, m.get("two"))
|
||||
assertTrue { removedValues.isEmpty() }
|
||||
|
||||
m.put("one", 11)
|
||||
assertEquals(11, m.get("one"))
|
||||
assertEquals(removedValues, setOf(1))
|
||||
|
||||
m.getOrDefault("two", 22)
|
||||
assertEquals(2, m.get("two"))
|
||||
|
||||
m.getOrPut("two") {222}
|
||||
assertEquals(2, m.get("two"))
|
||||
|
||||
m.getOrPut("three") { 3 }
|
||||
assertEquals(3, m.get("three"))
|
||||
// This sadly is not working
|
||||
// delay(2000)
|
||||
// advanceTimeBy(2000)
|
||||
// delay(1000)
|
||||
// assertNull(m.get("one"))
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user