def test_possible_moves_2x4():
    setup_1 = [0, 2, 3, 1, 4, 6, 7, 5]
    setup_2 = [1, 2, 3, 0, 4, 6, 7, 5]
    setup_3 = [1, 2, 3, 4, 0, 6, 7, 5]
    setup_4 = [1, 2, 3, 4, 5, 6, 7, 0]
    setup_5 = [1, 2, 3, 4, 5, 0, 7, 6]

    puzzle_1 = Puzzle(2, setup_1)
    possible_moves_p1 = [
        'move_wrapping', 'move_diagonal_short', 'move_diagonal_long',
        'move_right', 'move_down'
    ]
    assert puzzle_1.possible_moves() == possible_moves_p1

    puzzle_2 = Puzzle(2, setup_2)
    possible_moves_p2 = [
        'move_wrapping', 'move_diagonal_short', 'move_diagonal_long',
        'move_left', 'move_down'
    ]
    assert puzzle_2.possible_moves() == possible_moves_p2

    puzzle_3 = Puzzle(2, setup_3)
    possible_moves_p3 = [
        'move_wrapping', 'move_diagonal_short', 'move_diagonal_long',
        'move_right', 'move_up'
    ]
    assert puzzle_3.possible_moves() == possible_moves_p3

    puzzle_4 = Puzzle(2, setup_4)
    possible_moves_p4 = [
        'move_wrapping', 'move_diagonal_short', 'move_diagonal_long',
        'move_left', 'move_up'
    ]
    assert puzzle_4.possible_moves() == possible_moves_p4

    puzzle_5 = Puzzle(2, setup_5)
    possible_moves_p5 = ['move_right', 'move_left', 'move_up']
    assert puzzle_5.possible_moves() == possible_moves_p5

    return
def test_possible_moves_other_sizes():
    setup_6 = [1, 2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 8]
    setup_7 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0]

    puzzle_6 = Puzzle(2, setup_6)
    possible_moves_p6 = ['move_right', 'move_left', 'move_up']
    assert puzzle_6.possible_moves() == possible_moves_p6

    puzzle_7 = Puzzle(3, setup_6)
    possible_moves_p7 = ['move_left', 'move_down', 'move_up']
    assert puzzle_7.possible_moves() == possible_moves_p7

    puzzle_8 = Puzzle(4, setup_6)
    possible_moves_p8 = ['move_right', 'move_left', 'move_down', 'move_up']
    assert puzzle_8.possible_moves() == possible_moves_p8

    puzzle_9 = Puzzle(4, setup_7)
    possible_moves_p9 = [
        'move_wrapping', 'move_diagonal_short', 'move_diagonal_long',
        'move_left', 'move_up'
    ]
    assert puzzle_9.possible_moves() == possible_moves_p9

    return