Files
YAEP/composeApp/src/commonTest/kotlin/domain/NeighbourClueTest.kt

94 lines
3.0 KiB
Kotlin
Raw Normal View History

2024-06-21 10:37:56 +02:00
package domain
import ch.tutteli.atrium.api.fluent.en_GB.toEqual
import ch.tutteli.atrium.api.verbs.expect
import kotlin.test.Test
2024-06-21 19:54:15 +02:00
class NeighbourClueTest : ClueTest() {
2024-06-21 10:37:56 +02:00
@Test
fun `ensure actual neighbours are valid`() {
2024-06-21 19:54:15 +02:00
val grid = createGrid()
for (ia in 0 until size) {
for (ib in 0 until size) {
for (j in 1 until size) {
val a = grid[ia][j - 1]
val b = grid[ib][j]
expect(NeighbourClue(a.solution, b.solution).isRuleViolated(grid))
.toEqual(false)
expect(NeighbourClue(b.solution, a.solution).isRuleViolated(grid))
.toEqual(false)
}
2024-06-21 10:37:56 +02:00
}
2024-06-21 19:54:15 +02:00
}
}
@Test
fun `ensure non-neighbours are invalid`() {
val grid = createGrid()
for (ia in 0 until size) {
for (ib in 0 until size) {
for (ja in 0 until size) {
for (jb in 0 until size) {
if (ja == jb + 1 || ja == jb - 1) {
continue
}
val a = grid[ia][ja]
val b = grid[ib][jb]
expect(NeighbourClue(a.solution, b.solution).isRuleViolated(grid))
.toEqual(true)
expect(NeighbourClue(b.solution, a.solution).isRuleViolated(grid))
.toEqual(true)
2024-06-21 10:37:56 +02:00
}
2024-06-21 19:54:15 +02:00
}
2024-06-21 10:37:56 +02:00
}
2024-06-21 19:54:15 +02:00
}
}
@Test
fun `ensure grid with one neighbour not set is considered valid`() {
val grid = createGrid()
for (ia in 0 until size) {
for (ib in 0 until size) {
for (j in 1 until size) {
val a = grid[ia][j - 1]
val b = grid[ib][j]
a.selection = null
b.selection = b.solution
2024-06-21 10:37:56 +02:00
2024-06-21 19:54:15 +02:00
expect(NeighbourClue(a.solution, b.solution).isRuleViolated(grid))
.toEqual(false)
expect(NeighbourClue(b.solution, a.solution).isRuleViolated(grid))
.toEqual(false)
a.selection = a.solution
b.selection = null
expect(NeighbourClue(a.solution, b.solution).isRuleViolated(grid))
.toEqual(false)
expect(NeighbourClue(b.solution, a.solution).isRuleViolated(grid))
.toEqual(false)
}
}
}
2024-06-21 10:37:56 +02:00
}
2024-06-21 19:54:15 +02:00
@Test
fun `ensure grid with a and c more than one cell between is not considered valid`() {
val grid = createGrid { null }
val a = grid[2][1]
val b = grid[0][2]
a.selection = a.solution
grid[0][3].selection = b.solution
expect(NeighbourClue(a.solution, b.solution).isRuleViolated(grid))
.toEqual(true)
expect(NeighbourClue(b.solution, a.solution).isRuleViolated(grid))
.toEqual(true)
}
2024-06-21 10:37:56 +02:00
}