Changed several implementation details and added depth-first-search

This commit is contained in:
Niklas Birk
2019-03-27 19:59:28 +01:00
parent 481b292d17
commit 82e7e618d7
10 changed files with 216 additions and 78 deletions

View File

@ -1,10 +1,12 @@
package search.breadthfirstsearch;
import org.junit.jupiter.api.Test;
import search.EightPuzzleNode;
import java.util.Arrays;
import java.util.List;
import static search.SearchTestUtils.printSolution;
class BreadthFirstSearchTest
{
@Test
@ -26,12 +28,28 @@ class BreadthFirstSearchTest
var actual = new BreadthFirstSearch().breadthFirstSearch(List.of(root), expected);
System.out.println("Target: " + Arrays.deepToString(targetState));
System.out.println("Actual:\n" + actual);
printSolution(actual);
}
private void printSolution(Node<int[][]> targetNode)
@Test
void shouldReturnCorrectTargetChubekNode()
{
int[][] state = {
{2, 0, 4},
{6, 7, 1},
{8, 5, 3}
};
var root = new EightPuzzleNode(state);
int[][] targetState = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 0}
};
var expected = new EightPuzzleNode(targetState);
var actual = new BreadthFirstSearch().breadthFirstSearch(List.of(root), expected);
printSolution(actual);
}
}

View File

@ -1,124 +0,0 @@
package search.breadthfirstsearch;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
class EightPuzzleNodeTest
{
@Test
public void shouldThrowExceptionWhileStateHasDuplicateNumbers()
{
int[][] state = {
{1, 1, 3},
{4, 5, 6},
{7, 8, 0}
};
Assertions.assertThrows(IllegalArgumentException.class, () -> new EightPuzzleNode(state));
}
@Test
public void shouldThrowExceptionWhileStateHasNumbersOutOfRange()
{
int[][] state = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Assertions.assertThrows(IllegalArgumentException.class, () -> new EightPuzzleNode(state));
}
@Test
public void shouldReturnTrueWhenTargetReached()
{
int[][] state = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 0}
};
var node = new EightPuzzleNode(state);
var target = new EightPuzzleNode(state);
Assertions.assertTrue(node.isTargetReached(target));
}
@Test
public void shouldReturnFalseWhenTargetNotReached()
{
int[][] actualState = {
{7, 1, 6},
{0, 4, 2},
{3, 5, 8}
};
int[][] targetState = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 0}
};
var node = new EightPuzzleNode(actualState);
var target = new EightPuzzleNode(targetState);
Assertions.assertFalse(node.isTargetReached(target));
}
@Test
public void shouldReturnNonEmptyListOfSuccessors()
{
int[][] state = {
{7, 1, 6},
{0, 4, 2},
{3, 5, 8}
};
var node = new EightPuzzleNode(state);
var successors = node.generateSuccessors();
Assertions.assertFalse(successors.isEmpty());
}
@Test
public void shouldReturnEmptyListOfSuccessors()
{
}
@Test
public void shouldReturnCorrectSuccessors()
{
int[][] state = {
{7, 1, 6},
{0, 4, 2},
{3, 5, 8}
};
var node = new EightPuzzleNode(state);
var successors = node.generateSuccessors();
Assertions.assertEquals(3, successors.size());
int[][] newState1 = {
{0, 1, 6},
{7, 4, 2},
{3, 5, 8}
};
int[][] newState2 = {
{7, 1, 6},
{4, 0, 2},
{3, 5, 8}
};
int[][] newState3 = {
{7, 1, 6},
{3, 4, 2},
{0, 5, 8}
};
Assertions.assertArrayEquals(newState1, successors.get(0).getValue());
Assertions.assertArrayEquals(newState2, successors.get(1).getValue());
Assertions.assertArrayEquals(newState3, successors.get(2).getValue());
}
}