package de.axone.cache.ng; import java.util.Random; import org.testng.annotations.Test; import de.axone.equals.Jenkins96Backend; import de.axone.tools.E; @Test( groups="cacheng.random" ) public class CacheNGTest_GoodRandomValueFromHashes { Jenkins96Backend j = new Jenkins96Backend(); public void generateSomeHashesAndTestTheirDistribution() { Random rnd = new Random(); int distJavaHash=0, distJava2Byte=0, distShuffle=0, distJenkinsHash=0, distRandom=0, stableRandom=0, stableRandom5=0; for( int i=0; i< 12000; i++ ){ String s = String.format( "%05d", i ); int hash = s.hashCode(); short java2 = (short)hash; int jenk = (int)j.hash( s ); int shuf = RandomMapper.integer( hash ); if( rnd.nextInt() > 0 ) distRandom++; else distRandom--; if( hash > 0 ) distJavaHash++; else distJavaHash--; if( java2 > 0 ) distJava2Byte++; else distJava2Byte--; if( jenk > 0 ) distJenkinsHash++; else distJenkinsHash--; if( shuf > 0 ) distShuffle++; else distShuffle--; Random rnd2 = new Random( hash ); if( rnd2.nextInt() > 0 ) stableRandom++; else stableRandom--; for( int x=0; x<5; x++ ) rnd2.nextInt(); if( rnd2.nextInt() > 0 ) stableRandom5++; else stableRandom5--; } E.cho( "DISTRIBUTION of RANDOMNESS. Smaller is (somewhat) better." ); E.cho( "Random: " + distRandom ); E.cho( "Stable-Random: " + stableRandom ); E.cho( "Stable-Random-5: " + stableRandom5 ); E.cho( "Java-Hash: " + distJavaHash ); E.cho( "Java-2Byte-Hash: " + distJava2Byte ); E.cho( "*** ShuffleMapper ***: " + distShuffle ); E.cho( "Jenkins-Hash: " + distJenkinsHash ); } }