package aima.test.core.unit.environment.eightpuzzle;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import aima.core.environment.eightpuzzle.EightPuzzleBoard;
/**
* @author Ravi Mohan
*
*/
public class EightPuzzleBoardMoveTest {
EightPuzzleBoard board;
@Before
public void setUp() {
board = new EightPuzzleBoard(new int[] { 0, 5, 4, 6, 1, 8, 7, 3, 2 });
}
// Position 1
@Test
public void testPosition1Movabilty() {
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition1MoveUp() {
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 0, 5, 4, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition1MoveDown() {
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 0, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition1MoveLeft() {
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 0, 5, 4, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition1MoveRight() {
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 0, 4, 6, 1, 8,
7, 3, 2 }), board);
}
// Position 2
@Test
public void testPosition2Movabilty() {
setGapToPosition2();
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition2MoveUp() {
// { 5, 0, 4, 6, 1, 8, 7, 3, 2 }
setGapToPosition2();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 0, 4, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition2MoveDown() {
// { 5, 0, 4, 6, 1, 8, 7, 3, 2 }
setGapToPosition2();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 1, 4, 6, 0, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition2MoveLeft() {
// { 5, 0, 4, 6, 1, 8, 7, 3, 2 }
setGapToPosition2();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 0, 5, 4, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition2MoveRight() {
// { 5, 0, 4, 6, 1, 8, 7, 3, 2 }
setGapToPosition2();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 4, 0, 6, 1, 8,
7, 3, 2 }), board);
}
// Position 3
@Test
public void testPosition3Movabilty() {
setGapToPosition3();
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition3MoveUp() {
// { 5, 4, 0, 6, 1, 8, 7, 3, 2 }
setGapToPosition3();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 4, 0, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition3MoveDown() {
// { 5, 4, 0, 6, 1, 8, 7, 3, 2 }
setGapToPosition3();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 4, 8, 6, 1, 0,
7, 3, 2 }), board);
}
@Test
public void testPosition3MoveLeft() {
// { 5, 4, 0, 6, 1, 8, 7, 3, 2 }
setGapToPosition3();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 0, 4, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition3MoveRight() {
// { 5, 4, 0, 6, 1, 8, 7, 3, 2 }
setGapToPosition3();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 5, 4, 0, 6, 1, 8,
7, 3, 2 }), board);
}
// Position 4
@Test
public void testPosition4Movabilty() {
setGapToPosition4();
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition4MoveUp() {
// { 6, 5, 4, 0, 1, 8, 7, 3, 2 }
setGapToPosition4();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 0, 5, 4, 6, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition4MoveDown() {
// { 6, 5, 4, 0, 1, 8, 7, 3, 2 }
setGapToPosition4();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
0, 3, 2 }), board);
}
@Test
public void testPosition4MoveLeft() {
// { 6, 5, 4, 0, 1, 8, 7, 3, 2 }
setGapToPosition4();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 0, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition4MoveRight() {
// { 6, 5, 4, 0, 1, 8, 7, 3, 2 }
setGapToPosition4();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 1, 0, 8,
7, 3, 2 }), board);
}
// Position 5
@Test
public void testPosition5Movabilty() {
setGapToPosition5();
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition5MoveUp() {
// { 6, 5, 4, 1, 0, 8, 7, 3, 2 }
setGapToPosition5();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 0, 4, 1, 5, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition5MoveDown() {
// { 6, 5, 4, 1, 0, 8, 7, 3, 2 }
setGapToPosition5();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 1, 3, 8,
7, 0, 2 }), board);
}
@Test
public void testPosition5MoveLeft() {
// { 6, 5, 4, 1, 0, 8, 7, 3, 2 }
setGapToPosition5();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 0, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition5MoveRight() {
// { 6, 5, 4, 1, 0, 8, 7, 3, 2 }
setGapToPosition5();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 1, 8, 0,
7, 3, 2 }), board);
}
// Position 6
@Test
public void testPosition6Movabilty() {
setGapToPosition6();
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition6MoveUp() {
// { 6, 5, 4, 1, 8, 0, 7, 3, 2 }
setGapToPosition6();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 0, 1, 8, 4,
7, 3, 2 }), board);
}
@Test
public void testPosition6MoveDown() {
// { 6, 5, 4, 1, 8, 0, 7, 3, 2 }
setGapToPosition6();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 1, 8, 2,
7, 3, 0 }), board);
}
@Test
public void testPosition6MoveLeft() {
// { 6, 5, 4, 1, 8, 0, 7, 3, 2 }
setGapToPosition6();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 1, 0, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition6MoveRight() {
// { 6, 5, 4, 1, 8, 0, 7, 3, 2 }
setGapToPosition6();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 1, 8, 0,
7, 3, 2 }), board);
}
// Position 7
@Test
public void testPosition7Movabilty() {
setGapToPosition7();
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition7MoveUp() {
// { 6, 5, 4, 7, 1, 8, 0, 3, 2 }
setGapToPosition7();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 0, 1, 8,
7, 3, 2 }), board);
}
@Test
public void testPosition7MoveDown() {
// { 6, 5, 4, 7, 1, 8, 0, 3, 2 }
setGapToPosition7();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
0, 3, 2 }), board);
}
@Test
public void testPosition7MoveLeft() {
// { 6, 5, 4, 7, 1, 8, 0, 3, 2 }
setGapToPosition7();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
0, 3, 2 }), board);
}
@Test
public void testPosition7MoveRight() {
// { 6, 5, 4, 7, 1, 8, 0, 3, 2 }
setGapToPosition7();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
3, 0, 2 }), board);
}
// Position 8
@Test
public void testPosition8Movabilty() {
setGapToPosition8();
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition8MoveUp() {
// { 6, 5, 4, 7, 1, 8, 3, 0, 2 }
setGapToPosition8();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 0, 8,
3, 1, 2 }), board);
}
@Test
public void testPosition8MoveDown() {
// { 6, 5, 4, 7, 1, 8, 3, 0, 2 }
setGapToPosition8();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
3, 0, 2 }), board);
}
@Test
public void testPosition8MoveLeft() {
// { 6, 5, 4, 7, 1, 8, 3, 0, 2 }
setGapToPosition8();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
0, 3, 2 }), board);
}
@Test
public void testPosition8MoveRight() {
// { 6, 5, 4, 7, 1, 8, 3, 0, 2 }
setGapToPosition8();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
3, 2, 0 }), board);
}
// Position 9
@Test
public void testPosition9Movabilty() {
setGapToPosition9();
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.UP));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.DOWN));
Assert.assertEquals(true, board.canMoveGap(EightPuzzleBoard.LEFT));
Assert.assertEquals(false, board.canMoveGap(EightPuzzleBoard.RIGHT));
}
@Test
public void testPosition9MoveUp() {
// { 6, 5, 4, 7, 1, 8, 3, 2, 0 }
setGapToPosition9();
board.moveGapUp();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 0,
3, 2, 8 }), board);
}
@Test
public void testPosition9MoveDown() {
// { 6, 5, 4, 7, 1, 8, 3, 2, 0 }
setGapToPosition9();
board.moveGapDown();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
3, 2, 0 }), board);
}
@Test
public void testPosition9MoveLeft() {
// { 6, 5, 4, 7, 1, 8, 3, 2, 0 }
setGapToPosition9();
board.moveGapLeft();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
3, 0, 2 }), board);
}
@Test
public void testPosition9MoveRight() {
// { 6, 5, 4, 7, 1, 8, 3, 2, 0 }
setGapToPosition9();
board.moveGapRight();
Assert.assertEquals(new EightPuzzleBoard(new int[] { 6, 5, 4, 7, 1, 8,
3, 2, 0 }), board);
}
//
// PRIVATE METHODS
//
private void setGapToPosition2() {
board.moveGapRight();
}
private void setGapToPosition3() {
board.moveGapRight();
board.moveGapRight();
}
private void setGapToPosition4() {
board.moveGapDown();
}
private void setGapToPosition5() {
// { 6, 5, 4, 1, 0, 8, 7, 3, 2 }
board.moveGapDown();
board.moveGapRight();
}
private void setGapToPosition6() {
// { 6, 5, 4, 1, 8, 0, 7, 3, 2 }
board.moveGapDown();
board.moveGapRight();
board.moveGapRight();
}
private void setGapToPosition7() {
// { 6, 5, 4, 7, 1, 8, 0, 3, 2 }
board.moveGapDown();
board.moveGapDown();
}
private void setGapToPosition8() {
// { 6, 5, 4, 7, 1, 8, 3, 0, 2 }
board.moveGapDown();
board.moveGapDown();
board.moveGapRight();
}
private void setGapToPosition9() {
// { 6, 5, 4, 7, 1, 8, 3, 2, 0 }
board.moveGapDown();
board.moveGapDown();
board.moveGapRight();
board.moveGapRight();
}
}