diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/tournament/SwissPairingMechanismTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/tournament/SwissPairingMechanismTest.java index 07558159b..e67f89e5f 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/tournament/SwissPairingMechanismTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/tournament/SwissPairingMechanismTest.java @@ -33,16 +33,32 @@ public class SwissPairingMechanismTest { // Sally has 66% chance of winning a game against Jack and 50% against anotherSally, Jack has 50% of winning // a game against another Jack - int repeatCount = 10000; - int playerCount = 260; + int repeatCount = 100000; int roundCount = 9; - int betterPlayerWin =0; + int betterPlayerCount = 10; + int worsePlayerCount = 250; + float chanceToWin = 0.66666f; + + int playerCount = betterPlayerCount+worsePlayerCount; + + int betterPlayerWins =0; + + Set betterPlayers = new HashSet(); + Set worsePlayers = new HashSet(); + + Random rnd = new Random(); for (int repeat = 0; repeat < repeatCount; repeat++) { Set players = new HashSet(); - for (int i = 0; i < playerCount; i++) - players.add(String.valueOf(i)); + for (int i = 0; i < playerCount; i++) { + String playerName = String.valueOf(i); + players.add(playerName); + if (i droppedPlayers = new HashSet(); Map byes = new HashMap(); @@ -71,7 +87,7 @@ public class SwissPairingMechanismTest { String playerOne = newPairing.getKey(); String playerTwo = newPairing.getValue(); - String winner = getWinner(playerOne, playerTwo); + String winner = getWinner(rnd, betterPlayers, worsePlayers, playerOne, playerTwo, chanceToWin); previouslyPaired.get(playerOne).add(playerTwo); previouslyPaired.get(playerTwo).add(playerOne); @@ -82,39 +98,36 @@ public class SwissPairingMechanismTest { } List standings = BestOfOneStandingsProducer.produceStandings(players, matches, 1, 0, byes); - String firstSemi = getWinner(standings.get(0).getPlayerName(), standings.get(7).getPlayerName()); - String secondSemi = getWinner(standings.get(1).getPlayerName(), standings.get(6).getPlayerName()); - String thirdSemi = getWinner(standings.get(2).getPlayerName(), standings.get(5).getPlayerName()); - String fourthSemi = getWinner(standings.get(3).getPlayerName(), standings.get(4).getPlayerName()); + String firstSemi = getWinner(rnd, betterPlayers, worsePlayers, standings.get(0).getPlayerName(), standings.get(7).getPlayerName(), chanceToWin); + String secondSemi = getWinner(rnd, betterPlayers, worsePlayers, standings.get(1).getPlayerName(), standings.get(6).getPlayerName(), chanceToWin); + String thirdSemi = getWinner(rnd, betterPlayers, worsePlayers, standings.get(2).getPlayerName(), standings.get(5).getPlayerName(), chanceToWin); + String fourthSemi = getWinner(rnd, betterPlayers, worsePlayers, standings.get(3).getPlayerName(), standings.get(4).getPlayerName(), chanceToWin); - String firstFinalist = getWinner(firstSemi, fourthSemi); - String secondFinalist = getWinner(secondSemi, thirdSemi); + String firstFinalist = getWinner(rnd, betterPlayers, worsePlayers, firstSemi, fourthSemi, chanceToWin); + String secondFinalist = getWinner(rnd, betterPlayers, worsePlayers, secondSemi, thirdSemi, chanceToWin); - String winner = getWinner(firstFinalist, secondFinalist); + String winner = getWinner(rnd, betterPlayers, worsePlayers, firstFinalist, secondFinalist, chanceToWin); - if (Integer.parseInt(winner)<10) - betterPlayerWin++; + if (betterPlayers.contains(winner)) + betterPlayerWins++; } - System.out.println(betterPlayerWin); + System.out.println(betterPlayerWins); } - private String getWinner(String playerOne, String playerTwo) { - int playerOneNo = Integer.parseInt(playerOne); - int playerTwoNo = Integer.parseInt(playerTwo); - - if (playerOneNo < 10 && playerTwoNo >= 10) { - if (new Random().nextFloat() < 0.66f) + private String getWinner(Random rnd, Set betterPlayers, Set worsePlayers, String playerOne, String playerTwo, float winChance) { + if (betterPlayers.contains(playerOne) && worsePlayers.contains(playerTwo)) { + if (rnd.nextFloat() < winChance) return playerOne; else return playerTwo; - } else if (playerTwoNo < 10 && playerOneNo >= 10) { - if (new Random().nextFloat() < 0.66f) + } else if (betterPlayers.contains(playerTwo) && worsePlayers.contains(playerOne)) { + if (rnd.nextFloat() < winChance) return playerTwo; else return playerOne; } else { - if (new Random().nextBoolean()) + if (rnd.nextBoolean()) return playerOne; else return playerTwo;