// BoardTest.java package net.sf.gogui.go; import static net.sf.gogui.go.GoColor.BLACK; import static net.sf.gogui.go.GoColor.WHITE; import static net.sf.gogui.go.GoColor.EMPTY; public final class BoardTest extends junit.framework.TestCase { public static void main(String args[]) { junit.textui.TestRunner.run(suite()); } public static junit.framework.Test suite() { return new junit.framework.TestSuite(BoardTest.class); } public void testBothPassed() { Board board = new Board(19); assertFalse(board.bothPassed()); board.play(BLACK, GoPoint.get(0, 0)); assertFalse(board.bothPassed()); board.play(WHITE, null); assertFalse(board.bothPassed()); board.play(BLACK, null); assertTrue(board.bothPassed()); board.play(WHITE, null); assertTrue(board.bothPassed()); } public void testCapture() { Board board = new Board(19); board.play(BLACK, GoPoint.get(0, 0)); board.play(BLACK, GoPoint.get(1, 0)); board.play(WHITE, GoPoint.get(0, 1)); board.play(WHITE, GoPoint.get(1, 1)); board.play(WHITE, GoPoint.get(2, 0)); assertEquals(EMPTY, board.getColor(GoPoint.get(0, 0))); assertEquals(EMPTY, board.getColor(GoPoint.get(1, 0))); assertEquals(WHITE, board.getColor(GoPoint.get(0, 1))); assertEquals(WHITE, board.getColor(GoPoint.get(1, 1))); assertEquals(WHITE, board.getColor(GoPoint.get(2, 0))); assertEquals(2, board.getCaptured(BLACK)); assertEquals(0, board.getCaptured(WHITE)); } public void testContains() { Board board = new Board(19); assertTrue(board.contains(GoPoint.get(0, 0))); assertTrue(board.contains(GoPoint.get(0, 18))); assertTrue(board.contains(GoPoint.get(18, 0))); assertTrue(board.contains(GoPoint.get(18, 18))); assertFalse(board.contains(GoPoint.get(0, 19))); assertFalse(board.contains(GoPoint.get(19, 0))); assertFalse(board.contains(GoPoint.get(19, 19))); assertFalse(board.contains(GoPoint.get(20, 20))); } /** Test Board.getKilled(). */ public void testGetKilled() { Board board = new Board(19); // 4 . . . . . // 3 . . O . . // 2 O O @ O . // 1 @ @ . . . // A B C D E PointList black = new PointList(); PointList white = new PointList(); black.add(GoPoint.get(0, 0)); black.add(GoPoint.get(1, 0)); black.add(GoPoint.get(2, 1)); white.add(GoPoint.get(0, 1)); white.add(GoPoint.get(1, 1)); white.add(GoPoint.get(2, 2)); white.add(GoPoint.get(3, 1)); board.setup(black, white, BLACK); board.play(WHITE, GoPoint.get(2, 0)); ConstPointList killed = board.getKilled(); assertEquals(3, killed.size()); assertTrue(killed.contains(GoPoint.get(0, 0))); assertTrue(killed.contains(GoPoint.get(1, 0))); assertTrue(killed.contains(GoPoint.get(2, 1))); board.undo(); board.play(WHITE, GoPoint.get(3, 0)); assertTrue(board.getKilled().isEmpty()); } /** Test Board.getSuicide(). */ public void testGetSuicide() { Board board = new Board(19); // 4 . . . . // 3 O . . . // 2 @ O . . // 1 . @ O . // A B C D PointList black = new PointList(); PointList white = new PointList(); black.add(GoPoint.get(0, 1)); black.add(GoPoint.get(1, 0)); white.add(GoPoint.get(0, 2)); white.add(GoPoint.get(1, 1)); white.add(GoPoint.get(2, 0)); board.setup(black, white, BLACK); board.play(BLACK, GoPoint.get(0, 0)); ConstPointList suicide = board.getSuicide(); assertEquals(3, suicide.size()); assertTrue(suicide.contains(GoPoint.get(0, 0))); assertTrue(suicide.contains(GoPoint.get(0, 1))); assertTrue(suicide.contains(GoPoint.get(1, 0))); } /** Test Board.isKo(). */ public void testIsKo() { Board board = new Board(19); // 3 . . . . // 2 @ O . . // 1 . @ O . // A B C D PointList black = new PointList(); PointList white = new PointList(); black.add(GoPoint.get(0, 1)); black.add(GoPoint.get(1, 0)); white.add(GoPoint.get(1, 1)); white.add(GoPoint.get(2, 0)); board.setup(black, white, BLACK); assertFalse(board.isKo(GoPoint.get(0, 0))); board.play(WHITE, GoPoint.get(0, 0)); assertTrue(board.isKo(GoPoint.get(1, 0))); board.play(BLACK, GoPoint.get(5, 5)); assertFalse(board.isKo(GoPoint.get(1, 0))); board.undo(); assertTrue(board.isKo(GoPoint.get(1, 0))); } public void testIsSuicide() { Board board = new Board(19); assertFalse(board.isSuicide(WHITE, GoPoint.get(0, 0))); board.play(BLACK, GoPoint.get(0, 1)); assertFalse(board.isSuicide(WHITE, GoPoint.get(0, 0))); board.play(BLACK, GoPoint.get(1, 1)); assertFalse(board.isSuicide(WHITE, GoPoint.get(0, 0))); board.play(BLACK, GoPoint.get(2, 0)); assertFalse(board.isSuicide(WHITE, GoPoint.get(0, 0))); board.play(WHITE, GoPoint.get(1, 0)); assertTrue(board.isSuicide(WHITE, GoPoint.get(0, 0))); board.play(BLACK, GoPoint.get(0, 0)); assertTrue(board.isSuicide(WHITE, GoPoint.get(1, 0))); } public void testGetLastMove() { Board board = new Board(19); assertNull(board.getLastMove()); board.play(BLACK, GoPoint.get(0, 0)); assertEquals(Move.get(BLACK, 0, 0), board.getLastMove()); board.setup(new PointList(GoPoint.get(1, 1)), null, BLACK); assertNull(board.getLastMove()); } /** Test that playing on a occupied field does not fail. Board.play spciefies that a play never fails. Also tests that the old stone is correctly restored. */ public void testPlayOnOccupied() { Board board = new Board(19); GoPoint point = GoPoint.get(0, 0); board.play(WHITE, point); board.play(BLACK, point); board.undo(); assertEquals(WHITE, board.getColor(point)); } /** Test that setup does not cause suicide. */ public void testSetupSuicide() { Board board = new Board(19); board.play(BLACK, GoPoint.get(1, 0)); board.play(BLACK, GoPoint.get(0, 1)); board.setup(null, new PointList(GoPoint.get(0, 0)), BLACK); assertEquals(WHITE, board.getColor(GoPoint.get(0, 0))); } /** Test that setup does not capture anything. */ public void testSetupCapture() { Board board = new Board(19); board.play(BLACK, GoPoint.get(1, 0)); board.play(WHITE, GoPoint.get(2, 0)); board.play(BLACK, GoPoint.get(0, 1)); board.play(WHITE, GoPoint.get(1, 1)); board.setup(null, new PointList(GoPoint.get(0, 0)), BLACK); assertEquals(WHITE, board.getColor(GoPoint.get(0, 0))); } public void testSetupHandicap() { Board board = new Board(19); PointList stones = new PointList(); stones.add(GoPoint.get(4, 4)); stones.add(GoPoint.get(5, 5)); board.setupHandicap(stones); assertEquals(WHITE, board.getToMove()); assertEquals(BLACK, board.getColor(GoPoint.get(4, 4))); assertEquals(BLACK, board.getColor(GoPoint.get(5, 5))); assertEquals(stones, board.getSetup(BLACK)); } public void testToMove() { Board board = new Board(19); assertEquals(BLACK, board.getToMove()); board.play(BLACK, GoPoint.get(0, 0)); assertEquals(WHITE, board.getToMove()); board.setup(new PointList(GoPoint.get(1, 1)), null, BLACK); assertEquals(BLACK, board.getToMove()); } public void testUndo() { Board board = new Board(19); board.play(BLACK, GoPoint.get(0, 0)); board.undo(); assertEquals(EMPTY, board.getColor(GoPoint.get(0, 0))); assertEquals(BLACK, board.getToMove()); } }