diff options
author | Joe Lee <joe@jotaro.com> | 2008-03-11 05:18:54 (GMT) |
---|---|---|
committer | Joe Lee <joe@jotaro.com> | 2008-03-11 05:18:54 (GMT) |
commit | 0044b6872ca1cd38e96c81d7f3ce21c5689b7f0c (patch) | |
tree | f95248f4cb71f17a128bb7903b07342fd4265def /boardgentest.py |
Initial import
Diffstat (limited to 'boardgentest.py')
-rwxr-xr-x | boardgentest.py | 356 |
1 files changed, 356 insertions, 0 deletions
diff --git a/boardgentest.py b/boardgentest.py new file mode 100755 index 0000000..a26e5f3 --- /dev/null +++ b/boardgentest.py @@ -0,0 +1,356 @@ +#!/usr/bin/env python +# +# Copyright (C) 2007, Joseph C. Lee +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import random +import unittest + +import board +import boardgen + +class TestEnumerateOneCellChanges(unittest.TestCase): + + def test1(self): + b = board.Board() + expChanges = [boardgen._InsertColumnChange(0, 1)] + changes = boardgen._enumerate_one_cell_changes(b, (1, 1)) + self._assertChanges(changes, expChanges) + + def test2(self): + b = board.Board() + expChanges = [] + changes = boardgen._enumerate_one_cell_changes(b, (0, 1)) + self._assertChanges(changes, expChanges) + + def test3(self): + b = board.Board() + expChanges = [] + changes = boardgen._enumerate_one_cell_changes(b, (1, 0)) + self._assertChanges(changes, expChanges) + + def test4(self): + b = _make_board(""".1. + 211""") + cell = boardgen._InsertCellChange + col = boardgen._InsertColumnChange + expChanges = [col(0, 1), + col(1, 1), + col(2, 1), + col(3, 1), + cell(0, 0), + cell(0, 1), + cell(1, 0), + cell(1, 1), + cell(1, 2), + cell(2, 0), + cell(2, 1)] + changes = boardgen._enumerate_one_cell_changes(b, (10, 10)) + self._assertChanges(changes, expChanges) + + def _assertChanges(self, changes, expChanges): + self.assertEqual(len(changes), len(expChanges)) + for change in changes: + self.assert_(change in expChanges) + for change in expChanges: + self.assert_(change in changes) + +class TestChangeIsColorable(unittest.TestCase): + pass # TODO + +class TestMakeChange(unittest.TestCase): + def testCol1(self): + before = "" + change = boardgen._InsertColumnChange(0, 1) + after = """*""" + self._assertMakeChange(before, change, after) + + def testCol2(self): + before = """1""" + change = boardgen._InsertColumnChange(0, 1) + after = """*1""" + self._assertMakeChange(before, change, after) + + def testCol3(self): + before = """1 + 1""" + change = boardgen._InsertColumnChange(1, 1) + after = """1. + 1*""" + self._assertMakeChange(before, change, after) + + def testCol4(self): + before = """1 + 1""" + change = boardgen._InsertColumnChange(2, 3) + after = """..* + 1.* + 1.*""" + self._assertMakeChange(before, change, after) + + def testCol5(self): + before = """.1.3 + 2113""" + change = boardgen._InsertColumnChange(2, 2) + after = """.1*.3 + 21*13""" + self._assertMakeChange(before, change, after) + + def testCell1(self): + before = "" + change = boardgen._InsertCellChange(0, 0) + after = "*" + self._assertMakeChange(before, change, after) + + def testCell2(self): + before = """1""" + change = boardgen._InsertCellChange(0, 0) + after = """1 + *""" + self._assertMakeChange(before, change, after) + + def testCell3(self): + before = """1""" + change = boardgen._InsertCellChange(0, 1) + after = """* + 1""" + self._assertMakeChange(before, change, after) + + def testCell4(self): + before = """1 + 2 + 3 + * + 4 + 5""" + change = boardgen._InsertCellChange(0, 1) + after = """1 + 2 + 3 + 4 + * + * + 5""" + self._assertMakeChange(before, change, after) + + def testCell5(self): + before = """1 + 2 + 3 + * + 4 + 5""" + change = boardgen._InsertCellChange(0, 2) + after = """1 + 2 + 3 + * + * + 4 + 5""" + self._assertMakeChange(before, change, after) + + def testCell6(self): + before = """1 + 2 + 3 + * + 4 + 5""" + change = boardgen._InsertCellChange(0, 3) + after = """1 + 2 + 3 + * + * + 4 + 5""" + self._assertMakeChange(before, change, after) + + def testCell7(self): + before = """1 + 2 + 3 + * + 4 + 5""" + change = boardgen._InsertCellChange(0, 4) + after = """1 + 2 + * + 3 + * + 4 + 5""" + self._assertMakeChange(before, change, after) + + def testCell8(self): + before = """1 + * + * + * + * + 5""" + change = boardgen._InsertCellChange(0, 0) + after = """1 + 5 + * + * + * + * + *""" + self._assertMakeChange(before, change, after) + + def _assertMakeChange(self, before, change, after): + b = _make_board(before) + expBoard = _make_board(after) + boardgen._make_change(b, change) + self.assertEqual(b, expBoard) + +class TestChangeIsColorable(unittest.TestCase): + def test1(self): + b = _make_board("""""") + change = boardgen._InsertCellChange(0, 0) + self.assert_(boardgen._change_is_colorable(b, change, 1)) + + def test2(self): + b = _make_board("""1""") + change = boardgen._InsertCellChange(0, 0) + self.failIf(boardgen._change_is_colorable(b, change, 1)) + + def test3(self): + b = _make_board("""1""") + change = boardgen._InsertCellChange(0, 0) + self.assert_(boardgen._change_is_colorable(b, change, 2)) + + def test4(self): + b = _make_board("""1.2 + 1*3""") + change = boardgen._InsertCellChange(1, 0) + self.failIf(boardgen._change_is_colorable(b, change, 2)) + + def test5(self): + b = _make_board("""1.2 + 1*3""") + change = boardgen._InsertCellChange(1, 0) + self.failIf(boardgen._change_is_colorable(b, change, 3)) + +class TestGetCellChanges(unittest.TestCase): + + def test1(self): + s = """""" + expChanges = [] + self._assertCellChanges(s, expChanges, (0, 0)) + + def test2(self): + s = """1""" + expChanges = [] + self._assertCellChanges(s, expChanges, (1, 2)) + + def test3(self): + s = """*""" + expChanges = [boardgen._InsertCellChange(0, 1)] + self._assertCellChanges(s, expChanges, (1, 2)) + + def test4(self): + s = """.** + 12*""" + expChanges = [boardgen._InsertCellChange(0, 1), + boardgen._InsertCellChange(1, 0), + boardgen._InsertCellChange(1, 2), + boardgen._InsertCellChange(2, 2)] + self._assertCellChanges(s, expChanges, (3, 3)) + + def test5(self): + s = """.*. + .1. + 111""" + expChanges = [boardgen._InsertCellChange(1, 1), + boardgen._InsertCellChange(1, 3)] + self._assertCellChanges(s, expChanges, (3, 4)) + + def _assertCellChanges(self, s, expChanges, board_size): + b = _make_board(s) + (h_changes, v_changes) = boardgen._get_cell_changes(b, board_size) + changes = h_changes + v_changes + print changes + self.assertEqual(len(changes), len(expChanges)) + for change in changes: + self.assert_(change in expChanges) + for change in expChanges: + self.assert_(change in changes) + +class TestGetColChanges(unittest.TestCase): + + def test1(self): + s = """""" + expChanges = [] + self._assertCellChanges(s, expChanges, (2, 2)) + + def test2(self): + s = """1. + 12""" + expChanges = [] + self._assertCellChanges(s, expChanges, (3, 3)) + + def test3(self): + s = """*. + 12""" + expChanges = [boardgen._InsertColumnChange(0, 2), + boardgen._InsertColumnChange(1, 2)] + self._assertCellChanges(s, expChanges, (3, 3)) + + def test4(self): + s = """*. + **""" + expChanges = [boardgen._InsertColumnChange(0, 2), + boardgen._InsertColumnChange(1, 2), + boardgen._InsertColumnChange(2, 1)] + self._assertCellChanges(s, expChanges, (3, 3)) + + def _assertCellChanges(self, s, expChanges, board_size): + b = _make_board(s) + changes = boardgen._get_col_changes(b, board_size) + self.assertEqual(len(changes), len(expChanges)) + for change in changes: + self.assert_(change in expChanges) + for change in expChanges: + self.assert_(change in changes) + +def _make_board(s): + b = board.Board() + # Constructs a board using the given string. + lines = [x.strip() for x in s.strip().splitlines()] + + if len(lines) == 0: + return b + + # Make sure all lines are the same length. + lens = [len(x) for x in lines] + assert len(set(lens)) == 1 + + val_map = {'.' : None, '*' : -1} + for i in range(1, 9 + 1): + val_map[str(i)] = i + + for (i, line) in enumerate(reversed(lines)): + for (j, ch) in enumerate(line): + b.set_value(j, i, val_map[ch]) + + return b + +if __name__ == '__main__': + unittest.main() |