Skip to content

Commit

Permalink
implement first test search, just a simple num game and fix all the i…
Browse files Browse the repository at this point in the history
…ssues that were found on the way
  • Loading branch information
d-kozak committed Nov 5, 2018
1 parent c949932 commit 52340f8
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 17 deletions.
8 changes: 8 additions & 0 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions .idea/modules/search_main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions .idea/modules/search_test.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
kotlin("jvm") version "1.2.60"
kotlin("jvm") version "1.3.0"
}

group = "io.dkozak"
version = "1.0-SNAPSHOT"

val junitVersion = "5.3.1"

repositories {
mavenCentral()
}

dependencies {
compile(kotlin("stdlib-jdk8"))
compile("org.junit.jupiter:junit-jupiter-api:$junitVersion")
compile("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
}

tasks.withType<KotlinCompile> {
Expand Down
4 changes: 2 additions & 2 deletions src/main/io/dkozak/search/engine/engine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import io.dkozak.search.model.EngineConfiguration
import io.dkozak.search.model.Node


fun search(engineConfiguration: EngineConfiguration, logger: (String) -> Unit = {}) = engineConfiguration.executeSearch(logger)
fun <NodeType : Node> search(engineConfiguration: EngineConfiguration<NodeType>, logger: (String) -> Unit = {}) = engineConfiguration.executeSearch(logger)

private fun EngineConfiguration.executeSearch(logger: (String) -> Unit): Node? {
private fun <NodeType : Node> EngineConfiguration<NodeType>.executeSearch(logger: (String) -> Unit): Node? {
val queue = searchQueue
queue.addNode(initialState)
while (!queue.isEmpty()) {
Expand Down
12 changes: 6 additions & 6 deletions src/main/io/dkozak/search/model/EngineConfiguration.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.dkozak.search.model

class EngineConfiguration
class EngineConfiguration<NodeType : Node>
(
val initialState: Node,
val searchQueue: SearchQueue,
val expandNode: (Node) -> List<Node>,
val nodeFilter: (Node) -> Boolean,
val isFinalState: (Node) -> Boolean
val initialState: NodeType,
val searchQueue: SearchQueue<NodeType>,
val expandNode: (NodeType) -> List<NodeType>,
val nodeFilter: (NodeType) -> Boolean,
val isFinalState: (NodeType) -> Boolean
)
13 changes: 13 additions & 0 deletions src/main/io/dkozak/search/model/QueueBasedSearchQueue.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.dkozak.search.model

import java.util.*

class QueueBasedSearchQueue<NodeType : Node> : SearchQueue<NodeType> {
private val queue: Deque<NodeType> = LinkedList()

override fun next(): NodeType = queue.poll()

override fun addNodes(nodes: List<NodeType>) = nodes.forEach { queue.addLast(it) }

override fun isEmpty(): Boolean = queue.isEmpty()
}
8 changes: 4 additions & 4 deletions src/main/io/dkozak/search/model/SearchQueue.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.dkozak.search.model

interface SearchQueue {
fun next(): Node
fun addNodes(nodes: List<Node>)
interface SearchQueue<NodeType : Node> {
fun next(): NodeType
fun addNodes(nodes: List<NodeType>)
fun isEmpty(): Boolean

fun addNode(node: Node) = addNodes(listOf(node))
fun addNode(node: NodeType) = addNodes(listOf(node))
}
24 changes: 24 additions & 0 deletions src/test/io/dkozak/search/engine/EngineTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.dkozak.search.engine

import io.dkozak.search.model.EngineConfiguration
import io.dkozak.search.model.Node
import io.dkozak.search.model.QueueBasedSearchQueue
import org.junit.jupiter.api.Test

data class NumNode(val num: Int) : Node

class EngineTest {

@Test
fun `simpleNumberGame solution should be found`() {
val configuration = EngineConfiguration(
initialState = NumNode(1),
searchQueue = QueueBasedSearchQueue(),
expandNode = { node -> listOf(1, 2, 3, 4, 5).map { NumNode(it + node.num) } },
nodeFilter = { node -> true },
isFinalState = { node -> node.num == 42 }
)
val result = search(configuration, { msg -> println(msg) })
println("Found result $result")
}
}

0 comments on commit 52340f8

Please sign in to comment.