+added more useful collections

This commit is contained in:
sergeych committed 2024-12-22 12:22:51 +03:00
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"))
}
}