Author: nextgens
Date: 2007-03-22 11:03:56 +0000 (Thu, 22 Mar 2007)
New Revision: 12272

Added:
   trunk/freenet/src/org/spaceroots/mantissa/random/ScalarSampleStatistics.java
   trunk/freenet/test/org/
   trunk/freenet/test/org/spaceroots/
   trunk/freenet/test/org/spaceroots/mantissa/
   trunk/freenet/test/org/spaceroots/mantissa/random/
   trunk/freenet/test/org/spaceroots/mantissa/random/MersenneTwisterTest.java
   
trunk/freenet/test/org/spaceroots/mantissa/random/ScalarSampleStatisticsTest.java
Removed:
   trunk/freenet/src/org/spaceroots/mantissa/random/MersenneTwisterTest.java
Log:
Move MersenneTwisterTest to the test directory so that it will be tested. Add a 
new class (ScalarSampleStatistics) from the library as it's a dependency and 
its own test

Deleted: 
trunk/freenet/src/org/spaceroots/mantissa/random/MersenneTwisterTest.java
===================================================================
--- trunk/freenet/src/org/spaceroots/mantissa/random/MersenneTwisterTest.java   
2007-03-22 01:26:28 UTC (rev 12271)
+++ trunk/freenet/src/org/spaceroots/mantissa/random/MersenneTwisterTest.java   
2007-03-22 11:03:56 UTC (rev 12272)
@@ -1,316 +0,0 @@
-package org.spaceroots.mantissa.random;
-
-import junit.framework.*;
-
-public class MersenneTwisterTest
-  extends TestCase {
-
-  public MersenneTwisterTest(String name) {
-    super(name);
-  }
-
-  public void testDouble() {
-    MersenneTwister mt = new MersenneTwister(195357343514l);
-    ScalarSampleStatistics sample = new ScalarSampleStatistics();
-    for (int i = 0; i < 1000; ++i) {
-      sample.add(mt.nextDouble());
-    }
-    assertEquals(0.5, sample.getMean(), 0.02);
-    assertEquals(1.0 / (2.0 * Math.sqrt(3.0)),
-                 sample.getStandardDeviation(),
-                 0.002);
-  }
-
-  public void testNextInt() {
-    MersenneTwister mt = new MersenneTwister(0x12b8a7412bb25el);
-    for (int n = 1; n < 20; ++n) {
-      int[] count = new int[n];
-      for (int k = 0; k < 10000; ++k) {
-        int l = mt.nextInt(n);
-        ++count[l];
-        assertTrue(l >= 0);
-        assertTrue(l <  n);
-      }
-      for (int i = 0; i < n; ++i) {
-        assertTrue(n * count[i] >  8800);
-        assertTrue(n * count[i] < 11100);
-      }
-    }
-  }
-
-  public void testMakotoNishimura() {
-    MersenneTwister mt = new MersenneTwister(new int[] {0x123, 0x234, 0x345, 
0x456});
-    long[] refInt = {
-      1067595299l,  955945823l,  477289528l, 4107218783l, 4228976476l, 
3344332714l, 3355579695l,  227628506l,
-       810200273l, 2591290167l, 2560260675l, 3242736208l,  646746669l, 
1479517882l, 4245472273l, 1143372638l,
-      3863670494l, 3221021970l, 1773610557l, 1138697238l, 1421897700l, 
1269916527l, 2859934041l, 1764463362l,
-      3874892047l, 3965319921l,   72549643l, 2383988930l, 2600218693l, 
3237492380l, 2792901476l,  725331109l,
-       605841842l,  271258942l,  715137098l, 3297999536l, 1322965544l, 
4229579109l, 1395091102l, 3735697720l,
-      2101727825l, 3730287744l, 2950434330l, 1661921839l, 2895579582l, 
2370511479l, 1004092106l, 2247096681l,
-      2111242379l, 3237345263l, 4082424759l,  219785033l, 2454039889l, 
3709582971l,  835606218l, 2411949883l,
-      2735205030l,  756421180l, 2175209704l, 1873865952l, 2762534237l, 
4161807854l, 3351099340l,  181129879l,
-      3269891896l,  776029799l, 2218161979l, 3001745796l, 1866825872l, 
2133627728l,   34862734l, 1191934573l,
-      3102311354l, 2916517763l, 1012402762l, 2184831317l, 4257399449l, 
2899497138l, 3818095062l, 3030756734l,
-      1282161629l,  420003642l, 2326421477l, 2741455717l, 1278020671l, 
3744179621l,  271777016l, 2626330018l,
-      2560563991l, 3055977700l, 4233527566l, 1228397661l, 3595579322l, 
1077915006l, 2395931898l, 1851927286l,
-      3013683506l, 1999971931l, 3006888962l, 1049781534l, 1488758959l, 
3491776230l,  104418065l, 2448267297l,
-      3075614115l, 3872332600l,  891912190l, 3936547759l, 2269180963l, 
2633455084l, 1047636807l, 2604612377l,
-      2709305729l, 1952216715l,  207593580l, 2849898034l,  670771757l, 
2210471108l,  467711165l,  263046873l,
-      3569667915l, 1042291111l, 3863517079l, 1464270005l, 2758321352l, 
3790799816l, 2301278724l, 3106281430l,
-         7974801l, 2792461636l,  555991332l,  621766759l, 1322453093l,  
853629228l,  686962251l, 1455120532l,
-       957753161l, 1802033300l, 1021534190l, 3486047311l, 1902128914l, 
3701138056l, 4176424663l, 1795608698l,
-       560858864l, 3737752754l, 3141170998l, 1553553385l, 3367807274l,  
711546358l, 2475125503l,  262969859l,
-       251416325l, 2980076994l, 1806565895l,  969527843l, 3529327173l, 
2736343040l, 2987196734l, 1649016367l,
-      2206175811l, 3048174801l, 3662503553l, 3138851612l, 2660143804l, 
1663017612l, 1816683231l,  411916003l,
-      3887461314l, 2347044079l, 1015311755l, 1203592432l, 2170947766l, 
2569420716l,  813872093l, 1105387678l,
-      1431142475l,  220570551l, 4243632715l, 4179591855l, 2607469131l, 
3090613241l,  282341803l, 1734241730l,
-      1391822177l, 1001254810l,  827927915l, 1886687171l, 3935097347l, 
2631788714l, 3905163266l,  110554195l,
-      2447955646l, 3717202975l, 3304793075l, 3739614479l, 3059127468l,  
953919171l, 2590123714l, 1132511021l,
-      3795593679l, 2788030429l,  982155079l, 3472349556l,  859942552l, 
2681007391l, 2299624053l,  647443547l,
-       233600422l,  608168955l, 3689327453l, 1849778220l, 1608438222l, 
3968158357l, 2692977776l, 2851872572l,
-       246750393l, 3582818628l, 3329652309l, 4036366910l, 1012970930l,  
950780808l, 3959768744l, 2538550045l,
-       191422718l, 2658142375l, 3276369011l, 2927737484l, 1234200027l, 
1920815603l, 3536074689l, 1535612501l,
-      2184142071l, 3276955054l,  428488088l, 2378411984l, 4059769550l, 
3913744741l, 2732139246l,   64369859l,
-      3755670074l,  842839565l, 2819894466l, 2414718973l, 1010060670l, 
1839715346l, 2410311136l,  152774329l,
-      3485009480l, 4102101512l, 2852724304l,  879944024l, 1785007662l, 
2748284463l, 1354768064l, 3267784736l,
-      2269127717l, 3001240761l, 3179796763l,  895723219l,  865924942l, 
4291570937l,   89355264l, 1471026971l,
-      4114180745l, 3201939751l, 2867476999l, 2460866060l, 3603874571l, 
2238880432l, 3308416168l, 2072246611l,
-      2755653839l, 3773737248l, 1709066580l, 4282731467l, 2746170170l, 
2832568330l,  433439009l, 3175778732l,
-        26248366l, 2551382801l,  183214346l, 3893339516l, 1928168445l, 
1337157619l, 3429096554l, 3275170900l,
-      1782047316l, 4264403756l, 1876594403l, 4289659572l, 3223834894l, 
1728705513l, 4068244734l, 2867840287l,
-      1147798696l,  302879820l, 1730407747l, 1923824407l, 1180597908l, 
1569786639l,  198796327l,  560793173l,
-      2107345620l, 2705990316l, 3448772106l, 3678374155l,  758635715l,  
884524671l,  486356516l, 1774865603l,
-      3881226226l, 2635213607l, 1181121587l, 1508809820l, 3178988241l, 
1594193633l, 1235154121l,  326117244l,
-      2304031425l,  937054774l, 2687415945l, 3192389340l, 2003740439l, 
1823766188l, 2759543402l,   10067710l,
-      1533252662l, 4132494984l,   82378136l,  420615890l, 3467563163l,  
541562091l, 3535949864l, 2277319197l,
-      3330822853l, 3215654174l, 4113831979l, 4204996991l, 2162248333l, 
3255093522l, 2219088909l, 2978279037l,
-       255818579l, 2859348628l, 3097280311l, 2569721123l, 1861951120l, 
2907080079l, 2719467166l,  998319094l,
-      2521935127l, 2404125338l,  259456032l, 2086860995l, 1839848496l, 
1893547357l, 2527997525l, 1489393124l,
-      2860855349l,   76448234l, 2264934035l,  744914583l, 2586791259l, 
1385380501l,   66529922l, 1819103258l,
-      1899300332l, 2098173828l, 1793831094l,  276463159l,  360132945l, 
4178212058l,  595015228l,  177071838l,
-      2800080290l, 1573557746l, 1548998935l,  378454223l, 1460534296l, 
1116274283l, 3112385063l, 3709761796l,
-       827999348l, 3580042847l, 1913901014l,  614021289l, 4278528023l, 
1905177404l,   45407939l, 3298183234l,
-      1184848810l, 3644926330l, 3923635459l, 1627046213l, 3677876759l,  
969772772l, 1160524753l, 1522441192l,
-       452369933l, 1527502551l,  832490847l, 1003299676l, 1071381111l, 
2891255476l,  973747308l, 4086897108l,
-      1847554542l, 3895651598l, 2227820339l, 1621250941l, 2881344691l, 
3583565821l, 3510404498l,  849362119l,
-       862871471l,  797858058l, 2867774932l, 2821282612l, 3272403146l, 
3997979905l,  209178708l, 1805135652l,
-         6783381l, 2823361423l,  792580494l, 4263749770l,  776439581l, 
3798193823l, 2853444094l, 2729507474l,
-      1071873341l, 1329010206l, 1289336450l, 3327680758l, 2011491779l,   
80157208l,  922428856l, 1158943220l,
-      1667230961l, 2461022820l, 2608845159l,  387516115l, 3345351910l, 
1495629111l, 4098154157l, 3156649613l,
-      3525698599l, 4134908037l,  446713264l, 2137537399l, 3617403512l,  
813966752l, 1157943946l, 3734692965l,
-      1680301658l, 3180398473l, 3509854711l, 2228114612l, 1008102291l,  
486805123l,  863791847l, 3189125290l,
-      1050308116l, 3777341526l, 4291726501l,  844061465l, 1347461791l, 
2826481581l,  745465012l, 2055805750l,
-      4260209475l, 2386693097l, 2980646741l,  447229436l, 2077782664l, 
1232942813l, 4023002732l, 1399011509l,
-      3140569849l, 2579909222l, 3794857471l,  900758066l, 2887199683l, 
1720257997l, 3367494931l, 2668921229l,
-       955539029l, 3818726432l, 1105704962l, 3889207255l, 2277369307l, 
2746484505l, 1761846513l, 2413916784l,
-      2685127085l, 4240257943l, 1166726899l, 4215215715l, 3082092067l, 
3960461946l, 1663304043l, 2087473241l,
-      4162589986l, 2507310778l, 1579665506l,  767234210l,  970676017l,  
492207530l, 1441679602l, 1314785090l,
-      3262202570l, 3417091742l, 1561989210l, 3011406780l, 1146609202l, 
3262321040l, 1374872171l, 1634688712l,
-      1280458888l, 2230023982l,  419323804l, 3262899800l,   39783310l, 
1641619040l, 1700368658l, 2207946628l,
-      2571300939l, 2424079766l,  780290914l, 2715195096l, 3390957695l,  
163151474l, 2309534542l, 1860018424l,
-       555755123l,  280320104l, 1604831083l, 2713022383l, 1728987441l, 
3639955502l,  623065489l, 3828630947l,
-      4275479050l, 3516347383l, 2343951195l, 2430677756l,  635534992l, 
3868699749l,  808442435l, 3070644069l,
-      4282166003l, 2093181383l, 2023555632l, 1568662086l, 3422372620l, 
4134522350l, 3016979543l, 3259320234l,
-      2888030729l, 3185253876l, 4258779643l, 1267304371l, 1022517473l,  
815943045l,  929020012l, 2995251018l,
-      3371283296l, 3608029049l, 2018485115l,  122123397l, 2810669150l, 
1411365618l, 1238391329l, 1186786476l,
-      3155969091l, 2242941310l, 1765554882l,  279121160l, 4279838515l, 
1641578514l, 3796324015l,   13351065l,
-       103516986l, 1609694427l,  551411743l, 2493771609l, 1316337047l, 
3932650856l, 4189700203l,  463397996l,
-      2937735066l, 1855616529l, 2626847990l,   55091862l, 3823351211l,  
753448970l, 4045045500l, 1274127772l,
-      1124182256l,   92039808l, 2126345552l,  425973257l,  386287896l, 
2589870191l, 1987762798l, 4084826973l,
-      2172456685l, 3366583455l, 3602966653l, 2378803535l, 2901764433l, 
3716929006l, 3710159000l, 2653449155l,
-      3469742630l, 3096444476l, 3932564653l, 2595257433l,  318974657l, 
3146202484l,  853571438l,  144400272l,
-      3768408841l,  782634401l, 2161109003l,  570039522l, 1886241521l,   
14249488l, 2230804228l, 1604941699l,
-      3928713335l, 3921942509l, 2155806892l,  134366254l,  430507376l, 
1924011722l,  276713377l,  196481886l,
-      3614810992l, 1610021185l, 1785757066l,  851346168l, 3761148643l, 
2918835642l, 3364422385l, 3012284466l,
-      3735958851l, 2643153892l, 3778608231l, 1164289832l,  205853021l, 
2876112231l, 3503398282l, 3078397001l,
-      3472037921l, 1748894853l, 2740861475l,  316056182l, 1660426908l,  
168885906l,  956005527l, 3984354789l,
-       566521563l, 1001109523l, 1216710575l, 2952284757l, 3834433081l, 
3842608301l, 2467352408l, 3974441264l,
-      3256601745l, 1409353924l, 1329904859l, 2307560293l, 3125217879l, 
3622920184l, 3832785684l, 3882365951l,
-      2308537115l, 2659155028l, 1450441945l, 3532257603l, 3186324194l, 
1225603425l, 1124246549l,  175808705l,
-      3009142319l, 2796710159l, 3651990107l,  160762750l, 1902254979l, 
1698648476l, 1134980669l,  497144426l,
-      3302689335l, 4057485630l, 3603530763l, 4087252587l,  427812652l,  
286876201l,  823134128l, 1627554964l,
-      3745564327l, 2589226092l, 4202024494l,   62878473l, 3275585894l, 
3987124064l, 2791777159l, 1916869511l,
-      2585861905l, 1375038919l, 1403421920l,   60249114l, 3811870450l, 
3021498009l, 2612993202l,  528933105l,
-      2757361321l, 3341402964l, 2621861700l,  273128190l, 4015252178l, 
3094781002l, 1621621288l, 2337611177l,
-      1796718448l, 1258965619l, 4241913140l, 2138560392l, 3022190223l, 
4174180924l,  450094611l, 3274724580l,
-       617150026l, 2704660665l, 1469700689l, 1341616587l,  356715071l, 
1188789960l, 2278869135l, 1766569160l,
-      2795896635l,   57824704l, 2893496380l, 1235723989l, 1630694347l, 
3927960522l,  428891364l, 1814070806l,
-      2287999787l, 4125941184l, 3968103889l, 3548724050l, 1025597707l, 
1404281500l, 2002212197l,   92429143l,
-      2313943944l, 2403086080l, 3006180634l, 3561981764l, 1671860914l, 
1768520622l, 1803542985l,  844848113l,
-      3006139921l, 1410888995l, 1157749833l, 2125704913l, 1789979528l, 
1799263423l,  741157179l, 2405862309l,
-       767040434l, 2655241390l, 3663420179l, 2172009096l, 2511931187l, 
1680542666l,  231857466l, 1154981000l,
-       157168255l, 1454112128l, 3505872099l, 1929775046l, 2309422350l, 
2143329496l, 2960716902l,  407610648l,
-      2938108129l, 2581749599l,  538837155l, 2342628867l,  430543915l,  
740188568l, 1937713272l, 3315215132l,
-      2085587024l, 4030765687l,  766054429l, 3517641839l,  689721775l, 
1294158986l, 1753287754l, 4202601348l,
-      1974852792l,   33459103l, 3568087535l, 3144677435l, 1686130825l, 
4134943013l, 3005738435l, 3599293386l,
-       426570142l,  754104406l, 3660892564l, 1964545167l,  829466833l,  
821587464l, 1746693036l, 1006492428l,
-      1595312919l, 1256599985l, 1024482560l, 1897312280l, 2902903201l,  
691790057l, 1037515867l, 3176831208l,
-      1968401055l, 2173506824l, 1089055278l, 1748401123l, 2941380082l,  
968412354l, 1818753861l, 2973200866l,
-      3875951774l, 1119354008l, 3988604139l, 1647155589l, 2232450826l, 
3486058011l, 3655784043l, 3759258462l,
-       847163678l, 1082052057l,  989516446l, 2871541755l, 3196311070l, 
3929963078l,  658187585l, 3664944641l,
-      2175149170l, 2203709147l, 2756014689l, 2456473919l, 3890267390l, 
1293787864l, 2830347984l, 3059280931l,
-      4158802520l, 1561677400l, 2586570938l,  783570352l, 1355506163l,   
31495586l, 3789437343l, 3340549429l,
-      2092501630l,  896419368l,  671715824l, 3530450081l, 3603554138l, 
1055991716l, 3442308219l, 1499434728l,
-      3130288473l, 3639507000l,   17769680l, 2259741420l,  487032199l, 
4227143402l, 3693771256l, 1880482820l,
-      3924810796l,  381462353l, 4017855991l, 2452034943l, 2736680833l, 
2209866385l, 2128986379l,  437874044l,
-       595759426l,  641721026l, 1636065708l, 3899136933l,  629879088l, 
3591174506l,  351984326l, 2638783544l,
-      2348444281l, 2341604660l, 2123933692l,  143443325l, 1525942256l,  
364660499l,  599149312l,  939093251l,
-      1523003209l,  106601097l,  376589484l, 1346282236l, 1297387043l,  
764598052l, 3741218111l,  933457002l,
-      1886424424l, 3219631016l,  525405256l, 3014235619l,  323149677l, 
2038881721l, 4100129043l, 2851715101l,
-      2984028078l, 1888574695l, 2014194741l, 3515193880l, 4180573530l, 
3461824363l, 2641995497l, 3179230245l,
-      2902294983l, 2217320456l, 4040852155l, 1784656905l, 3311906931l,   
87498458l, 2752971818l, 2635474297l,
-      2831215366l, 3682231106l, 2920043893l, 3772929704l, 2816374944l,  
309949752l, 2383758854l,  154870719l,
-       385111597l, 1191604312l, 1840700563l,  872191186l, 2925548701l, 
1310412747l, 2102066999l, 1504727249l,
-      3574298750l, 1191230036l, 3330575266l, 3180292097l, 3539347721l,  
681369118l, 3305125752l, 3648233597l,
-       950049240l, 4173257693l, 1760124957l,  512151405l,  681175196l,  
580563018l, 1169662867l, 4015033554l,
-      2687781101l,  699691603l, 2673494188l, 1137221356l,  123599888l,  
472658308l, 1053598179l, 1012713758l,
-      3481064843l, 3759461013l, 3981457956l, 3830587662l, 1877191791l, 
3650996736l,  988064871l, 3515461600l,
-      4089077232l, 2225147448l, 1249609188l, 2643151863l, 3896204135l, 
2416995901l, 1397735321l, 3460025646l 
-    };
-    double[] refDouble = {
-      0.76275443, 0.99000644, 0.98670464, 0.10143112, 0.27933125, 0.69867227, 
0.94218740, 0.03427201,
-      0.78842173, 0.28180608, 0.92179002, 0.20785655, 0.54534773, 0.69644020, 
0.38107718, 0.23978165,
-      0.65286910, 0.07514568, 0.22765211, 0.94872929, 0.74557914, 0.62664415, 
0.54708246, 0.90959343,
-      0.42043116, 0.86334511, 0.19189126, 0.14718544, 0.70259889, 0.63426346, 
0.77408121, 0.04531601,
-      0.04605807, 0.88595519, 0.69398270, 0.05377184, 0.61711170, 0.05565708, 
0.10133577, 0.41500776,
-      0.91810699, 0.22320679, 0.23353705, 0.92871862, 0.98897234, 0.19786706, 
0.80558809, 0.06961067,
-      0.55840445, 0.90479405, 0.63288060, 0.95009721, 0.54948447, 0.20645042, 
0.45000959, 0.87050869,
-      0.70806991, 0.19406895, 0.79286390, 0.49332866, 0.78483914, 0.75145146, 
0.12341941, 0.42030252,
-      0.16728160, 0.59906494, 0.37575460, 0.97815160, 0.39815952, 0.43595080, 
0.04952478, 0.33917805,
-      0.76509902, 0.61034321, 0.90654701, 0.92915732, 0.85365931, 0.18812377, 
0.65913428, 0.28814566,
-      0.59476081, 0.27835931, 0.60722542, 0.68310435, 0.69387186, 0.03699800, 
0.65897714, 0.17527003,
-      0.02889304, 0.86777366, 0.12352068, 0.91439461, 0.32022990, 0.44445731, 
0.34903686, 0.74639273,
-      0.65918367, 0.92492794, 0.31872642, 0.77749724, 0.85413832, 0.76385624, 
0.32744211, 0.91326300,
-      0.27458185, 0.22190155, 0.19865383, 0.31227402, 0.85321225, 0.84243342, 
0.78544200, 0.71854080,
-      0.92503892, 0.82703064, 0.88306297, 0.47284073, 0.70059042, 0.48003761, 
0.38671694, 0.60465770,
-      0.41747204, 0.47163243, 0.72750808, 0.65830223, 0.10955369, 0.64215401, 
0.23456345, 0.95944940,
-      0.72822249, 0.40888451, 0.69980355, 0.26677428, 0.57333635, 0.39791582, 
0.85377858, 0.76962816,
-      0.72004885, 0.90903087, 0.51376506, 0.37732665, 0.12691640, 0.71249738, 
0.81217908, 0.37037313,
-      0.32772374, 0.14238259, 0.05614811, 0.74363008, 0.39773267, 0.94859135, 
0.31452454, 0.11730313,
-      0.62962618, 0.33334237, 0.45547255, 0.10089665, 0.56550662, 0.60539371, 
0.16027624, 0.13245301,
-      0.60959939, 0.04671662, 0.99356286, 0.57660859, 0.40269560, 0.45274629, 
0.06699735, 0.85064246,
-      0.87742744, 0.54508392, 0.87242982, 0.29321385, 0.67660627, 0.68230715, 
0.79052073, 0.48592054,
-      0.25186266, 0.93769755, 0.28565487, 0.47219067, 0.99054882, 0.13155240, 
0.47110470, 0.98556600,
-      0.84397623, 0.12875246, 0.90953202, 0.49129015, 0.23792727, 0.79481194, 
0.44337770, 0.96564297,
-      0.67749118, 0.55684872, 0.27286897, 0.79538393, 0.61965356, 0.22487929, 
0.02226018, 0.49248200,
-      0.42247006, 0.91797788, 0.99250134, 0.23449967, 0.52531508, 0.10246337, 
0.78685622, 0.34310922,
-      0.89892996, 0.40454552, 0.68608407, 0.30752487, 0.83601319, 0.54956031, 
0.63777550, 0.82199797,
-      0.24890696, 0.48801123, 0.48661910, 0.51223987, 0.32969635, 0.31075073, 
0.21393155, 0.73453207,
-      0.15565705, 0.58584522, 0.28976728, 0.97621478, 0.61498701, 0.23891470, 
0.28518540, 0.46809591,
-      0.18371914, 0.37597910, 0.13492176, 0.66849449, 0.82811466, 0.56240330, 
0.37548956, 0.27562998,
-      0.27521910, 0.74096121, 0.77176757, 0.13748143, 0.99747138, 0.92504502, 
0.09175241, 0.21389176,
-      0.21766512, 0.31183245, 0.23271221, 0.21207367, 0.57903312, 0.77523344, 
0.13242613, 0.31037988,
-      0.01204835, 0.71652949, 0.84487594, 0.14982178, 0.57423142, 0.45677888, 
0.48420169, 0.53465428,
-      0.52667473, 0.46880526, 0.49849733, 0.05670710, 0.79022476, 0.03872047, 
0.21697212, 0.20443086,
-      0.28949326, 0.81678186, 0.87629474, 0.92297064, 0.27373097, 0.84625273, 
0.51505586, 0.00582792,
-      0.33295971, 0.91848412, 0.92537226, 0.91760033, 0.07541125, 0.71745848, 
0.61158698, 0.00941650,
-      0.03135554, 0.71527471, 0.24821915, 0.63636652, 0.86159918, 0.26450229, 
0.60160194, 0.35557725,
-      0.24477500, 0.07186456, 0.51757096, 0.62120362, 0.97981062, 0.69954667, 
0.21065616, 0.13382753,
-      0.27693186, 0.59644095, 0.71500764, 0.04110751, 0.95730081, 0.91600724, 
0.47704678, 0.26183479,
-      0.34706971, 0.07545431, 0.29398385, 0.93236070, 0.60486023, 0.48015011, 
0.08870451, 0.45548581,
-      0.91872718, 0.38142712, 0.10668643, 0.01397541, 0.04520355, 0.93822273, 
0.18011940, 0.57577277,
-      0.91427606, 0.30911399, 0.95853475, 0.23611214, 0.69619891, 0.69601980, 
0.76765372, 0.58515930,
-      0.49479057, 0.11288752, 0.97187699, 0.32095365, 0.57563608, 0.40760618, 
0.78703383, 0.43261152,
-      0.90877651, 0.84686346, 0.10599030, 0.72872803, 0.19315490, 0.66152912, 
0.10210518, 0.06257876,
-      0.47950688, 0.47062066, 0.72701157, 0.48915116, 0.66110261, 0.60170685, 
0.24516994, 0.12726050,
-      0.03451185, 0.90864994, 0.83494878, 0.94800035, 0.91035206, 0.14480751, 
0.88458997, 0.53498312,
-      0.15963215, 0.55378627, 0.35171349, 0.28719791, 0.09097957, 0.00667896, 
0.32309622, 0.87561479,
-      0.42534520, 0.91748977, 0.73908457, 0.41793223, 0.99279792, 0.87908370, 
0.28458072, 0.59132853,
-      0.98672190, 0.28547393, 0.09452165, 0.89910674, 0.53681109, 0.37931425, 
0.62683489, 0.56609740,
-      0.24801549, 0.52948179, 0.98328855, 0.66403523, 0.55523786, 0.75886666, 
0.84784685, 0.86829981,
-      0.71448906, 0.84670080, 0.43922919, 0.20771016, 0.64157936, 0.25664246, 
0.73055695, 0.86395782,
-      0.65852932, 0.99061803, 0.40280575, 0.39146298, 0.07291005, 0.97200603, 
0.20555729, 0.59616495,
-      0.08138254, 0.45796388, 0.33681125, 0.33989127, 0.18717090, 0.53545811, 
0.60550838, 0.86520709,
-      0.34290701, 0.72743276, 0.73023855, 0.34195926, 0.65019733, 0.02765254, 
0.72575740, 0.32709576,
-      0.03420866, 0.26061893, 0.56997511, 0.28439072, 0.84422744, 0.77637570, 
0.55982168, 0.06720327,
-      0.58449067, 0.71657369, 0.15819609, 0.58042821, 0.07947911, 0.40193792, 
0.11376012, 0.88762938,
-      0.67532159, 0.71223735, 0.27829114, 0.04806073, 0.21144026, 0.58830274, 
0.04140071, 0.43215628,
-      0.12952729, 0.94668759, 0.87391019, 0.98382450, 0.27750768, 0.90849647, 
0.90962737, 0.59269720,
-      0.96102026, 0.49544979, 0.32007095, 0.62585546, 0.03119821, 0.85953001, 
0.22017528, 0.05834068,
-      0.80731217, 0.53799961, 0.74166948, 0.77426600, 0.43938444, 0.54862081, 
0.58575513, 0.15886492,
-      0.73214332, 0.11649057, 0.77463977, 0.85788827, 0.17061997, 0.66838056, 
0.96076133, 0.07949296,
-      0.68521946, 0.89986254, 0.05667410, 0.12741385, 0.83470977, 0.63969104, 
0.46612929, 0.10200126,
-      0.01194925, 0.10476340, 0.90285217, 0.31221221, 0.32980614, 0.46041971, 
0.52024973, 0.05425470,
-      0.28330912, 0.60426543, 0.00598243, 0.97244013, 0.21135841, 0.78561597, 
0.78428734, 0.63422849,
-      0.32909934, 0.44771136, 0.27380750, 0.14966697, 0.18156268, 0.65686758, 
0.28726350, 0.97074787,
-      0.63676171, 0.96649494, 0.24526295, 0.08297372, 0.54257548, 0.03166785, 
0.33735355, 0.15946671,
-      0.02102971, 0.46228045, 0.11892296, 0.33408336, 0.29875681, 0.29847692, 
0.73767569, 0.02080745,
-      0.62980060, 0.08082293, 0.22993106, 0.25031439, 0.87787525, 0.45150053, 
0.13673441, 0.63407612,
-      0.97907688, 0.52241942, 0.50580158, 0.06273902, 0.05270283, 0.77031811, 
0.05113352, 0.24393329,
-      0.75036441, 0.37436336, 0.22877652, 0.59975358, 0.85707591, 0.88691457, 
0.85547165, 0.36641027,
-      0.58720133, 0.45462835, 0.09243817, 0.32981586, 0.07820411, 0.25421519, 
0.36004706, 0.60092307,
-      0.46192412, 0.36758683, 0.98424170, 0.08019934, 0.68594024, 0.45826386, 
0.29962317, 0.79365413,
-      0.89231296, 0.49478547, 0.87645944, 0.23590734, 0.28106737, 0.75026285, 
0.08136314, 0.79582424,
-      0.76010628, 0.82792971, 0.27947652, 0.72482861, 0.82191216, 0.46171689, 
0.79189752, 0.96043686,
-      0.51609668, 0.88995725, 0.28998963, 0.55191845, 0.03934737, 0.83033700, 
0.49553013, 0.98009549,
-      0.19017594, 0.98347750, 0.33452066, 0.87144372, 0.72106301, 0.71272114, 
0.71465963, 0.88361677,
-      0.85571283, 0.73782329, 0.20920458, 0.34855153, 0.46766817, 0.02780062, 
0.74898344, 0.03680650,
-      0.44866557, 0.77426312, 0.91025891, 0.25195236, 0.87319953, 0.63265037, 
0.25552148, 0.27422476,
-      0.95217406, 0.39281839, 0.66441573, 0.09158900, 0.94515992, 0.07800798, 
0.02507888, 0.39901462,
-      0.17382573, 0.12141278, 0.85502334, 0.19902911, 0.02160210, 0.44460522, 
0.14688742, 0.68020336,
-      0.71323733, 0.60922473, 0.95400380, 0.99611159, 0.90897777, 0.41073520, 
0.66206647, 0.32064685,
-      0.62805003, 0.50677209, 0.52690101, 0.87473387, 0.73918362, 0.39826974, 
0.43683919, 0.80459118,
-      0.32422684, 0.01958019, 0.95319576, 0.98326137, 0.83931735, 0.69060863, 
0.33671416, 0.68062550,
-      0.65152380, 0.33392969, 0.03451730, 0.95227244, 0.68200635, 0.85074171, 
0.64721009, 0.51234433,
-      0.73402047, 0.00969637, 0.93835057, 0.80803854, 0.31485260, 0.20089527, 
0.01323282, 0.59933780,
-      0.31584602, 0.20209563, 0.33754800, 0.68604181, 0.24443049, 0.19952227, 
0.78162632, 0.10336988,
-      0.11360736, 0.23536740, 0.23262256, 0.67803776, 0.48749791, 0.74658435, 
0.92156640, 0.56706407,
-      0.36683221, 0.99157136, 0.23421374, 0.45183767, 0.91609720, 0.85573315, 
0.37706276, 0.77042618,
-      0.30891908, 0.40709595, 0.06944866, 0.61342849, 0.88817388, 0.58734506, 
0.98711323, 0.14744128,
-      0.63242656, 0.87704136, 0.68347125, 0.84446569, 0.43265239, 0.25146321, 
0.04130111, 0.34259839,
-      0.92697368, 0.40878778, 0.56990338, 0.76204273, 0.19820348, 0.66314909, 
0.02482844, 0.06669207,
-      0.50205581, 0.26084093, 0.65139159, 0.41650223, 0.09733904, 0.56344203, 
0.62651696, 0.67332139,
-      0.58037374, 0.47258086, 0.21010758, 0.05713135, 0.89390629, 0.10781246, 
0.32037450, 0.07628388,
-      0.34227964, 0.42190597, 0.58201860, 0.77363549, 0.49595133, 0.86031236, 
0.83906769, 0.81098161,
-      0.26694195, 0.14215941, 0.88210306, 0.53634237, 0.12090720, 0.82480459, 
0.75930318, 0.31847147,
-      0.92768077, 0.01037616, 0.56201727, 0.88107122, 0.35925856, 0.85860762, 
0.61109408, 0.70408301,
-      0.58434977, 0.92192494, 0.62667915, 0.75988365, 0.06858761, 0.36156496, 
0.58057195, 0.13636150,
-      0.57719713, 0.59340255, 0.63530602, 0.22976282, 0.71915530, 0.41162531, 
0.63979565, 0.09931342,
-      0.79344045, 0.10893790, 0.84450224, 0.23122236, 0.99485593, 0.73637397, 
0.17276368, 0.13357764,
-      0.74965804, 0.64991737, 0.61990341, 0.41523170, 0.05878239, 0.05687301, 
0.05497131, 0.42868366,
-      0.42571090, 0.25810502, 0.89642955, 0.30439758, 0.39310223, 0.11357431, 
0.04288255, 0.23397550,
-      0.11200634, 0.85621396, 0.89733974, 0.37508865, 0.42077265, 0.68597384, 
0.72781399, 0.19296476,
-      0.61699087, 0.31667128, 0.67756410, 0.00177323, 0.05725176, 0.79474693, 
0.18885238, 0.06724856,
-      0.68193156, 0.42202167, 0.22082041, 0.28554673, 0.64995708, 0.87851940, 
0.29124547, 0.61009521,
-      0.87374537, 0.05743712, 0.69902994, 0.81925115, 0.45653873, 0.37236821, 
0.31118709, 0.52734307,
-      0.39672836, 0.38185294, 0.30163915, 0.17374510, 0.04913278, 0.90404879, 
0.25742801, 0.58266467,
-      0.97663209, 0.79823377, 0.36437958, 0.15206043, 0.26529938, 0.22690047, 
0.05839021, 0.84721160,
-      0.18622435, 0.37809403, 0.55706977, 0.49828704, 0.47659049, 0.24289680, 
0.88477595, 0.07807463,
-      0.56245739, 0.73490635, 0.21099431, 0.13164942, 0.75840044, 0.66877037, 
0.28988183, 0.44046090,
-      0.24967434, 0.80048356, 0.26029740, 0.30416821, 0.64151867, 0.52067892, 
0.12880774, 0.85465381,
-      0.02690525, 0.19149288, 0.49630295, 0.79682619, 0.43566145, 0.00288078, 
0.81484193, 0.03763639,
-      0.68529083, 0.01339574, 0.38405386, 0.30537067, 0.22994703, 0.44000045, 
0.27217985, 0.53831243,
-      0.02870435, 0.86282045, 0.61831306, 0.09164956, 0.25609707, 0.07445781, 
0.72185784, 0.90058883,
-      0.30070608, 0.94476583, 0.56822213, 0.21933909, 0.96772793, 0.80063440, 
0.26307906, 0.31183306,
-      0.16501252, 0.55436179, 0.68562285, 0.23829083, 0.86511559, 0.57868991, 
0.81888344, 0.20126869,
-      0.93172350, 0.66028129, 0.21786948, 0.78515828, 0.10262106, 0.35390326, 
0.79303876, 0.63427924,
-      0.90479631, 0.31024934, 0.60635447, 0.56198079, 0.63573813, 0.91854197, 
0.99701497, 0.83085849,
-      0.31692291, 0.01925964, 0.97446405, 0.98751283, 0.60944293, 0.13751018, 
0.69519957, 0.68956636,
-      0.56969015, 0.46440193, 0.88341765, 0.36754434, 0.89223647, 0.39786427, 
0.85055280, 0.12749961,
-      0.79452122, 0.89449784, 0.14567830, 0.45716830, 0.74822309, 0.28200437, 
0.42546044, 0.17464886,
-      0.68308746, 0.65496587, 0.52935411, 0.12736159, 0.61523955, 0.81590528, 
0.63107864, 0.39786553,
-      0.20102294, 0.53292914, 0.75485590, 0.59847044, 0.32861691, 0.12125866, 
0.58917183, 0.07638293,
-      0.86845380, 0.29192617, 0.03989733, 0.52180460, 0.32503407, 0.64071852, 
0.69516575, 0.74254998,
-      0.54587026, 0.48713246, 0.32920155, 0.08719954, 0.63497059, 0.54328459, 
0.64178757, 0.45583809,
-      0.70694291, 0.85212760, 0.86074305, 0.33163422, 0.85739792, 0.59908488, 
0.74566046, 0.72157152
-    };
-
-    for (int i = 0; i < refInt.length; ++i) {
-      int r = mt.nextInt();
-      assertEquals(refInt[i], (r & 0x7fffffffl) | ((r < 0) ? 0x80000000l : 
0x0l));
-    }
-
-    for (int i = 0; i < refDouble.length; ++i) {
-      int r = mt.nextInt();
-      assertEquals(refDouble[i],
-                   ((r & 0x7fffffffl) | ((r < 0) ? 0x80000000l : 0x0l)) / 
4294967296.0,
-                   1.0e-8);
-    }
-
-  }
-
-  public static Test suite() {
-    return new TestSuite(MersenneTwisterTest.class);
-  }
-
-}

Added: 
trunk/freenet/src/org/spaceroots/mantissa/random/ScalarSampleStatistics.java
===================================================================
--- 
trunk/freenet/src/org/spaceroots/mantissa/random/ScalarSampleStatistics.java    
                            (rev 0)
+++ 
trunk/freenet/src/org/spaceroots/mantissa/random/ScalarSampleStatistics.java    
    2007-03-22 11:03:56 UTC (rev 12272)
@@ -0,0 +1,144 @@
+package org.spaceroots.mantissa.random;
+
+/** This class compute basic statistics on a scalar sample.
+ * @version $Id: ScalarSampleStatistics.java 1666 2005-12-15 16:37:55Z luc $
+ * @author L. Maisonobe
+ */
+public class ScalarSampleStatistics {
+
+  /** Number of sample points. */
+  private int n;
+
+  /** Minimal value in the sample. */
+  private double min;
+
+  /** Maximal value in the sample. */
+  private double max;
+
+  /** Sum of the sample values. */
+  private double sum;
+
+  /** Sum of the squares of the sample values. */
+  private double sum2;
+
+  /** Simple constructor.
+   * Build a new empty instance
+   */
+  public ScalarSampleStatistics() {
+    n    = 0;
+    min  = Double.NaN;
+    max  = min;
+    sum  = 0;
+    sum2 = 0;
+  }
+
+  /** Add one point to the instance.
+   * @param x value of the sample point
+   */
+  public void add(double x) {
+
+    if (n++ == 0) {
+      min  = x;
+      max  = x;
+      sum  = x;
+      sum2 = x * x;
+    } else {
+
+      if (x < min) {
+        min = x;
+      } else if (x > max) {
+        max = x;
+      }
+
+      sum  += x;
+      sum2 += x * x;
+
+    }
+
+  }
+
+  /** Add all points of an array to the instance.
+   * @param points array of points
+   */
+  public void add(double[] points) {
+    for (int i = 0; i < points.length; ++i) {
+      add(points[i]);
+    }
+  }
+
+  /** Add all the points of another sample to the instance.
+   * @param s sample to add
+   */
+  public void add(ScalarSampleStatistics s) {
+
+    if (s.n == 0) {
+      // nothing to add
+      return;
+    }
+
+    if (n == 0) {
+      n    = s.n;
+      min  = s.min;
+      max  = s.max;
+      sum  = s.sum;
+      sum2 = s.sum2;
+    } else {
+
+      n += s.n;
+
+      if (s.min < min) {
+        min = s.min;
+      } else if (s.max > max) {
+        max = s.max;
+      }
+
+      sum  += s.sum;
+      sum2 += s.sum2;
+
+    }
+
+  }
+
+  /** Get the number of points in the sample.
+   * @return number of points in the sample
+   */
+  public int size() {
+    return n;
+  }
+
+  /** Get the minimal value in the sample.
+   * @return minimal value in the sample
+   */
+  public double getMin() {
+    return min;
+  }
+
+  /** Get the maximal value in the sample.
+   * @return maximal value in the sample
+   */
+  public double getMax() {
+    return max;
+  }
+
+  /** Get the mean value of the sample.
+   * @return mean value of the sample
+   */
+  public double getMean() {
+    return (n == 0) ? 0 : (sum / n);
+  }
+
+  /** Get the standard deviation of the underlying probability law.
+   * This method estimate the standard deviation considering that the
+   * data available are only a <em>sample</em> of all possible
+   * values. This value is often called the sample standard deviation
+   * (as opposed to the population standard deviation).
+   * @return standard deviation of the underlying probability law
+   */
+  public double getStandardDeviation() {
+    if (n < 2) {
+      return 0;
+    }
+    return Math.sqrt((n * sum2 - sum * sum) / (n * (n - 1)));
+  }
+
+}

Copied: 
trunk/freenet/test/org/spaceroots/mantissa/random/MersenneTwisterTest.java 
(from rev 12271, 
trunk/freenet/src/org/spaceroots/mantissa/random/MersenneTwisterTest.java)
===================================================================
--- trunk/freenet/test/org/spaceroots/mantissa/random/MersenneTwisterTest.java  
                        (rev 0)
+++ trunk/freenet/test/org/spaceroots/mantissa/random/MersenneTwisterTest.java  
2007-03-22 11:03:56 UTC (rev 12272)
@@ -0,0 +1,316 @@
+package org.spaceroots.mantissa.random;
+
+import junit.framework.*;
+
+public class MersenneTwisterTest
+  extends TestCase {
+
+  public MersenneTwisterTest(String name) {
+    super(name);
+  }
+
+  public void testDouble() {
+    MersenneTwister mt = new MersenneTwister(195357343514l);
+    ScalarSampleStatistics sample = new ScalarSampleStatistics();
+    for (int i = 0; i < 1000; ++i) {
+      sample.add(mt.nextDouble());
+    }
+    assertEquals(0.5, sample.getMean(), 0.02);
+    assertEquals(1.0 / (2.0 * Math.sqrt(3.0)),
+                 sample.getStandardDeviation(),
+                 0.002);
+  }
+
+  public void testNextInt() {
+    MersenneTwister mt = new MersenneTwister(0x12b8a7412bb25el);
+    for (int n = 1; n < 20; ++n) {
+      int[] count = new int[n];
+      for (int k = 0; k < 10000; ++k) {
+        int l = mt.nextInt(n);
+        ++count[l];
+        assertTrue(l >= 0);
+        assertTrue(l <  n);
+      }
+      for (int i = 0; i < n; ++i) {
+        assertTrue(n * count[i] >  8800);
+        assertTrue(n * count[i] < 11100);
+      }
+    }
+  }
+
+  public void testMakotoNishimura() {
+    MersenneTwister mt = new MersenneTwister(new int[] {0x123, 0x234, 0x345, 
0x456});
+    long[] refInt = {
+      1067595299l,  955945823l,  477289528l, 4107218783l, 4228976476l, 
3344332714l, 3355579695l,  227628506l,
+       810200273l, 2591290167l, 2560260675l, 3242736208l,  646746669l, 
1479517882l, 4245472273l, 1143372638l,
+      3863670494l, 3221021970l, 1773610557l, 1138697238l, 1421897700l, 
1269916527l, 2859934041l, 1764463362l,
+      3874892047l, 3965319921l,   72549643l, 2383988930l, 2600218693l, 
3237492380l, 2792901476l,  725331109l,
+       605841842l,  271258942l,  715137098l, 3297999536l, 1322965544l, 
4229579109l, 1395091102l, 3735697720l,
+      2101727825l, 3730287744l, 2950434330l, 1661921839l, 2895579582l, 
2370511479l, 1004092106l, 2247096681l,
+      2111242379l, 3237345263l, 4082424759l,  219785033l, 2454039889l, 
3709582971l,  835606218l, 2411949883l,
+      2735205030l,  756421180l, 2175209704l, 1873865952l, 2762534237l, 
4161807854l, 3351099340l,  181129879l,
+      3269891896l,  776029799l, 2218161979l, 3001745796l, 1866825872l, 
2133627728l,   34862734l, 1191934573l,
+      3102311354l, 2916517763l, 1012402762l, 2184831317l, 4257399449l, 
2899497138l, 3818095062l, 3030756734l,
+      1282161629l,  420003642l, 2326421477l, 2741455717l, 1278020671l, 
3744179621l,  271777016l, 2626330018l,
+      2560563991l, 3055977700l, 4233527566l, 1228397661l, 3595579322l, 
1077915006l, 2395931898l, 1851927286l,
+      3013683506l, 1999971931l, 3006888962l, 1049781534l, 1488758959l, 
3491776230l,  104418065l, 2448267297l,
+      3075614115l, 3872332600l,  891912190l, 3936547759l, 2269180963l, 
2633455084l, 1047636807l, 2604612377l,
+      2709305729l, 1952216715l,  207593580l, 2849898034l,  670771757l, 
2210471108l,  467711165l,  263046873l,
+      3569667915l, 1042291111l, 3863517079l, 1464270005l, 2758321352l, 
3790799816l, 2301278724l, 3106281430l,
+         7974801l, 2792461636l,  555991332l,  621766759l, 1322453093l,  
853629228l,  686962251l, 1455120532l,
+       957753161l, 1802033300l, 1021534190l, 3486047311l, 1902128914l, 
3701138056l, 4176424663l, 1795608698l,
+       560858864l, 3737752754l, 3141170998l, 1553553385l, 3367807274l,  
711546358l, 2475125503l,  262969859l,
+       251416325l, 2980076994l, 1806565895l,  969527843l, 3529327173l, 
2736343040l, 2987196734l, 1649016367l,
+      2206175811l, 3048174801l, 3662503553l, 3138851612l, 2660143804l, 
1663017612l, 1816683231l,  411916003l,
+      3887461314l, 2347044079l, 1015311755l, 1203592432l, 2170947766l, 
2569420716l,  813872093l, 1105387678l,
+      1431142475l,  220570551l, 4243632715l, 4179591855l, 2607469131l, 
3090613241l,  282341803l, 1734241730l,
+      1391822177l, 1001254810l,  827927915l, 1886687171l, 3935097347l, 
2631788714l, 3905163266l,  110554195l,
+      2447955646l, 3717202975l, 3304793075l, 3739614479l, 3059127468l,  
953919171l, 2590123714l, 1132511021l,
+      3795593679l, 2788030429l,  982155079l, 3472349556l,  859942552l, 
2681007391l, 2299624053l,  647443547l,
+       233600422l,  608168955l, 3689327453l, 1849778220l, 1608438222l, 
3968158357l, 2692977776l, 2851872572l,
+       246750393l, 3582818628l, 3329652309l, 4036366910l, 1012970930l,  
950780808l, 3959768744l, 2538550045l,
+       191422718l, 2658142375l, 3276369011l, 2927737484l, 1234200027l, 
1920815603l, 3536074689l, 1535612501l,
+      2184142071l, 3276955054l,  428488088l, 2378411984l, 4059769550l, 
3913744741l, 2732139246l,   64369859l,
+      3755670074l,  842839565l, 2819894466l, 2414718973l, 1010060670l, 
1839715346l, 2410311136l,  152774329l,
+      3485009480l, 4102101512l, 2852724304l,  879944024l, 1785007662l, 
2748284463l, 1354768064l, 3267784736l,
+      2269127717l, 3001240761l, 3179796763l,  895723219l,  865924942l, 
4291570937l,   89355264l, 1471026971l,
+      4114180745l, 3201939751l, 2867476999l, 2460866060l, 3603874571l, 
2238880432l, 3308416168l, 2072246611l,
+      2755653839l, 3773737248l, 1709066580l, 4282731467l, 2746170170l, 
2832568330l,  433439009l, 3175778732l,
+        26248366l, 2551382801l,  183214346l, 3893339516l, 1928168445l, 
1337157619l, 3429096554l, 3275170900l,
+      1782047316l, 4264403756l, 1876594403l, 4289659572l, 3223834894l, 
1728705513l, 4068244734l, 2867840287l,
+      1147798696l,  302879820l, 1730407747l, 1923824407l, 1180597908l, 
1569786639l,  198796327l,  560793173l,
+      2107345620l, 2705990316l, 3448772106l, 3678374155l,  758635715l,  
884524671l,  486356516l, 1774865603l,
+      3881226226l, 2635213607l, 1181121587l, 1508809820l, 3178988241l, 
1594193633l, 1235154121l,  326117244l,
+      2304031425l,  937054774l, 2687415945l, 3192389340l, 2003740439l, 
1823766188l, 2759543402l,   10067710l,
+      1533252662l, 4132494984l,   82378136l,  420615890l, 3467563163l,  
541562091l, 3535949864l, 2277319197l,
+      3330822853l, 3215654174l, 4113831979l, 4204996991l, 2162248333l, 
3255093522l, 2219088909l, 2978279037l,
+       255818579l, 2859348628l, 3097280311l, 2569721123l, 1861951120l, 
2907080079l, 2719467166l,  998319094l,
+      2521935127l, 2404125338l,  259456032l, 2086860995l, 1839848496l, 
1893547357l, 2527997525l, 1489393124l,
+      2860855349l,   76448234l, 2264934035l,  744914583l, 2586791259l, 
1385380501l,   66529922l, 1819103258l,
+      1899300332l, 2098173828l, 1793831094l,  276463159l,  360132945l, 
4178212058l,  595015228l,  177071838l,
+      2800080290l, 1573557746l, 1548998935l,  378454223l, 1460534296l, 
1116274283l, 3112385063l, 3709761796l,
+       827999348l, 3580042847l, 1913901014l,  614021289l, 4278528023l, 
1905177404l,   45407939l, 3298183234l,
+      1184848810l, 3644926330l, 3923635459l, 1627046213l, 3677876759l,  
969772772l, 1160524753l, 1522441192l,
+       452369933l, 1527502551l,  832490847l, 1003299676l, 1071381111l, 
2891255476l,  973747308l, 4086897108l,
+      1847554542l, 3895651598l, 2227820339l, 1621250941l, 2881344691l, 
3583565821l, 3510404498l,  849362119l,
+       862871471l,  797858058l, 2867774932l, 2821282612l, 3272403146l, 
3997979905l,  209178708l, 1805135652l,
+         6783381l, 2823361423l,  792580494l, 4263749770l,  776439581l, 
3798193823l, 2853444094l, 2729507474l,
+      1071873341l, 1329010206l, 1289336450l, 3327680758l, 2011491779l,   
80157208l,  922428856l, 1158943220l,
+      1667230961l, 2461022820l, 2608845159l,  387516115l, 3345351910l, 
1495629111l, 4098154157l, 3156649613l,
+      3525698599l, 4134908037l,  446713264l, 2137537399l, 3617403512l,  
813966752l, 1157943946l, 3734692965l,
+      1680301658l, 3180398473l, 3509854711l, 2228114612l, 1008102291l,  
486805123l,  863791847l, 3189125290l,
+      1050308116l, 3777341526l, 4291726501l,  844061465l, 1347461791l, 
2826481581l,  745465012l, 2055805750l,
+      4260209475l, 2386693097l, 2980646741l,  447229436l, 2077782664l, 
1232942813l, 4023002732l, 1399011509l,
+      3140569849l, 2579909222l, 3794857471l,  900758066l, 2887199683l, 
1720257997l, 3367494931l, 2668921229l,
+       955539029l, 3818726432l, 1105704962l, 3889207255l, 2277369307l, 
2746484505l, 1761846513l, 2413916784l,
+      2685127085l, 4240257943l, 1166726899l, 4215215715l, 3082092067l, 
3960461946l, 1663304043l, 2087473241l,
+      4162589986l, 2507310778l, 1579665506l,  767234210l,  970676017l,  
492207530l, 1441679602l, 1314785090l,
+      3262202570l, 3417091742l, 1561989210l, 3011406780l, 1146609202l, 
3262321040l, 1374872171l, 1634688712l,
+      1280458888l, 2230023982l,  419323804l, 3262899800l,   39783310l, 
1641619040l, 1700368658l, 2207946628l,
+      2571300939l, 2424079766l,  780290914l, 2715195096l, 3390957695l,  
163151474l, 2309534542l, 1860018424l,
+       555755123l,  280320104l, 1604831083l, 2713022383l, 1728987441l, 
3639955502l,  623065489l, 3828630947l,
+      4275479050l, 3516347383l, 2343951195l, 2430677756l,  635534992l, 
3868699749l,  808442435l, 3070644069l,
+      4282166003l, 2093181383l, 2023555632l, 1568662086l, 3422372620l, 
4134522350l, 3016979543l, 3259320234l,
+      2888030729l, 3185253876l, 4258779643l, 1267304371l, 1022517473l,  
815943045l,  929020012l, 2995251018l,
+      3371283296l, 3608029049l, 2018485115l,  122123397l, 2810669150l, 
1411365618l, 1238391329l, 1186786476l,
+      3155969091l, 2242941310l, 1765554882l,  279121160l, 4279838515l, 
1641578514l, 3796324015l,   13351065l,
+       103516986l, 1609694427l,  551411743l, 2493771609l, 1316337047l, 
3932650856l, 4189700203l,  463397996l,
+      2937735066l, 1855616529l, 2626847990l,   55091862l, 3823351211l,  
753448970l, 4045045500l, 1274127772l,
+      1124182256l,   92039808l, 2126345552l,  425973257l,  386287896l, 
2589870191l, 1987762798l, 4084826973l,
+      2172456685l, 3366583455l, 3602966653l, 2378803535l, 2901764433l, 
3716929006l, 3710159000l, 2653449155l,
+      3469742630l, 3096444476l, 3932564653l, 2595257433l,  318974657l, 
3146202484l,  853571438l,  144400272l,
+      3768408841l,  782634401l, 2161109003l,  570039522l, 1886241521l,   
14249488l, 2230804228l, 1604941699l,
+      3928713335l, 3921942509l, 2155806892l,  134366254l,  430507376l, 
1924011722l,  276713377l,  196481886l,
+      3614810992l, 1610021185l, 1785757066l,  851346168l, 3761148643l, 
2918835642l, 3364422385l, 3012284466l,
+      3735958851l, 2643153892l, 3778608231l, 1164289832l,  205853021l, 
2876112231l, 3503398282l, 3078397001l,
+      3472037921l, 1748894853l, 2740861475l,  316056182l, 1660426908l,  
168885906l,  956005527l, 3984354789l,
+       566521563l, 1001109523l, 1216710575l, 2952284757l, 3834433081l, 
3842608301l, 2467352408l, 3974441264l,
+      3256601745l, 1409353924l, 1329904859l, 2307560293l, 3125217879l, 
3622920184l, 3832785684l, 3882365951l,
+      2308537115l, 2659155028l, 1450441945l, 3532257603l, 3186324194l, 
1225603425l, 1124246549l,  175808705l,
+      3009142319l, 2796710159l, 3651990107l,  160762750l, 1902254979l, 
1698648476l, 1134980669l,  497144426l,
+      3302689335l, 4057485630l, 3603530763l, 4087252587l,  427812652l,  
286876201l,  823134128l, 1627554964l,
+      3745564327l, 2589226092l, 4202024494l,   62878473l, 3275585894l, 
3987124064l, 2791777159l, 1916869511l,
+      2585861905l, 1375038919l, 1403421920l,   60249114l, 3811870450l, 
3021498009l, 2612993202l,  528933105l,
+      2757361321l, 3341402964l, 2621861700l,  273128190l, 4015252178l, 
3094781002l, 1621621288l, 2337611177l,
+      1796718448l, 1258965619l, 4241913140l, 2138560392l, 3022190223l, 
4174180924l,  450094611l, 3274724580l,
+       617150026l, 2704660665l, 1469700689l, 1341616587l,  356715071l, 
1188789960l, 2278869135l, 1766569160l,
+      2795896635l,   57824704l, 2893496380l, 1235723989l, 1630694347l, 
3927960522l,  428891364l, 1814070806l,
+      2287999787l, 4125941184l, 3968103889l, 3548724050l, 1025597707l, 
1404281500l, 2002212197l,   92429143l,
+      2313943944l, 2403086080l, 3006180634l, 3561981764l, 1671860914l, 
1768520622l, 1803542985l,  844848113l,
+      3006139921l, 1410888995l, 1157749833l, 2125704913l, 1789979528l, 
1799263423l,  741157179l, 2405862309l,
+       767040434l, 2655241390l, 3663420179l, 2172009096l, 2511931187l, 
1680542666l,  231857466l, 1154981000l,
+       157168255l, 1454112128l, 3505872099l, 1929775046l, 2309422350l, 
2143329496l, 2960716902l,  407610648l,
+      2938108129l, 2581749599l,  538837155l, 2342628867l,  430543915l,  
740188568l, 1937713272l, 3315215132l,
+      2085587024l, 4030765687l,  766054429l, 3517641839l,  689721775l, 
1294158986l, 1753287754l, 4202601348l,
+      1974852792l,   33459103l, 3568087535l, 3144677435l, 1686130825l, 
4134943013l, 3005738435l, 3599293386l,
+       426570142l,  754104406l, 3660892564l, 1964545167l,  829466833l,  
821587464l, 1746693036l, 1006492428l,
+      1595312919l, 1256599985l, 1024482560l, 1897312280l, 2902903201l,  
691790057l, 1037515867l, 3176831208l,
+      1968401055l, 2173506824l, 1089055278l, 1748401123l, 2941380082l,  
968412354l, 1818753861l, 2973200866l,
+      3875951774l, 1119354008l, 3988604139l, 1647155589l, 2232450826l, 
3486058011l, 3655784043l, 3759258462l,
+       847163678l, 1082052057l,  989516446l, 2871541755l, 3196311070l, 
3929963078l,  658187585l, 3664944641l,
+      2175149170l, 2203709147l, 2756014689l, 2456473919l, 3890267390l, 
1293787864l, 2830347984l, 3059280931l,
+      4158802520l, 1561677400l, 2586570938l,  783570352l, 1355506163l,   
31495586l, 3789437343l, 3340549429l,
+      2092501630l,  896419368l,  671715824l, 3530450081l, 3603554138l, 
1055991716l, 3442308219l, 1499434728l,
+      3130288473l, 3639507000l,   17769680l, 2259741420l,  487032199l, 
4227143402l, 3693771256l, 1880482820l,
+      3924810796l,  381462353l, 4017855991l, 2452034943l, 2736680833l, 
2209866385l, 2128986379l,  437874044l,
+       595759426l,  641721026l, 1636065708l, 3899136933l,  629879088l, 
3591174506l,  351984326l, 2638783544l,
+      2348444281l, 2341604660l, 2123933692l,  143443325l, 1525942256l,  
364660499l,  599149312l,  939093251l,
+      1523003209l,  106601097l,  376589484l, 1346282236l, 1297387043l,  
764598052l, 3741218111l,  933457002l,
+      1886424424l, 3219631016l,  525405256l, 3014235619l,  323149677l, 
2038881721l, 4100129043l, 2851715101l,
+      2984028078l, 1888574695l, 2014194741l, 3515193880l, 4180573530l, 
3461824363l, 2641995497l, 3179230245l,
+      2902294983l, 2217320456l, 4040852155l, 1784656905l, 3311906931l,   
87498458l, 2752971818l, 2635474297l,
+      2831215366l, 3682231106l, 2920043893l, 3772929704l, 2816374944l,  
309949752l, 2383758854l,  154870719l,
+       385111597l, 1191604312l, 1840700563l,  872191186l, 2925548701l, 
1310412747l, 2102066999l, 1504727249l,
+      3574298750l, 1191230036l, 3330575266l, 3180292097l, 3539347721l,  
681369118l, 3305125752l, 3648233597l,
+       950049240l, 4173257693l, 1760124957l,  512151405l,  681175196l,  
580563018l, 1169662867l, 4015033554l,
+      2687781101l,  699691603l, 2673494188l, 1137221356l,  123599888l,  
472658308l, 1053598179l, 1012713758l,
+      3481064843l, 3759461013l, 3981457956l, 3830587662l, 1877191791l, 
3650996736l,  988064871l, 3515461600l,
+      4089077232l, 2225147448l, 1249609188l, 2643151863l, 3896204135l, 
2416995901l, 1397735321l, 3460025646l 
+    };
+    double[] refDouble = {
+      0.76275443, 0.99000644, 0.98670464, 0.10143112, 0.27933125, 0.69867227, 
0.94218740, 0.03427201,
+      0.78842173, 0.28180608, 0.92179002, 0.20785655, 0.54534773, 0.69644020, 
0.38107718, 0.23978165,
+      0.65286910, 0.07514568, 0.22765211, 0.94872929, 0.74557914, 0.62664415, 
0.54708246, 0.90959343,
+      0.42043116, 0.86334511, 0.19189126, 0.14718544, 0.70259889, 0.63426346, 
0.77408121, 0.04531601,
+      0.04605807, 0.88595519, 0.69398270, 0.05377184, 0.61711170, 0.05565708, 
0.10133577, 0.41500776,
+      0.91810699, 0.22320679, 0.23353705, 0.92871862, 0.98897234, 0.19786706, 
0.80558809, 0.06961067,
+      0.55840445, 0.90479405, 0.63288060, 0.95009721, 0.54948447, 0.20645042, 
0.45000959, 0.87050869,
+      0.70806991, 0.19406895, 0.79286390, 0.49332866, 0.78483914, 0.75145146, 
0.12341941, 0.42030252,
+      0.16728160, 0.59906494, 0.37575460, 0.97815160, 0.39815952, 0.43595080, 
0.04952478, 0.33917805,
+      0.76509902, 0.61034321, 0.90654701, 0.92915732, 0.85365931, 0.18812377, 
0.65913428, 0.28814566,
+      0.59476081, 0.27835931, 0.60722542, 0.68310435, 0.69387186, 0.03699800, 
0.65897714, 0.17527003,
+      0.02889304, 0.86777366, 0.12352068, 0.91439461, 0.32022990, 0.44445731, 
0.34903686, 0.74639273,
+      0.65918367, 0.92492794, 0.31872642, 0.77749724, 0.85413832, 0.76385624, 
0.32744211, 0.91326300,
+      0.27458185, 0.22190155, 0.19865383, 0.31227402, 0.85321225, 0.84243342, 
0.78544200, 0.71854080,
+      0.92503892, 0.82703064, 0.88306297, 0.47284073, 0.70059042, 0.48003761, 
0.38671694, 0.60465770,
+      0.41747204, 0.47163243, 0.72750808, 0.65830223, 0.10955369, 0.64215401, 
0.23456345, 0.95944940,
+      0.72822249, 0.40888451, 0.69980355, 0.26677428, 0.57333635, 0.39791582, 
0.85377858, 0.76962816,
+      0.72004885, 0.90903087, 0.51376506, 0.37732665, 0.12691640, 0.71249738, 
0.81217908, 0.37037313,
+      0.32772374, 0.14238259, 0.05614811, 0.74363008, 0.39773267, 0.94859135, 
0.31452454, 0.11730313,
+      0.62962618, 0.33334237, 0.45547255, 0.10089665, 0.56550662, 0.60539371, 
0.16027624, 0.13245301,
+      0.60959939, 0.04671662, 0.99356286, 0.57660859, 0.40269560, 0.45274629, 
0.06699735, 0.85064246,
+      0.87742744, 0.54508392, 0.87242982, 0.29321385, 0.67660627, 0.68230715, 
0.79052073, 0.48592054,
+      0.25186266, 0.93769755, 0.28565487, 0.47219067, 0.99054882, 0.13155240, 
0.47110470, 0.98556600,
+      0.84397623, 0.12875246, 0.90953202, 0.49129015, 0.23792727, 0.79481194, 
0.44337770, 0.96564297,
+      0.67749118, 0.55684872, 0.27286897, 0.79538393, 0.61965356, 0.22487929, 
0.02226018, 0.49248200,
+      0.42247006, 0.91797788, 0.99250134, 0.23449967, 0.52531508, 0.10246337, 
0.78685622, 0.34310922,
+      0.89892996, 0.40454552, 0.68608407, 0.30752487, 0.83601319, 0.54956031, 
0.63777550, 0.82199797,
+      0.24890696, 0.48801123, 0.48661910, 0.51223987, 0.32969635, 0.31075073, 
0.21393155, 0.73453207,
+      0.15565705, 0.58584522, 0.28976728, 0.97621478, 0.61498701, 0.23891470, 
0.28518540, 0.46809591,
+      0.18371914, 0.37597910, 0.13492176, 0.66849449, 0.82811466, 0.56240330, 
0.37548956, 0.27562998,
+      0.27521910, 0.74096121, 0.77176757, 0.13748143, 0.99747138, 0.92504502, 
0.09175241, 0.21389176,
+      0.21766512, 0.31183245, 0.23271221, 0.21207367, 0.57903312, 0.77523344, 
0.13242613, 0.31037988,
+      0.01204835, 0.71652949, 0.84487594, 0.14982178, 0.57423142, 0.45677888, 
0.48420169, 0.53465428,
+      0.52667473, 0.46880526, 0.49849733, 0.05670710, 0.79022476, 0.03872047, 
0.21697212, 0.20443086,
+      0.28949326, 0.81678186, 0.87629474, 0.92297064, 0.27373097, 0.84625273, 
0.51505586, 0.00582792,
+      0.33295971, 0.91848412, 0.92537226, 0.91760033, 0.07541125, 0.71745848, 
0.61158698, 0.00941650,
+      0.03135554, 0.71527471, 0.24821915, 0.63636652, 0.86159918, 0.26450229, 
0.60160194, 0.35557725,
+      0.24477500, 0.07186456, 0.51757096, 0.62120362, 0.97981062, 0.69954667, 
0.21065616, 0.13382753,
+      0.27693186, 0.59644095, 0.71500764, 0.04110751, 0.95730081, 0.91600724, 
0.47704678, 0.26183479,
+      0.34706971, 0.07545431, 0.29398385, 0.93236070, 0.60486023, 0.48015011, 
0.08870451, 0.45548581,
+      0.91872718, 0.38142712, 0.10668643, 0.01397541, 0.04520355, 0.93822273, 
0.18011940, 0.57577277,
+      0.91427606, 0.30911399, 0.95853475, 0.23611214, 0.69619891, 0.69601980, 
0.76765372, 0.58515930,
+      0.49479057, 0.11288752, 0.97187699, 0.32095365, 0.57563608, 0.40760618, 
0.78703383, 0.43261152,
+      0.90877651, 0.84686346, 0.10599030, 0.72872803, 0.19315490, 0.66152912, 
0.10210518, 0.06257876,
+      0.47950688, 0.47062066, 0.72701157, 0.48915116, 0.66110261, 0.60170685, 
0.24516994, 0.12726050,
+      0.03451185, 0.90864994, 0.83494878, 0.94800035, 0.91035206, 0.14480751, 
0.88458997, 0.53498312,
+      0.15963215, 0.55378627, 0.35171349, 0.28719791, 0.09097957, 0.00667896, 
0.32309622, 0.87561479,
+      0.42534520, 0.91748977, 0.73908457, 0.41793223, 0.99279792, 0.87908370, 
0.28458072, 0.59132853,
+      0.98672190, 0.28547393, 0.09452165, 0.89910674, 0.53681109, 0.37931425, 
0.62683489, 0.56609740,
+      0.24801549, 0.52948179, 0.98328855, 0.66403523, 0.55523786, 0.75886666, 
0.84784685, 0.86829981,
+      0.71448906, 0.84670080, 0.43922919, 0.20771016, 0.64157936, 0.25664246, 
0.73055695, 0.86395782,
+      0.65852932, 0.99061803, 0.40280575, 0.39146298, 0.07291005, 0.97200603, 
0.20555729, 0.59616495,
+      0.08138254, 0.45796388, 0.33681125, 0.33989127, 0.18717090, 0.53545811, 
0.60550838, 0.86520709,
+      0.34290701, 0.72743276, 0.73023855, 0.34195926, 0.65019733, 0.02765254, 
0.72575740, 0.32709576,
+      0.03420866, 0.26061893, 0.56997511, 0.28439072, 0.84422744, 0.77637570, 
0.55982168, 0.06720327,
+      0.58449067, 0.71657369, 0.15819609, 0.58042821, 0.07947911, 0.40193792, 
0.11376012, 0.88762938,
+      0.67532159, 0.71223735, 0.27829114, 0.04806073, 0.21144026, 0.58830274, 
0.04140071, 0.43215628,
+      0.12952729, 0.94668759, 0.87391019, 0.98382450, 0.27750768, 0.90849647, 
0.90962737, 0.59269720,
+      0.96102026, 0.49544979, 0.32007095, 0.62585546, 0.03119821, 0.85953001, 
0.22017528, 0.05834068,
+      0.80731217, 0.53799961, 0.74166948, 0.77426600, 0.43938444, 0.54862081, 
0.58575513, 0.15886492,
+      0.73214332, 0.11649057, 0.77463977, 0.85788827, 0.17061997, 0.66838056, 
0.96076133, 0.07949296,
+      0.68521946, 0.89986254, 0.05667410, 0.12741385, 0.83470977, 0.63969104, 
0.46612929, 0.10200126,
+      0.01194925, 0.10476340, 0.90285217, 0.31221221, 0.32980614, 0.46041971, 
0.52024973, 0.05425470,
+      0.28330912, 0.60426543, 0.00598243, 0.97244013, 0.21135841, 0.78561597, 
0.78428734, 0.63422849,
+      0.32909934, 0.44771136, 0.27380750, 0.14966697, 0.18156268, 0.65686758, 
0.28726350, 0.97074787,
+      0.63676171, 0.96649494, 0.24526295, 0.08297372, 0.54257548, 0.03166785, 
0.33735355, 0.15946671,
+      0.02102971, 0.46228045, 0.11892296, 0.33408336, 0.29875681, 0.29847692, 
0.73767569, 0.02080745,
+      0.62980060, 0.08082293, 0.22993106, 0.25031439, 0.87787525, 0.45150053, 
0.13673441, 0.63407612,
+      0.97907688, 0.52241942, 0.50580158, 0.06273902, 0.05270283, 0.77031811, 
0.05113352, 0.24393329,
+      0.75036441, 0.37436336, 0.22877652, 0.59975358, 0.85707591, 0.88691457, 
0.85547165, 0.36641027,
+      0.58720133, 0.45462835, 0.09243817, 0.32981586, 0.07820411, 0.25421519, 
0.36004706, 0.60092307,
+      0.46192412, 0.36758683, 0.98424170, 0.08019934, 0.68594024, 0.45826386, 
0.29962317, 0.79365413,
+      0.89231296, 0.49478547, 0.87645944, 0.23590734, 0.28106737, 0.75026285, 
0.08136314, 0.79582424,
+      0.76010628, 0.82792971, 0.27947652, 0.72482861, 0.82191216, 0.46171689, 
0.79189752, 0.96043686,
+      0.51609668, 0.88995725, 0.28998963, 0.55191845, 0.03934737, 0.83033700, 
0.49553013, 0.98009549,
+      0.19017594, 0.98347750, 0.33452066, 0.87144372, 0.72106301, 0.71272114, 
0.71465963, 0.88361677,
+      0.85571283, 0.73782329, 0.20920458, 0.34855153, 0.46766817, 0.02780062, 
0.74898344, 0.03680650,
+      0.44866557, 0.77426312, 0.91025891, 0.25195236, 0.87319953, 0.63265037, 
0.25552148, 0.27422476,
+      0.95217406, 0.39281839, 0.66441573, 0.09158900, 0.94515992, 0.07800798, 
0.02507888, 0.39901462,
+      0.17382573, 0.12141278, 0.85502334, 0.19902911, 0.02160210, 0.44460522, 
0.14688742, 0.68020336,
+      0.71323733, 0.60922473, 0.95400380, 0.99611159, 0.90897777, 0.41073520, 
0.66206647, 0.32064685,
+      0.62805003, 0.50677209, 0.52690101, 0.87473387, 0.73918362, 0.39826974, 
0.43683919, 0.80459118,
+      0.32422684, 0.01958019, 0.95319576, 0.98326137, 0.83931735, 0.69060863, 
0.33671416, 0.68062550,
+      0.65152380, 0.33392969, 0.03451730, 0.95227244, 0.68200635, 0.85074171, 
0.64721009, 0.51234433,
+      0.73402047, 0.00969637, 0.93835057, 0.80803854, 0.31485260, 0.20089527, 
0.01323282, 0.59933780,
+      0.31584602, 0.20209563, 0.33754800, 0.68604181, 0.24443049, 0.19952227, 
0.78162632, 0.10336988,
+      0.11360736, 0.23536740, 0.23262256, 0.67803776, 0.48749791, 0.74658435, 
0.92156640, 0.56706407,
+      0.36683221, 0.99157136, 0.23421374, 0.45183767, 0.91609720, 0.85573315, 
0.37706276, 0.77042618,
+      0.30891908, 0.40709595, 0.06944866, 0.61342849, 0.88817388, 0.58734506, 
0.98711323, 0.14744128,
+      0.63242656, 0.87704136, 0.68347125, 0.84446569, 0.43265239, 0.25146321, 
0.04130111, 0.34259839,
+      0.92697368, 0.40878778, 0.56990338, 0.76204273, 0.19820348, 0.66314909, 
0.02482844, 0.06669207,
+      0.50205581, 0.26084093, 0.65139159, 0.41650223, 0.09733904, 0.56344203, 
0.62651696, 0.67332139,
+      0.58037374, 0.47258086, 0.21010758, 0.05713135, 0.89390629, 0.10781246, 
0.32037450, 0.07628388,
+      0.34227964, 0.42190597, 0.58201860, 0.77363549, 0.49595133, 0.86031236, 
0.83906769, 0.81098161,
+      0.26694195, 0.14215941, 0.88210306, 0.53634237, 0.12090720, 0.82480459, 
0.75930318, 0.31847147,
+      0.92768077, 0.01037616, 0.56201727, 0.88107122, 0.35925856, 0.85860762, 
0.61109408, 0.70408301,
+      0.58434977, 0.92192494, 0.62667915, 0.75988365, 0.06858761, 0.36156496, 
0.58057195, 0.13636150,
+      0.57719713, 0.59340255, 0.63530602, 0.22976282, 0.71915530, 0.41162531, 
0.63979565, 0.09931342,
+      0.79344045, 0.10893790, 0.84450224, 0.23122236, 0.99485593, 0.73637397, 
0.17276368, 0.13357764,
+      0.74965804, 0.64991737, 0.61990341, 0.41523170, 0.05878239, 0.05687301, 
0.05497131, 0.42868366,
+      0.42571090, 0.25810502, 0.89642955, 0.30439758, 0.39310223, 0.11357431, 
0.04288255, 0.23397550,
+      0.11200634, 0.85621396, 0.89733974, 0.37508865, 0.42077265, 0.68597384, 
0.72781399, 0.19296476,
+      0.61699087, 0.31667128, 0.67756410, 0.00177323, 0.05725176, 0.79474693, 
0.18885238, 0.06724856,
+      0.68193156, 0.42202167, 0.22082041, 0.28554673, 0.64995708, 0.87851940, 
0.29124547, 0.61009521,
+      0.87374537, 0.05743712, 0.69902994, 0.81925115, 0.45653873, 0.37236821, 
0.31118709, 0.52734307,
+      0.39672836, 0.38185294, 0.30163915, 0.17374510, 0.04913278, 0.90404879, 
0.25742801, 0.58266467,
+      0.97663209, 0.79823377, 0.36437958, 0.15206043, 0.26529938, 0.22690047, 
0.05839021, 0.84721160,
+      0.18622435, 0.37809403, 0.55706977, 0.49828704, 0.47659049, 0.24289680, 
0.88477595, 0.07807463,
+      0.56245739, 0.73490635, 0.21099431, 0.13164942, 0.75840044, 0.66877037, 
0.28988183, 0.44046090,
+      0.24967434, 0.80048356, 0.26029740, 0.30416821, 0.64151867, 0.52067892, 
0.12880774, 0.85465381,
+      0.02690525, 0.19149288, 0.49630295, 0.79682619, 0.43566145, 0.00288078, 
0.81484193, 0.03763639,
+      0.68529083, 0.01339574, 0.38405386, 0.30537067, 0.22994703, 0.44000045, 
0.27217985, 0.53831243,
+      0.02870435, 0.86282045, 0.61831306, 0.09164956, 0.25609707, 0.07445781, 
0.72185784, 0.90058883,
+      0.30070608, 0.94476583, 0.56822213, 0.21933909, 0.96772793, 0.80063440, 
0.26307906, 0.31183306,
+      0.16501252, 0.55436179, 0.68562285, 0.23829083, 0.86511559, 0.57868991, 
0.81888344, 0.20126869,
+      0.93172350, 0.66028129, 0.21786948, 0.78515828, 0.10262106, 0.35390326, 
0.79303876, 0.63427924,
+      0.90479631, 0.31024934, 0.60635447, 0.56198079, 0.63573813, 0.91854197, 
0.99701497, 0.83085849,
+      0.31692291, 0.01925964, 0.97446405, 0.98751283, 0.60944293, 0.13751018, 
0.69519957, 0.68956636,
+      0.56969015, 0.46440193, 0.88341765, 0.36754434, 0.89223647, 0.39786427, 
0.85055280, 0.12749961,
+      0.79452122, 0.89449784, 0.14567830, 0.45716830, 0.74822309, 0.28200437, 
0.42546044, 0.17464886,
+      0.68308746, 0.65496587, 0.52935411, 0.12736159, 0.61523955, 0.81590528, 
0.63107864, 0.39786553,
+      0.20102294, 0.53292914, 0.75485590, 0.59847044, 0.32861691, 0.12125866, 
0.58917183, 0.07638293,
+      0.86845380, 0.29192617, 0.03989733, 0.52180460, 0.32503407, 0.64071852, 
0.69516575, 0.74254998,
+      0.54587026, 0.48713246, 0.32920155, 0.08719954, 0.63497059, 0.54328459, 
0.64178757, 0.45583809,
+      0.70694291, 0.85212760, 0.86074305, 0.33163422, 0.85739792, 0.59908488, 
0.74566046, 0.72157152
+    };
+
+    for (int i = 0; i < refInt.length; ++i) {
+      int r = mt.nextInt();
+      assertEquals(refInt[i], (r & 0x7fffffffl) | ((r < 0) ? 0x80000000l : 
0x0l));
+    }
+
+    for (int i = 0; i < refDouble.length; ++i) {
+      int r = mt.nextInt();
+      assertEquals(refDouble[i],
+                   ((r & 0x7fffffffl) | ((r < 0) ? 0x80000000l : 0x0l)) / 
4294967296.0,
+                   1.0e-8);
+    }
+
+  }
+
+  public static Test suite() {
+    return new TestSuite(MersenneTwisterTest.class);
+  }
+
+}

Added: 
trunk/freenet/test/org/spaceroots/mantissa/random/ScalarSampleStatisticsTest.java
===================================================================
--- 
trunk/freenet/test/org/spaceroots/mantissa/random/ScalarSampleStatisticsTest.java
                           (rev 0)
+++ 
trunk/freenet/test/org/spaceroots/mantissa/random/ScalarSampleStatisticsTest.java
   2007-03-22 11:03:56 UTC (rev 12272)
@@ -0,0 +1,86 @@
+package org.spaceroots.mantissa.random;
+
+import junit.framework.*;
+
+public class ScalarSampleStatisticsTest
+  extends TestCase {
+
+  public ScalarSampleStatisticsTest(String name) {
+    super(name);
+    points = null;
+  }
+
+  public void testBasicStats() {
+
+    ScalarSampleStatistics sample = new ScalarSampleStatistics();
+    for (int i = 0; i < points.length; ++i) {
+      sample.add(points[i]);
+    }
+
+    assertEquals(points.length, sample.size());
+    assertEquals(-5.0, sample.getMin(), 1.0e-12);
+    assertEquals(10.4, sample.getMax(), 1.0e-12);
+    assertEquals( 3.0, sample.getMean(), 1.0e-12);
+    assertEquals( 3.920034013457876, sample.getStandardDeviation(),
+                  1.0e-12);
+
+  }
+
+  public void testAddSample() {
+
+    ScalarSampleStatistics all  = new ScalarSampleStatistics();
+    ScalarSampleStatistics even = new ScalarSampleStatistics();
+    ScalarSampleStatistics odd  = new ScalarSampleStatistics();
+    for (int i = 0; i < points.length; ++i) {
+      all.add(points[i]);
+      if (i % 2 == 0) {
+        even.add(points[i]);
+      } else {
+        odd.add(points[i]);
+      }
+    }
+
+    even.add(odd);
+
+    assertEquals(all.size(), even.size());
+    assertEquals(all.getMin(), even.getMin(), 1.0e-12);
+    assertEquals(all.getMax(), even.getMax(), 1.0e-12);
+    assertEquals(all.getMean(), even.getMean(), 1.0e-12);
+    assertEquals(all.getStandardDeviation(), even.getStandardDeviation(),
+                 1.0e-12);
+
+  }
+
+  public void testAddArray() {
+
+    ScalarSampleStatistics loop   = new ScalarSampleStatistics();
+    ScalarSampleStatistics direct = new ScalarSampleStatistics();
+    for (int i = 0; i < points.length; ++i) {
+      loop.add(points[i]);
+    }
+    direct.add(points);
+
+    assertEquals(loop.size(), direct.size());
+    assertEquals(loop.getMin(), direct.getMin(), 1.0e-12);
+    assertEquals(loop.getMax(), direct.getMax(), 1.0e-12);
+    assertEquals(loop.getMean(), direct.getMean(), 1.0e-12);
+    assertEquals(loop.getStandardDeviation(), direct.getStandardDeviation(),
+                 1.0e-12);
+
+  }
+
+  public void setUp() {
+    points = new double[] {1.0, 4.2, -5, 4.0, 2.9, 10.4, 0.0, 4.1, 4.2, 4.2};
+  }
+
+  public void tearDown() {
+    points = null;
+  }
+
+  public static Test suite() {
+    return new TestSuite(ScalarSampleStatisticsTest.class);
+  }
+
+  private double[] points;
+
+}


Reply via email to