Add tests

This commit is contained in:
Him188 2020-04-15 18:18:59 +08:00
parent f79d3f9aa0
commit c6059ab9ec
3 changed files with 45 additions and 3 deletions

View File

@ -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 {
} }
} }
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 {
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")

View File

@ -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
} }

View File

@ -0,0 +1,41 @@
/*
* 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) }
}
}
}