package domain import ch.tutteli.atrium.api.fluent.en_GB.toEqual import ch.tutteli.atrium.api.verbs.expect import kotlin.test.Test class NeighbourClueTest : ClueTest() { @Test fun `ensure actual neighbours are 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] expect(NeighbourClue(a.solution, b.solution).isRuleViolated(grid)) .toEqual(false) expect(NeighbourClue(b.solution, a.solution).isRuleViolated(grid)) .toEqual(false) } } } } @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) } } } } } @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 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) } } } } @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) } }