mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2026-06-19 19:00:14 +02:00
Core additive work for v3.4 (non-breaking): - Rewrite nodeCount(), height(), clear() and the post-order iterator iteratively so deep/degenerate trees no longer throw StackOverflowError (verified to 50k deep). - Add lazy Sequence traversal: asSequence(order), pre/post/levelOrderSequence(). - Add navigation extensions: isLeaf, degree, root(), ancestors(), siblings(), leaves(), descendants(). - Add functional extensions: findNode, filterNodes, anyNode, allNodes, countNodes, foldNodes, mapValues, deepCopy, structurallyEquals (all stack-safe). - Add tests for stack-safety, the new APIs, and previously-uncovered height/depth/nodeCount/path (incl. exception paths). 40 tests green on JVM.
47 lines
1.4 KiB
Kotlin
47 lines
1.4 KiB
Kotlin
package com.github.adriankuta.datastructure.tree
|
|
|
|
import com.github.adriankuta.datastructure.tree.iterators.TreeNodeIterators
|
|
import kotlin.test.Test
|
|
import kotlin.test.assertContentEquals
|
|
import kotlin.test.assertEquals
|
|
|
|
class TreeNodeSequenceTest {
|
|
|
|
private fun sample() = tree(1) {
|
|
child(2) {
|
|
child(4)
|
|
child(5)
|
|
}
|
|
child(3) {
|
|
child(6)
|
|
}
|
|
}
|
|
|
|
@Test
|
|
fun preOrderSequence() =
|
|
assertContentEquals(listOf(1, 2, 4, 5, 3, 6), sample().preOrderSequence().map { it.value }.toList())
|
|
|
|
@Test
|
|
fun postOrderSequence() =
|
|
assertContentEquals(listOf(4, 5, 2, 6, 3, 1), sample().postOrderSequence().map { it.value }.toList())
|
|
|
|
@Test
|
|
fun levelOrderSequence() =
|
|
assertContentEquals(listOf(1, 2, 3, 4, 5, 6), sample().levelOrderSequence().map { it.value }.toList())
|
|
|
|
@Test
|
|
fun asSequenceDefaultsToPreOrder() =
|
|
assertContentEquals(listOf(1, 2, 4, 5, 3, 6), sample().asSequence().map { it.value }.toList())
|
|
|
|
@Test
|
|
fun asSequenceHonorsExplicitOrder() =
|
|
assertContentEquals(
|
|
listOf(1, 2, 3, 4, 5, 6),
|
|
sample().asSequence(TreeNodeIterators.LevelOrder).map { it.value }.toList(),
|
|
)
|
|
|
|
@Test
|
|
fun sequenceShortCircuitsLazily() =
|
|
assertEquals(4, sample().preOrderSequence().map { it.value }.first { it == 4 })
|
|
}
|