You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.9 KiB
Kotlin

package me.eater.test.threedom.dom
import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.collections.shouldHaveSingleElement
import io.kotest.matchers.shouldBe
import me.eater.threedom.dom.Document
import me.eater.threedom.dom.IDocument
import me.eater.threedom.dom.PlainNode
import me.eater.threedom.dom.createNode
import me.eater.threedom.utils.joml.Vector3d
import me.eater.threedom.utils.joml.getTranslation
import me.eater.threedom.utils.joml.setTranslation
class PositionTest : StringSpec({
"ensure positioning works" {
val doc: IDocument = Document()
val node = doc.createNode<PlainNode>()
doc.addNode(node)
node.model { setTranslation(10, 0, 10) }
node.absolute.getTranslation() shouldBe Vector3d(10, 0, 10)
val nodeTwo = doc.createNode<PlainNode>()
node.addNode(nodeTwo)
nodeTwo.model { setTranslation(-10, 20, 0) }
nodeTwo.absolute.getTranslation() shouldBe Vector3d(0, 20, 10)
doc.addNode(nodeTwo)
nodeTwo.absolute.getTranslation() shouldBe Vector3d(-10, 20, 0)
}
"ensure position search tree works" {
val doc: IDocument = Document()
val node = doc.createNode<PlainNode>()
val nodeTwo = doc.createNode<PlainNode>()
val nodeThree = doc.createNode<PlainNode>()
doc.addNode(node)
node.addNode(nodeTwo)
nodeTwo.addNode(nodeThree)
node.model { setTranslation(10, 0, 10) }
nodeTwo.model { setTranslation(-10, 20, 0) }
nodeThree.model { setTranslation(0, 20, 0) }
doc.findAt(10, 0, 10) shouldHaveSingleElement node
doc.findAt(0, 20, 10) shouldHaveSingleElement nodeTwo
doc.findAt(0, 40, 10) shouldHaveSingleElement nodeThree
doc.addNode(nodeTwo)
doc.findAt(-10, 20, 0) shouldHaveSingleElement nodeTwo
doc.findAt(-10, 40, 0) shouldHaveSingleElement nodeThree
}
})