package squidpony.examples; import squidpony.squidmath.*; import java.math.BigInteger; import java.util.Random; /** * Created by Tommy Ettinger on 7/16/2015. */ public class RNGTest { private static int[][] ibits = new int[21][32], lbits = new int[21][64]; private static int[] ibitsTotal = new int[21], lbitsTotal = new int[21]; private static BigInteger[] counters = new BigInteger[]{ BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO, BigInteger.ZERO }; private static String[] kindNames = new String[]{"Light", "Permuted", "Xor", "Light+RNG", "Permuted+RNG", "Xor+RNG", "Deck(RNG)", "Light+asRandom", "Permuted+asRandom", "Xor+asRandom", "Deck+asRandom", "Isaac", "Isaac+asRandom", "LongPeriod", "LongPeriod+asRandom", "XoRo", "XoRo+AsRandom", "Sobol(Dissimilar)", "Thunder", "Thunder+RNG", "Thunder+asRandom" }; public static String binaryString(int n, int kind) { ibitsTotal[kind] += Integer.bitCount(n); for(int i = 0; i < 32; i++) { ibits[kind][i] += ((long)(n) & (1L << i)) > 0 ? 1 : 0; } String text = Integer.toBinaryString(n); int len = text.length(); return "00000000000000000000000000000000".substring(0,32-len)+text + " " + n; } public static String binaryString(long n, int kind) { counters[kind] = counters[kind].add(BigInteger.valueOf(n)); lbitsTotal[kind] += Long.bitCount(n); for(int i = 0; i < 63; i++) { lbits[kind][i] += (n & (1L << i)) > 0 ? 1 : 0; } lbits[kind][63] += (n < 0) ? 1 : 0; String text = Long.toBinaryString(n); int len = text.length(); return "0000000000000000000000000000000000000000000000000000000000000000".substring(0,64-len)+text + " " + n; } public static void main(String[] args) { long seed = new LightRNG().nextLong(); LightRNG light = new LightRNG(seed); PermutedRNG perm = new PermutedRNG(seed); XorRNG xor = new XorRNG(seed); ThunderRNG thunder = new ThunderRNG(seed); SobolQRNG sbl = new SobolQRNG(2); sbl.skipTo(9000); RNG lr = new RNG(new LightRNG(seed)), pr = new RNG(new PermutedRNG(seed)), xr = new RNG(new XorRNG(seed)), ir = new RNG(new IsaacRNG()), lpr = new RNG(new LongPeriodRNG(seed)), xnr = new RNG(new XoRoRNG(seed)); StatefulRNG tr = new StatefulRNG(new ThunderRNG(seed)); DeckRNG dr = new DeckRNG(seed); Random lrr = lr.asRandom(), prr = pr.asRandom(), xrr = xr.asRandom(), drr = dr.asRandom(), irr = ir.asRandom(), lprr = lpr.asRandom(), xnrr = xnr.asRandom(), trr = tr.asRandom(); int c = 0; for(int i = 0; i < 99; i++) { c = light.nextInt(); /*System.out.println("l : " + */ binaryString(c, 0); c = perm.nextInt(); /*System.out.println("p : " + */ binaryString(c, 1); c = xor.nextInt(); /*System.out.println("x : " + */ binaryString(c, 2); c = lr.nextInt(); /*System.out.println("LR : " + */ binaryString(c, 3); c = pr.nextInt(); /*System.out.println("PR : " + */ binaryString(c, 4); c = xr.nextInt(); /*System.out.println("XR : " + */ binaryString(c, 5); c = dr.nextInt(); /*System.out.println("DR : " + */ binaryString(c, 6); c = lrr.nextInt(); /*System.out.println("LRR : " + */ binaryString(c, 7); c = prr.nextInt(); /*System.out.println("PRR : " + */ binaryString(c, 8); c = xrr.nextInt(); /*System.out.println("XRR : " + */ binaryString(c, 9); c = drr.nextInt(); /*System.out.println("DRR : " + */ binaryString(c, 10); c = ir.nextInt(); /*System.out.println("IR : " + */ binaryString(c, 11); c = irr.nextInt(); /*System.out.println("IRR : " + */ binaryString(c, 12); c = lpr.nextInt(); /*System.out.println("LPR : " + */ binaryString(c, 13); c = lprr.nextInt(); /*System.out.println("LPRR: " + */ binaryString(c, 14); c = xnr.nextInt(); /*System.out.println("XNR : " + */ binaryString(c, 15); c = xnrr.nextInt(); /*System.out.println("XNRR: " + */ binaryString(c, 16); c = sbl.next(32); /*System.out.println("SBL : " + */ binaryString(c, 17); c = thunder.nextInt(); /*System.out.println("T : " + */ binaryString(c, 18); c = tr.nextInt(); /*System.out.println("TR : " + */ binaryString(c, 19); c = trr.nextInt(); /*System.out.println("TRR: " + */ binaryString(c, 20); //System.out.println(); } for(int k = 0; k < 21; k++) { for (int i = 31; i >= 0; i--) { System.out.print(String.format("%02d ", ibits[k][i])); } System.out.println(kindNames[k]); } for(int k = 0; k < 21; k++) { System.out.println(ibitsTotal[k]); } light = new LightRNG(seed); perm = new PermutedRNG(seed); xor = new XorRNG(seed); lr = new RNG(new LightRNG(seed)); pr = new RNG(new PermutedRNG(seed)); xr = new RNG(new XorRNG(seed)); dr = new DeckRNG(seed); ir = new RNG(new IsaacRNG()); lpr = new RNG(new LongPeriodRNG(seed)); thunder = new ThunderRNG(seed); tr = new StatefulRNG(new ThunderRNG(seed)); lrr = lr.asRandom(); prr = pr.asRandom(); xrr = xr.asRandom(); drr = dr.asRandom(); irr = ir.asRandom(); lprr = lpr.asRandom(); xnrr = xnr.asRandom(); trr = tr.asRandom(); long l = 0; for(int i = 0; i < 99; i++) { l = light.nextLong(); /*System.out.println("l : " + */ binaryString(l, 0); l = perm.nextLong(); /*System.out.println("p : " + */ binaryString(l, 1); l = xor.nextLong(); /*System.out.println("x : " + */ binaryString(l, 2); l = lr.nextLong(); /*System.out.println("LR : " + */ binaryString(l, 3); l = pr.nextLong(); /*System.out.println("PR : " + */ binaryString(l, 4); l = xr.nextLong(); /*System.out.println("XR : " + */ binaryString(l, 5); l = dr.nextLong(); /*System.out.println("DR : " + */ binaryString(l, 6); l = lrr.nextLong(); /*System.out.println("LRR : " + */ binaryString(l, 7); l = prr.nextLong(); /*System.out.println("PRR : " + */ binaryString(l, 8); l = xrr.nextLong(); /*System.out.println("XRR : " + */ binaryString(l, 9); l = drr.nextLong(); /*System.out.println("DRR : " + */ binaryString(l, 10); l = ir.nextLong(); /*System.out.println("IR : " + */ binaryString(l, 11); l = irr.nextLong(); /*System.out.println("IR : " + */ binaryString(l, 12); l = lpr.nextLong(); /*System.out.println("LPR : " + */ binaryString(l, 13); l = lprr.nextLong(); /*System.out.println("LPR : " + */ binaryString(l, 14); l = xnr.nextLong(); /*System.out.println("XNR : " + */ binaryString(l, 15); l = xnrr.nextLong(); /*System.out.println("XNRR: " + */ binaryString(l, 16); l = sbl.nextLong(); /*System.out.println("SBL : " + */ binaryString(l, 17); l = thunder.nextLong(); /*System.out.println("T : " + */ binaryString(l, 18); l = tr.nextLong(); /*System.out.println("TR : " + */ binaryString(l, 19); l = trr.nextLong(); /*System.out.println("TRR : " + */ binaryString(l, 20); //System.out.println(); /*l = lrr.nextLong(); System.out.println("LRR : " + binaryString(l, 6)); l = prr.nextLong(); System.out.println("PRR : " + binaryString(l, 7)); l = xrr.nextLong(); System.out.println("XRR : " + binaryString(l, 8)); */ } for(int k = 0; k < 21; k++) { for (int i = 63; i >= 0; i--) { System.out.print(String.format("%02d ", lbits[k][i])); } System.out.println(kindNames[k]); } for(int k = 0; k < 21; k++) { System.out.println(kindNames[k] + " : "); System.out.println(lbitsTotal[k]); System.out.println(counters[k]); } light = new LightRNG(seed); perm = new PermutedRNG(seed); xor = new XorRNG(seed); lr = new RNG(new LightRNG(seed)); pr = new RNG(new PermutedRNG(seed)); xr = new RNG(new XorRNG(seed)); dr = new DeckRNG(seed); ir = new RNG(new IsaacRNG()); lpr = new RNG(new LongPeriodRNG(seed)); xnr = new RNG(new XoRoRNG(seed)); sbl.skipTo(9000); lrr = lr.asRandom(); prr = pr.asRandom(); xrr = xr.asRandom(); irr = ir.asRandom(); lprr = lpr.asRandom(); xnrr = xnr.asRandom(); thunder = new ThunderRNG(seed); tr = new StatefulRNG(new ThunderRNG(seed)); trr = tr.asRandom(); ibits = new int[21][32]; ibitsTotal = new int[21]; int d = 0; for(int i = 0; i < 99; i++) { d = (int)((light.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("l : " + */ binaryString(d, 0); d = (int)((perm.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("p : " + */ binaryString(d, 1); d = (int)((xor.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("x : " + */ binaryString(d, 2); d = (int)((lr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("LR : " + */ binaryString(d, 3); d = (int)((pr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("PR : " + */ binaryString(d, 4); d = (int)((xr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("XR : " + */ binaryString(d, 5); d = (int)((dr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("DR : " + */ binaryString(d, 6); d = (int)((lrr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("LRR : " + */ binaryString(d, 7); d = (int)((prr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("PRR : " + */ binaryString(d, 8); d = (int)((xrr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("XRR : " + */ binaryString(d, 9); d = (int)((xrr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("DRR : " + */ binaryString(d, 10); d = (int)((ir.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("IR : " + */ binaryString(d, 11); d = (int)((irr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("IRR : " + */ binaryString(d, 12); d = (int)((lpr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("LPR : " + */ binaryString(d, 13); d = (int)((lprr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("LPRR: " + */ binaryString(d, 14); d = (int)((xnr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("XNR : " + */ binaryString(d, 15); d = (int)((xnrr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("XNRR: " + */ binaryString(d, 16); d = (int)((sbl.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("SBL : " + */ binaryString(d, 17); d = (int)((thunder.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("T : " + */ binaryString(d, 18); d = (int)((tr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("TR : " + */ binaryString(d, 19); d = (int)((trr.nextDouble() - 0.5) * 0xffffffffL); /*System.out.println("TRR : " + */ binaryString(d, 20); //System.out.println(); //System.out.println(); } for(int k = 0; k < 21; k++) { for (int i = 31; i >= 0; i--) { System.out.print(String.format("%02d ", ibits[k][i])); } System.out.println(kindNames[k]); } for(int k = 0; k < 21; k++) { System.out.println(ibitsTotal[k]); } } }