From 89fb17684d2b0e5fb2cd3cb17e6be640b9eb66ea Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Fri, 20 Sep 2019 17:33:32 -0700 Subject: [PATCH] Fixing some weird randomness issue of java.util.Random --- .../draft2/builder/DraftChoiceBuilder.java | 2 +- .../gempukku/lotro/draft/HobbitDraftTest.java | 43 ++++++++++++------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/DraftChoiceBuilder.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/DraftChoiceBuilder.java index 3b5973693..31d7419da 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/DraftChoiceBuilder.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft2/builder/DraftChoiceBuilder.java @@ -99,7 +99,7 @@ public class DraftChoiceBuilder { private List getCards(long seed, int stage) { Random rnd = getRandom(seed, stage); // Fixing some weird issue with Random - float thisFixesRandomnessForSomeReason = rnd.nextFloat(); + float thisFixesRandomnessForSomeReason = rnd.nextInt(); final List cards = new ArrayList(possibleCards); Collections.shuffle(cards, rnd); return cards; diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/draft/HobbitDraftTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/draft/HobbitDraftTest.java index bc0d00da8..6c1aa296a 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/draft/HobbitDraftTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/draft/HobbitDraftTest.java @@ -10,15 +10,12 @@ import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.game.packs.SetDefinition; import java.io.File; -import java.util.Comparator; import java.util.Map; import java.util.Random; import java.util.TreeMap; public class HobbitDraftTest { public static void main(String[] args) { - testRandomness(); - LotroCardBlueprintLibrary library = new LotroCardBlueprintLibrary(); final String property = System.getProperty("user.dir"); String projectRoot = new File(property).getAbsolutePath(); @@ -38,20 +35,17 @@ public class HobbitDraftTest { final int playerId = 1000; Map availableCards = new TreeMap<>( - new Comparator() { - @Override - public int compare(String o1, String o2) { - int set1 = Integer.parseInt(o1.substring(0, o1.indexOf('_'))); - int set2 = Integer.parseInt(o2.substring(0, o2.indexOf('_'))); - if (set1 != set2) - return set1 - set2; - int card1 = Integer.parseInt(o1.substring(o1.indexOf('_') + 1)); - int card2 = Integer.parseInt(o2.substring(o2.indexOf('_') + 1)); - return card1 - card2; - } + (o1, o2) -> { + int set1 = Integer.parseInt(o1.substring(0, o1.indexOf('_'))); + int set2 = Integer.parseInt(o2.substring(0, o2.indexOf('_'))); + if (set1 != set2) + return set1 - set2; + int card1 = Integer.parseInt(o1.substring(o1.indexOf('_') + 1)); + int card2 = Integer.parseInt(o2.substring(o2.indexOf('_') + 1)); + return card1 - card2; }); - for (int i = 0; i < 1000; i++) { + for (int i = 0; i < 10000; i++) { // Take an example seed long seed = getSeed(String.valueOf(collectionType + i), playerId); @@ -78,6 +72,25 @@ public class HobbitDraftTest { } } + private static void testRandomness2() { + int lastValue = -1; + long patchStart = 1813024350; + long longestPatch = 0; + for (long seed = 0; seed < 8813024350L; seed++) { + final int value = new Random(seed).nextInt(8); + if (value != lastValue) { + long patchLength = seed - patchStart; + if (patchLength > longestPatch) { + System.out.println("Longest patch: " + patchStart + "-" + (seed - 1)); + System.out.println("Patch length: " + patchLength); + longestPatch = patchLength; + } + patchStart = seed; + lastValue = value; + } + } + } + private static void testRandomness() { doRandomTest(4, false); System.out.println("WTF!!!!");