Commit c6059ab9 authored by Him188's avatar Him188

Add tests

parent f79d3f9a
...@@ -46,7 +46,7 @@ kotlin { ...@@ -46,7 +46,7 @@ kotlin {
} }
} }
commonMain { val commonMain by getting {
dependencies { dependencies {
api(kotlin("stdlib", Versions.Kotlin.stdlib)) api(kotlin("stdlib", Versions.Kotlin.stdlib))
api(kotlinx("serialization-runtime-common", Versions.Kotlin.serialization)) api(kotlinx("serialization-runtime-common", Versions.Kotlin.serialization))
...@@ -58,7 +58,7 @@ kotlin { ...@@ -58,7 +58,7 @@ kotlin {
} }
} }
commonTest { val commonTest by getting {
dependencies { dependencies {
implementation(kotlin("test-annotations-common")) implementation(kotlin("test-annotations-common"))
implementation(kotlin("test-common")) implementation(kotlin("test-common"))
...@@ -94,6 +94,7 @@ kotlin { ...@@ -94,6 +94,7 @@ kotlin {
val jvmTest by getting { val jvmTest by getting {
dependencies { dependencies {
dependsOn(commonTest)
implementation(kotlin("test", Versions.Kotlin.stdlib)) implementation(kotlin("test", Versions.Kotlin.stdlib))
implementation(kotlin("test-junit", Versions.Kotlin.stdlib)) implementation(kotlin("test-junit", Versions.Kotlin.stdlib))
implementation("org.pcap4j:pcap4j-distribution:1.8.2") implementation("org.pcap4j:pcap4j-distribution:1.8.2")
......
...@@ -73,7 +73,7 @@ internal class AtomicResizeCacheList<E>(private val retention: Long) { ...@@ -73,7 +73,7 @@ internal class AtomicResizeCacheList<E>(private val retention: Long) {
* No concurrency guaranteed on same [element] * No concurrency guaranteed on same [element]
*/ */
private fun removeDuplication(element: E): Boolean { private fun removeDuplication(element: E): Boolean {
val duplicate = list.firstOrNull { it.element == element } ?: return false val duplicate = list.firstOrNull { it.time.value != 0L && it.element == element } ?: return false
duplicate.time.value = 0 duplicate.time.value = 0
return true return true
} }
......
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package net.mamoe.mirai.qqandroid.utils
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlin.test.Test
import kotlin.test.assertFalse
import kotlin.test.assertTrue
internal class AtomicResizeCacheListTest {
@Test
fun testDuplication() {
val list = AtomicResizeCacheList<Int>(1000)
assertTrue { list.ensureNoDuplication(1) }
assertFalse { list.ensureNoDuplication(1) }
assertTrue { list.ensureNoDuplication(1) }
}
@Test
fun testRetention() {
val list = AtomicResizeCacheList<Int>(1000)
assertTrue { list.ensureNoDuplication(1) }
runBlocking {
delay(1001)
// because no concurrency guaranteed on same elements
assertFalse { list.ensureNoDuplication(1) }
assertTrue { list.ensureNoDuplication(2) }
// outdated elements are now cleaned
assertTrue { list.ensureNoDuplication(1) }
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment