content: package aima.test.core.unit.environment.cellworld;
  
  import org.junit.Assert;
  import org.junit.Before;
  import org.junit.Test;
  
  import aima.core.environment.cellworld.Cell;
  import aima.core.environment.cellworld.CellWorld;
  import aima.core.environment.cellworld.CellWorldAction;
  import aima.core.environment.cellworld.CellWorldFactory;
  
  /**
   * @author Ravi Mohan
   * @author Ciaran O'Reilly
   */
  public class CellWorldTest {
  
  	private CellWorld<Double> cw;
  
  	@Before
  	public void setUp() {
  		cw = CellWorldFactory.createCellWorldForFig17_1();
  	}
  
  	@Test
  	public void testNumberOfCells() {
  		Assert.assertEquals(11, cw.getCells().size());
  	}
  	
  	@Test
  	public void testMoveUpIntoAdjacentCellChangesPositionCorrectly() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 1),
  				CellWorldAction.Up);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(2, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveUpIntoWallLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 3),
  				CellWorldAction.Up);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(3, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveUpIntoRemovedCellLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(2, 1),
  				CellWorldAction.Up);
  		Assert.assertEquals(2, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  	
  	@Test
  	public void testMoveDownIntoAdjacentCellChangesPositionCorrectly() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 2),
  				CellWorldAction.Down);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveDownIntoWallLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 1),
  				CellWorldAction.Down);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveDownIntoRemovedCellLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(2, 3),
  				CellWorldAction.Down);
  		Assert.assertEquals(2, sDelta.getX());
  		Assert.assertEquals(3, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveLeftIntoAdjacentCellChangesPositionCorrectly() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(2, 1),
  				CellWorldAction.Left);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveLeftIntoWallLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 1),
  				CellWorldAction.Left);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveLeftIntoRemovedCellLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(3, 2),
  				CellWorldAction.Left);
  		Assert.assertEquals(3, sDelta.getX());
  		Assert.assertEquals(2, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveRightIntoAdjacentCellChangesPositionCorrectly() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 1),
  				CellWorldAction.Right);
  		Assert.assertEquals(2, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveRightIntoWallLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(4, 1),
  				CellWorldAction.Right);
  		Assert.assertEquals(4, sDelta.getX());
  		Assert.assertEquals(1, sDelta.getY());
  	}
  
  	@Test
  	public void testMoveRightIntoRemovedCellLeavesPositionUnchanged() {
  		Cell<Double> sDelta = cw.result(cw.getCellAt(1, 2),
  				CellWorldAction.Right);
  		Assert.assertEquals(1, sDelta.getX());
  		Assert.assertEquals(2, sDelta.getY());
  	}
  }
  