content: package aima.test.core.unit.environment.eightpuzzle;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.junit.Assert;
  import org.junit.Before;
  import org.junit.Test;
  
  import aima.core.environment.eightpuzzle.EightPuzzleBoard;
  import aima.core.util.datastructure.XYLocation;
  
  /**
   * @author Ravi Mohan
   * @author Ruediger Lunde
   * 
   */
  public class EightPuzzleBoardTest {
  	EightPuzzleBoard board;
  
  	@Before
  	public void setUp() {
  		board = new EightPuzzleBoard();
  	}
  
  	@Test
  	public void testGetBoard() {
  		int[] expected = new int[] { 5, 4, 0, 6, 1, 8, 7, 3, 2 };
  		int[] boardRepr = board.getState();
  		Assert.assertEquals(expected[0], boardRepr[0]);
  		Assert.assertEquals(expected[1], boardRepr[1]);
  		Assert.assertEquals(expected[2], boardRepr[2]);
  		Assert.assertEquals(expected[3], boardRepr[3]);
  		Assert.assertEquals(expected[4], boardRepr[4]);
  		Assert.assertEquals(expected[5], boardRepr[5]);
  		Assert.assertEquals(expected[6], boardRepr[6]);
  		Assert.assertEquals(expected[7], boardRepr[7]);
  		Assert.assertEquals(expected[8], boardRepr[8]);
  	}
  
  	@Test
  	public void testGetLocation() {
  		Assert.assertEquals(new XYLocation(2, 0), board.getLocationOf(0));
  		Assert.assertEquals(new XYLocation(1, 1), board.getLocationOf(1));
  		Assert.assertEquals(new XYLocation(2, 2), board.getLocationOf(2));
  		Assert.assertEquals(new XYLocation(1, 2), board.getLocationOf(3));
  		Assert.assertEquals(new XYLocation(1, 0), board.getLocationOf(4));
  		Assert.assertEquals(new XYLocation(0, 0), board.getLocationOf(5));
  		Assert.assertEquals(new XYLocation(0, 1), board.getLocationOf(6));
  		Assert.assertEquals(new XYLocation(0, 2), board.getLocationOf(7));
  		Assert.assertEquals(new XYLocation(2, 1), board.getLocationOf(8));
  	}
  
  	@Test
  	public void testGetValueAt() {
  		Assert.assertEquals(5, board.getValueAt(new XYLocation(0, 0)));
  		Assert.assertEquals(4, board.getValueAt(new XYLocation(1, 0)));
  		Assert.assertEquals(0, board.getValueAt(new XYLocation(2, 0)));
  		Assert.assertEquals(6, board.getValueAt(new XYLocation(0, 1)));
  		Assert.assertEquals(1, board.getValueAt(new XYLocation(1, 1)));
  		Assert.assertEquals(8, board.getValueAt(new XYLocation(2, 1)));
  		Assert.assertEquals(7, board.getValueAt(new XYLocation(0, 2)));
  		Assert.assertEquals(3, board.getValueAt(new XYLocation(1, 2)));
  		Assert.assertEquals(2, board.getValueAt(new XYLocation(2, 2)));
  	}
  
  	@Test
  	public void testGetPositions() {
  		List<XYLocation> actual = board.getPositions();
  		Assert.assertEquals("[(2, 0), (1, 1), (2, 2), (1, 2), (1, 0), (0, 0), (0, 1), (0, 2), (2, 1)]",
  				actual.toString());
  	}
  
  	@Test
  	public void testSetBoard() {
  		List<XYLocation> passedIn = new ArrayList<>();
  		passedIn.add(new XYLocation(1, 1));
  		passedIn.add(new XYLocation(0, 2));
  		passedIn.add(new XYLocation(2, 2));
  		passedIn.add(new XYLocation(2, 1));
  		passedIn.add(new XYLocation(0, 1));
  		passedIn.add(new XYLocation(0, 0));
  		passedIn.add(new XYLocation(1, 0));
  		passedIn.add(new XYLocation(2, 0));
  		passedIn.add(new XYLocation(1, 2));
  		board.setBoard(passedIn);
  		Assert.assertEquals(new XYLocation(1, 1), board.getLocationOf(0));
  		Assert.assertEquals(new XYLocation(0, 2), board.getLocationOf(1));
  	}
  }
  