Example #1
0
 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)
Example #2
0
    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)
Example #3
0
 def setUp(self):
     self.eightInitial = PuzzleState((3, 3), [2, 8, 3, 1, 6, 4, 7, None, 5],
                                     None, None)
     self.eightGoal = PuzzleState((3, 3), [None, 2, 3, 1, 8, 6, 7, 5, 4],
                                  None, None)
     self.eightSolver = PuzzleSolver(self.eightInitial, self.eightGoal)
     self.redundantSolver = PuzzleSolver(self.eightInitial,
                                         self.eightInitial)
     self.cardinal = {
         "north": "up",
         "south": "down",
         "west": "left",
         "east": "right",
     }
Example #4
0
    def testMoveFunctions(self):
        controlState = PuzzleState(dimensions=(3, 3),
                                   gamestate=[1, 2, 3, 4, None, 5, 6, 7, 8],
                                   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=(3, 3),
                              gamestate=[1, None, 3, 4, 2, 5, 6, 7, 8],
                              parent=None,
                              lastMove=None)
        observedUpState = controlState.moveUp()
        message = m.format("Up", controlState, observedUpState, upState)
        self.assertEquals(upState, observedUpState, message)

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

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

        rightState = PuzzleState(dimensions=(3, 3),
                                 gamestate=[1, 2, 3, 4, 5, None, 6, 7, 8],
                                 parent=None,
                                 lastMove=None)
        observedRightState = controlState.moveRight()
        message = m.format("Right", controlState, observedRightState,
                           rightState)
        self.assertEquals(rightState, observedRightState, message)
Example #5
0
    def setUp(self):

        initialGamestate = [
            1, 2, 3, 4, 5, None, 6, 8, 9, 10, 7, 12, 13, 14, 11, 15
        ]

        goalGamestate = [
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, None
        ]

        self.fifteenInitial = PuzzleState((4, 4), initialGamestate, None, None)
        self.fifteenGoal = PuzzleState((4, 4), goalGamestate, None, None)
        self.fifteenSolver = PuzzleSolver(self.fifteenInitial,
                                          self.fifteenGoal)
        self.redundantSolver = PuzzleSolver(self.fifteenInitial,
                                            self.fifteenInitial)
        self.cardinal = {
            "north": "up",
            "south": "down",
            "west": "left",
            "east": "right",
        }
Example #6
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)
Example #7
0
 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)
Example #8
0
 def setUp(self):
     self.eightPuzzle = PuzzleState(
         dimensions=(3, 3), gamestate=[1, 2, 3, 4, 5, 6, 7, 8, None], parent=None, lastMove=None
     )
Example #9
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)
Example #10
0
 def setUp(self):
     self.eightPuzzle = PuzzleState(
         dimensions=(3, 3),
         gamestate=[1, 2, 3, 4, 5, 6, 7, 8, None],
         parent=None,
         lastMove=None)