mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2025-09-16 15:34:22 +02:00
228 lines
6.9 KiB
Kotlin
228 lines
6.9 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
|
|
import kotlin.test.assertNull
|
|
|
|
class TreeNodeTest {
|
|
|
|
@Test
|
|
fun removeNodeTest() {
|
|
val root = TreeNode("Root")
|
|
val beveragesNode = TreeNode("Beverages")
|
|
val curdNode = TreeNode("Curd")
|
|
root.addChild(beveragesNode)
|
|
root.addChild(curdNode)
|
|
|
|
val teaNode = TreeNode("tea")
|
|
val coffeeNode = TreeNode("coffee")
|
|
val milkShakeNode = TreeNode("Milk Shake")
|
|
beveragesNode.addChild(teaNode)
|
|
beveragesNode.addChild(coffeeNode)
|
|
beveragesNode.addChild(milkShakeNode)
|
|
|
|
val gingerTeaNode = TreeNode("ginger tea")
|
|
val normalTeaNode = TreeNode("normal tea")
|
|
teaNode.addChild(gingerTeaNode)
|
|
teaNode.addChild(normalTeaNode)
|
|
|
|
val yogurtNode = TreeNode("yogurt")
|
|
val lassiNode = TreeNode("lassi")
|
|
curdNode.addChild(yogurtNode)
|
|
curdNode.addChild(lassiNode)
|
|
|
|
assertEquals(
|
|
"Root\n" +
|
|
"├── Beverages\n" +
|
|
"│ ├── tea\n" +
|
|
"│ │ ├── ginger tea\n" +
|
|
"│ │ └── normal tea\n" +
|
|
"│ ├── coffee\n" +
|
|
"│ └── Milk Shake\n" +
|
|
"└── Curd\n" +
|
|
" ├── yogurt\n" +
|
|
" └── lassi\n",
|
|
root.prettyString(),
|
|
"Pretty print test"
|
|
)
|
|
|
|
root.removeChild(curdNode)
|
|
root.removeChild(gingerTeaNode)
|
|
assertEquals(
|
|
"Root\n" +
|
|
"└── Beverages\n" +
|
|
" ├── tea\n" +
|
|
" │ └── normal tea\n" +
|
|
" ├── coffee\n" +
|
|
" └── Milk Shake\n",
|
|
root.prettyString(),
|
|
"Remove node test"
|
|
)
|
|
}
|
|
|
|
@Test
|
|
fun clearTest() {
|
|
val root = TreeNode("Root")
|
|
val beveragesNode = TreeNode("Beverages")
|
|
val curdNode = TreeNode("Curd")
|
|
root.addChild(beveragesNode)
|
|
root.addChild(curdNode)
|
|
|
|
val teaNode = TreeNode("tea")
|
|
val coffeeNode = TreeNode("coffee")
|
|
val milkShakeNode = TreeNode("Milk Shake")
|
|
beveragesNode.addChild(teaNode)
|
|
beveragesNode.addChild(coffeeNode)
|
|
beveragesNode.addChild(milkShakeNode)
|
|
|
|
val gingerTeaNode = TreeNode("ginger tea")
|
|
val normalTeaNode = TreeNode("normal tea")
|
|
teaNode.addChild(gingerTeaNode)
|
|
teaNode.addChild(normalTeaNode)
|
|
|
|
val yogurtNode = TreeNode("yogurt")
|
|
val lassiNode = TreeNode("lassi")
|
|
curdNode.addChild(yogurtNode)
|
|
curdNode.addChild(lassiNode)
|
|
|
|
root.clear()
|
|
assertEquals(root.children, emptyList())
|
|
assertEquals(beveragesNode.children, emptyList())
|
|
assertEquals(curdNode.children, emptyList())
|
|
assertEquals(teaNode.children, emptyList())
|
|
assertEquals(coffeeNode.children, emptyList())
|
|
assertEquals(milkShakeNode.children, emptyList())
|
|
assertEquals(gingerTeaNode.children, emptyList())
|
|
assertEquals(normalTeaNode.children, emptyList())
|
|
assertEquals(yogurtNode.children, emptyList())
|
|
assertEquals(lassiNode.children, emptyList())
|
|
|
|
assertNull(root.parent)
|
|
assertNull(beveragesNode.parent)
|
|
assertNull(curdNode.parent)
|
|
assertNull(teaNode.parent)
|
|
assertNull(coffeeNode.parent)
|
|
assertNull(milkShakeNode.parent)
|
|
assertNull(gingerTeaNode.parent)
|
|
assertNull(normalTeaNode.parent)
|
|
assertNull(yogurtNode.parent)
|
|
assertNull(lassiNode.parent)
|
|
}
|
|
|
|
@Test
|
|
fun kotlinExtTest() {
|
|
val root = TreeNode("World")
|
|
val northA = TreeNode("North America")
|
|
val europe = TreeNode("Europe")
|
|
root.addChild(northA)
|
|
root.addChild(europe)
|
|
|
|
val usa = TreeNode("USA")
|
|
northA.addChild(usa)
|
|
|
|
val poland = TreeNode("Poland")
|
|
val france = TreeNode("France")
|
|
europe.addChild(poland)
|
|
europe.addChild(france)
|
|
|
|
val rootExt = tree("World") {
|
|
child("North America") {
|
|
child("USA")
|
|
}
|
|
child("Europe") {
|
|
child("Poland")
|
|
child("France")
|
|
}
|
|
}
|
|
assertEquals(root.prettyString(), rootExt.prettyString())
|
|
}
|
|
|
|
@Test
|
|
fun preOrderIteratorTest() {
|
|
val tree = tree("F") {
|
|
child("B") {
|
|
child("A")
|
|
child("D") {
|
|
child("C")
|
|
child("E")
|
|
}
|
|
}
|
|
child("G") {
|
|
child("I") {
|
|
child("H")
|
|
}
|
|
}
|
|
}
|
|
val expectedPreOrder = listOf("F", "B", "A", "D", "C", "E", "G", "I", "H")
|
|
assertContentEquals(expectedPreOrder, tree.toList().map { it.toString() })
|
|
}
|
|
@Test
|
|
fun postOrderIteratorTest() {
|
|
val tree = tree("A", TreeNodeIterators.PostOrder) {
|
|
child("B") {
|
|
child("E")
|
|
}
|
|
child("C")
|
|
child("D") {
|
|
child("F")
|
|
child("G")
|
|
child("H")
|
|
child("I")
|
|
child("J")
|
|
}
|
|
}
|
|
|
|
val expectedPreOrder = listOf("E", "B", "C", "F", "G", "H", "I", "J", "D", "A")
|
|
assertContentEquals(expectedPreOrder, tree.toList().map { it.toString() })
|
|
}
|
|
|
|
@Test
|
|
fun secondPostOrderIteratorTest() {
|
|
val tree = tree(1, TreeNodeIterators.PostOrder) {
|
|
child(2) {
|
|
child(5) {
|
|
child(10)
|
|
}
|
|
child(6) {
|
|
child(11)
|
|
child(12)
|
|
child(13)
|
|
}
|
|
}
|
|
child(3)
|
|
child(4) {
|
|
child(7)
|
|
child(8)
|
|
child(9)
|
|
}
|
|
}
|
|
val expectedOrder = listOf(10, 5, 11, 12, 13, 6, 2, 3, 7, 8, 9, 4, 1)
|
|
assertContentEquals(expectedOrder, tree.toList().map { it.value })
|
|
}
|
|
|
|
@Test
|
|
fun levelOrderIteratorTest() {
|
|
val tree = tree(1, TreeNodeIterators.LevelOrder) {
|
|
child(2) {
|
|
child(5) {
|
|
child(10)
|
|
}
|
|
child(6) {
|
|
child(11)
|
|
child(12)
|
|
child(13)
|
|
}
|
|
}
|
|
child(3)
|
|
child(4) {
|
|
child(7)
|
|
child(8)
|
|
child(9)
|
|
}
|
|
}
|
|
val expectedOrder = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
assertContentEquals(expectedOrder, tree.toList().map { it.value })
|
|
}
|
|
} |