156 lines
4.9 KiB
Kotlin
156 lines
4.9 KiB
Kotlin
package dev.inmo.micro_utils.common
|
|
|
|
import kotlin.math.floor
|
|
import kotlin.test.Test
|
|
import kotlin.test.assertEquals
|
|
|
|
class DiffUtilsTests {
|
|
@Test
|
|
fun testThatSimpleRemoveWorks() {
|
|
val oldList = (0 until 10).toList()
|
|
val withIndex = oldList.withIndex()
|
|
|
|
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
|
|
for ((i, _) in withIndex) {
|
|
if (i + count > oldList.lastIndex) {
|
|
continue
|
|
}
|
|
val removedSublist = oldList.subList(i, i + count)
|
|
oldList.calculateDiff(oldList - removedSublist).apply {
|
|
assertEquals(
|
|
removedSublist.mapIndexed { j, o -> IndexedValue(i + j, o) },
|
|
removed
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun testThatSimpleAddWorks() {
|
|
val oldList = (0 until 10).map { it.toString() }
|
|
val withIndex = oldList.withIndex()
|
|
|
|
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
|
|
for ((i, _) in withIndex) {
|
|
if (i + count > oldList.lastIndex) {
|
|
continue
|
|
}
|
|
val addedSublist = oldList.subList(i, i + count).map { "added$it" }
|
|
val mutable = oldList.toMutableList()
|
|
mutable.addAll(i, addedSublist)
|
|
oldList.calculateDiff(mutable).apply {
|
|
assertEquals(
|
|
addedSublist.mapIndexed { j, o -> IndexedValue(i + j, o) },
|
|
added
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun testThatSimpleChangesWorks() {
|
|
val oldList = (0 until 10).map { it.toString() }
|
|
val withIndex = oldList.withIndex()
|
|
|
|
for (step in oldList.indices) {
|
|
for ((i, _) in withIndex) {
|
|
val mutable = oldList.toMutableList()
|
|
val changes = (
|
|
if (step == 0) i until oldList.size else (i until oldList.size step step)
|
|
).map { index ->
|
|
IndexedValue(index, mutable[index]) to IndexedValue(index, "changed$index").also {
|
|
mutable[index] = it.value
|
|
}
|
|
}
|
|
oldList.calculateDiff(mutable).apply {
|
|
assertEquals(
|
|
changes,
|
|
replaced
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun testThatSimpleRemoveApplyWorks() {
|
|
val oldList = (0 until 10).toList()
|
|
val withIndex = oldList.withIndex()
|
|
|
|
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
|
|
for ((i, _) in withIndex) {
|
|
if (i + count > oldList.lastIndex) {
|
|
continue
|
|
}
|
|
val removedSublist = oldList.subList(i, i + count)
|
|
val mutableOldList = oldList.toMutableList()
|
|
val targetList = oldList - removedSublist
|
|
|
|
mutableOldList.applyDiff(targetList)
|
|
|
|
assertEquals(
|
|
targetList,
|
|
mutableOldList
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun testThatSimpleAddApplyWorks() {
|
|
val oldList = (0 until 10).map { it.toString() }
|
|
val withIndex = oldList.withIndex()
|
|
|
|
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
|
|
for ((i, _) in withIndex) {
|
|
if (i + count > oldList.lastIndex) {
|
|
continue
|
|
}
|
|
val addedSublist = oldList.subList(i, i + count).map { "added$it" }
|
|
val mutable = oldList.toMutableList()
|
|
mutable.addAll(i, addedSublist)
|
|
val mutableOldList = oldList.toMutableList()
|
|
|
|
mutableOldList.applyDiff(mutable)
|
|
|
|
assertEquals(
|
|
mutable,
|
|
mutableOldList
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun testThatSimpleChangesApplyWorks() {
|
|
val oldList = (0 until 10).map { it.toString() }
|
|
val withIndex = oldList.withIndex()
|
|
|
|
for (step in oldList.indices) {
|
|
for ((i, _) in withIndex) {
|
|
val mutable = oldList.toMutableList()
|
|
|
|
val newList = if (step == 0) {
|
|
i until oldList.size
|
|
} else {
|
|
i until oldList.size step step
|
|
}
|
|
newList.forEach { index ->
|
|
IndexedValue(index, mutable[index]) to IndexedValue(index, "changed$index").also {
|
|
mutable[index] = it.value
|
|
}
|
|
}
|
|
|
|
val mutableOldList = oldList.toMutableList()
|
|
mutableOldList.applyDiff(mutable)
|
|
assertEquals(
|
|
mutable,
|
|
mutableOldList
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|