Пример #1
0
class TestPuzzleState(unittest.TestCase):
    '''
    Performs logical tests on PuzzleState
    '''

    def setUp(self):
        self.fifteenPuzzle = PuzzleState(
                dimensions=(4, 4),
                gamestate=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, None],
                parent=None,
                lastMove=None)

    def testDimensionsInput(self):
        expected = (4, 4)
        observed = self.fifteenPuzzle.dimensions
        m = "Dimensions weren't what we passed in. Make sure self.dimensions is a tuple of ints.\n\nObserved: {}\nExpected: {}"
        self.assertEquals(observed, expected, m.format(observed, expected))

    def testItemCount(self):
        x, y = self.fifteenPuzzle.dimensions
        observedList = self.fifteenPuzzle.gamestate
        observedCount = len(observedList)
        observedDimensions = self.fifteenPuzzle.dimensions
        expectedCount = x * y
        m = '''Too many or too few elements in gamestate for current dimensions.

Observed gamestate: {} ({} elements)
Dimensions: {}'''
        message = m.format(observedList, observedCount, observedDimensions)
        self.assertEquals(observedCount, expectedCount, message)

    def testCoordToIndex(self):
        m = '''Wrong index given from coordinate. Check coordToIndex() method.

Coordinates given: {}
Observed index: {}
Expected index: {}'''

        coord = (0, 2)
        expectedIndex = 8
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (0, 0)
        expectedIndex = 0
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (1, 2)
        expectedIndex = 9
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (2, 2)
        expectedIndex = 10
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (3, 3)
        expectedIndex = 15
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (3, 2)
        expectedIndex = 11
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (2, 0)
        expectedIndex = 2
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

    def testIndexToCoord(self):
        m = '''Wrong coordinate given from index. Check indexToCoord() method.

Index given: {}
Observed coordinate: {}
Expected coordinate: {}'''
        index = 3
        expectedCoord = (3, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 1
        expectedCoord = (1, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 0
        expectedCoord = (0, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 8
        expectedCoord = (0, 2)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 2
        expectedCoord = (2, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 15
        expectedCoord = (3, 3)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

    def testEquals(self):
        m = "PuzzleState did not equal itself! Check your __eq__ method.\n"
        self.assertEquals(self.fifteenPuzzle, self.fifteenPuzzle, m)

    def testStr(self):
        m = '''Something went wrong when printing PuzzleState! Check your __str__ method.\n\nPrint call output:
{}'''
        observedVisual = str(self.fifteenPuzzle)
        self.assertIsInstance(observedVisual, str, m.format(observedVisual))

    def testMoveFunctions(self):
        controlState = PuzzleState(
                dimensions=(4, 4),
                gamestate=[1, 2, 3, 4, 5, 6, None, 7, 8, 9, 10, 11, 12, 13, 14, 15],
                parent=None,
                lastMove=None)
        m = '''Move {0} returned an incorrect PuzzleState (or None). Check your move{0} method.

Input:
{1}

Observed:
{2}

Expected:
{3}'''

        upState = PuzzleState(
                dimensions=(4, 4),
                gamestate=[1, 2, None, 4, 5, 6, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15],
                parent=None,
                lastMove=None)
        observedUpState = controlState.moveUp()
        message = m.format("Up", controlState, observedUpState, upState)
        self.assertEquals(upState, observedUpState, message)

        downState = PuzzleState(
                dimensions=(4, 4),
                gamestate=[1, 2, 3, 4, 5, 6, 10, 7, 8, 9, None, 11, 12, 13, 14, 15],
                parent=None,
                lastMove=None)
        observedDownState = controlState.moveDown()
        message = m.format("Down", controlState, observedDownState, downState)
        self.assertEquals(downState, observedDownState, message)

        leftState = PuzzleState(
                dimensions=(4, 4),
                gamestate=[1, 2, 3, 4, 5, None, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
                parent=None,
                lastMove=None)
        observedLeftState = controlState.moveLeft()
        message = m.format("Left", controlState, observedLeftState, leftState)
        self.assertEquals(leftState, observedLeftState, message)

        rightState = PuzzleState(
                dimensions=(4, 4),
                gamestate=[1, 2, 3, 4, 5, 6, 7, None, 8, 9, 10, 11, 12, 13, 14, 15],
                parent=None,
                lastMove=None)
        observedRightState = controlState.moveRight()
        message = m.format("Right", controlState, observedRightState, rightState)
        self.assertEquals(rightState, observedRightState, message)
Пример #2
0
class TestPuzzleState(unittest.TestCase):
    '''
    Performs logical tests on PuzzleState
    '''
    def setUp(self):
        self.fifteenPuzzle = PuzzleState(dimensions=(4, 4),
                                         gamestate=[
                                             1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
                                             12, 13, 14, 15, None
                                         ],
                                         parent=None,
                                         lastMove=None)

    def testDimensionsInput(self):
        expected = (4, 4)
        observed = self.fifteenPuzzle.dimensions
        m = "Dimensions weren't what we passed in. Make sure self.dimensions is a tuple of ints.\n\nObserved: {}\nExpected: {}"
        self.assertEquals(observed, expected, m.format(observed, expected))

    def testItemCount(self):
        x, y = self.fifteenPuzzle.dimensions
        observedList = self.fifteenPuzzle.gamestate
        observedCount = len(observedList)
        observedDimensions = self.fifteenPuzzle.dimensions
        expectedCount = x * y
        m = '''Too many or too few elements in gamestate for current dimensions.

Observed gamestate: {} ({} elements)
Dimensions: {}'''
        message = m.format(observedList, observedCount, observedDimensions)
        self.assertEquals(observedCount, expectedCount, message)

    def testCoordToIndex(self):
        m = '''Wrong index given from coordinate. Check coordToIndex() method.

Coordinates given: {}
Observed index: {}
Expected index: {}'''

        coord = (0, 2)
        expectedIndex = 8
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (0, 0)
        expectedIndex = 0
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (1, 2)
        expectedIndex = 9
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (2, 2)
        expectedIndex = 10
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (3, 3)
        expectedIndex = 15
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (3, 2)
        expectedIndex = 11
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

        coord = (2, 0)
        expectedIndex = 2
        observedIndex = self.fifteenPuzzle.coordToIndex(coord)
        message = m.format(coord, observedIndex, expectedIndex)
        self.assertEquals(observedIndex, expectedIndex, message)

    def testIndexToCoord(self):
        m = '''Wrong coordinate given from index. Check indexToCoord() method.

Index given: {}
Observed coordinate: {}
Expected coordinate: {}'''
        index = 3
        expectedCoord = (3, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 1
        expectedCoord = (1, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 0
        expectedCoord = (0, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 8
        expectedCoord = (0, 2)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 2
        expectedCoord = (2, 0)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

        index = 15
        expectedCoord = (3, 3)
        observedCoord = self.fifteenPuzzle.indexToCoord(index)
        message = m.format(index, observedCoord, expectedCoord)
        self.assertEquals(observedCoord, expectedCoord, message)

    def testEquals(self):
        m = "PuzzleState did not equal itself! Check your __eq__ method.\n"
        self.assertEquals(self.fifteenPuzzle, self.fifteenPuzzle, m)

    def testStr(self):
        m = '''Something went wrong when printing PuzzleState! Check your __str__ method.\n\nPrint call output:
{}'''
        observedVisual = str(self.fifteenPuzzle)
        self.assertIsInstance(observedVisual, str, m.format(observedVisual))

    def testMoveFunctions(self):
        controlState = PuzzleState(dimensions=(4, 4),
                                   gamestate=[
                                       1, 2, 3, 4, 5, 6, None, 7, 8, 9, 10, 11,
                                       12, 13, 14, 15
                                   ],
                                   parent=None,
                                   lastMove=None)
        m = '''Move {0} returned an incorrect PuzzleState (or None). Check your move{0} method.

Input:
{1}

Observed:
{2}

Expected:
{3}'''

        upState = PuzzleState(dimensions=(4, 4),
                              gamestate=[
                                  1, 2, None, 4, 5, 6, 3, 7, 8, 9, 10, 11, 12,
                                  13, 14, 15
                              ],
                              parent=None,
                              lastMove=None)
        observedUpState = controlState.moveUp()
        message = m.format("Up", controlState, observedUpState, upState)
        self.assertEquals(upState, observedUpState, message)

        downState = PuzzleState(dimensions=(4, 4),
                                gamestate=[
                                    1, 2, 3, 4, 5, 6, 10, 7, 8, 9, None, 11,
                                    12, 13, 14, 15
                                ],
                                parent=None,
                                lastMove=None)
        observedDownState = controlState.moveDown()
        message = m.format("Down", controlState, observedDownState, downState)
        self.assertEquals(downState, observedDownState, message)

        leftState = PuzzleState(dimensions=(4, 4),
                                gamestate=[
                                    1, 2, 3, 4, 5, None, 6, 7, 8, 9, 10, 11,
                                    12, 13, 14, 15
                                ],
                                parent=None,
                                lastMove=None)
        observedLeftState = controlState.moveLeft()
        message = m.format("Left", controlState, observedLeftState, leftState)
        self.assertEquals(leftState, observedLeftState, message)

        rightState = PuzzleState(dimensions=(4, 4),
                                 gamestate=[
                                     1, 2, 3, 4, 5, 6, 7, None, 8, 9, 10, 11,
                                     12, 13, 14, 15
                                 ],
                                 parent=None,
                                 lastMove=None)
        observedRightState = controlState.moveRight()
        message = m.format("Right", controlState, observedRightState,
                           rightState)
        self.assertEquals(rightState, observedRightState, message)