def test_get_players_sorted():
    """Run get_players with sorted flag to true."""
    # Set up variables
    ba1 = BaseAgent()
    ba2 = BaseAgent()
    cfe = CoinFlipEngine()
    lad = BaseLadder(game=cfe)
    lad.match_func = mock_match_func

    # Add players to the ladder
    lad.add_player(ba1)
    lad.add_player(ba2)

    # Run the game
    lad.run_game()

    # Check that the results are sorted in ascending elo
    players = lad.get_players(sort=True)

    player1 = players[0]
    player2 = players[1]

    assert player1.elo > player2.elo
    assert (player1.num_wins == 1 and player2.num_wins == 0)
    assert (player1.num_losses == 0 and player2.num_losses == 1)
def test_run_game():
    """Test run_game functions properly."""
    # Set up variables
    ba1 = BaseAgent()
    ba2 = BaseAgent()
    cfe = CoinFlipEngine()
    lad = BaseLadder(game=cfe)
    lad.match_func = mock_match_func

    # Add players to the ladder
    lad.add_player(ba1)
    lad.add_player(ba2)

    # Run the game
    lad.run_game()

    # Check that the ladder updated properly
    players = lad.get_players()

    player1 = players[0]
    player2 = players[1]

    # Only one elo value changes
    assert ((player1.elo > 1000 and player2.elo == 1000)
            or (player1.elo == 1000 and player2.elo > 1000))

    # Someone won the game
    assert ((player1.num_wins == 0 and player2.num_wins == 1)
            or (player1.num_wins == 1 and player2.num_wins == 0))

    # Someone lost the game
    assert ((player1.num_losses == 0 and player2.num_losses == 1)
            or (player1.num_losses == 1 and player2.num_losses == 0))