001/* 002 * Java Genetic Algorithm Library (jenetics-3.9.0). 003 * Copyright (c) 2007-2017 Franz Wilhelmstötter 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 * Author: 018 * Franz Wilhelmstötter (franz.wilhelmstoetter@gmx.at) 019 */ 020package org.jenetics.util; 021 022import static java.lang.String.format; 023import static java.util.Objects.requireNonNull; 024import static org.jenetics.internal.util.Equality.eq; 025 026import java.io.Serializable; 027 028import org.jenetics.internal.math.arithmetic; 029import org.jenetics.internal.math.random; 030import org.jenetics.internal.util.Equality; 031import org.jenetics.internal.util.Hash; 032 033/** 034 * This class implements a linear congruential PRNG with additional bit-shift 035 * transition. The base recursion 036 * <p> 037 * <img 038 * alt="r_{i+1} = (a\cdot r_i + b) \mod 2^{64}" 039 * src="doc-files/lcg-recursion.gif" 040 * > 041 * </p> 042 * is followed by a non-linear transformation 043 * <p> 044 * <img 045 * alt="\begin{eqnarray*} 046 * t &=& r_i \\ 047 * t &=& t \oplus (t >> 17) \\ 048 * t &=& t \oplus (t << 31) \\ 049 * t &=& t \oplus (t >> 8) 050 * \end{eqnarray*}" 051 * src="doc-files/lcg-non-linear.gif" 052 * > 053 * </p> 054 * which destroys the lattice structure introduced by the recursion. The period 055 * of this PRNG is 2<sup>64</sup>, {@code iff} <i>b</i> is odd and <i>a</i> 056 * {@code mod} 4 = 1. 057 * <p> 058 * 059 * <em> 060 * This is an re-implementation of the 061 * <a href="https://github.com/rabauke/trng4/blob/master/src/lcg64_shift.hpp"> 062 * trng::lcg64_shift</a> PRNG class of the 063 * <a href="http://numbercrunch.de/trng/">TRNG</a> library created by Heiko 064 * Bauke.</em> 065 * 066 * <p> 067 * <strong>Not that the base implementation of the {@code LCG64ShiftRandom} 068 * class is not thread-safe.</strong> If multiple threads requests random 069 * numbers from this class, it <i>must</i> be synchronized externally. 070 * Alternatively you can use the thread-safe implementations 071 * {@link LCG64ShiftRandom.ThreadSafe} or {@link LCG64ShiftRandom.ThreadLocal}. 072 * 073 * @see <a href="http://numbercrunch.de/trng/">TRNG</a> 074 * @see RandomRegistry 075 * 076 * @deprecated This random class implementation has been moved to a separate 077 * module. Use the implementation of the 078 * <a href="https://github.com/jenetics/prngine">PRNGine</a> 079 * project instead. 080 * 081 * @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a> 082 * @since 1.1 083 * @version 2.0 084 */ 085@Deprecated 086public class LCG64ShiftRandom extends Random64 { 087 088 private static final long serialVersionUID = 1L; 089 090 /** 091 * This class represents a <i>thread local</i> implementation of the 092 * {@code LCG64ShiftRandom} PRNG. 093 * 094 * It's recommended to initialize the {@code RandomRegistry} the following 095 * way: 096 * 097 * <pre>{@code 098 * // Register the PRNG with the default parameters. 099 * RandomRegistry.setRandom(new LCG64ShiftRandom.ThreadLocal()); 100 * 101 * // Register the PRNG with the {@code LECUYER3} parameters. 102 * RandomRegistry.setRandom(new LCG64ShiftRandom.ThreadLocal( 103 * LCG64ShiftRandom.LECUYER3 104 * )); 105 * }</pre> 106 * 107 * Be aware, that calls of the {@code setSeed(long)} method will throw an 108 * {@code UnsupportedOperationException} for <i>thread local</i> instances. 109 * <pre>{@code 110 * RandomRegistry.setRandom(new LCG64ShiftRandom.ThreadLocal()); 111 * 112 * // Will throw 'UnsupportedOperationException'. 113 * RandomRegistry.getRandom().setSeed(1234); 114 * }</pre> 115 * 116 * @deprecated This random class implementation has been moved to a separate 117 * module. Use the implementation of the 118 * <a href="https://github.com/jenetics/prngine">PRNGine</a> 119 * project instead. 120 * 121 * @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a> 122 * @since 1.1 123 * @version 3.0 124 */ 125 @Deprecated 126 public static final class ThreadLocal 127 extends java.lang.ThreadLocal<LCG64ShiftRandom> 128 { 129 private static final long STEP_BASE = 1L << 56; 130 131 private int _block = 0; 132 private long _seed = random.seed(); 133 134 private final Param _param; 135 136 /** 137 * Create a new <i>thread local</i> instance of the 138 * {@code LCG64ShiftRandom} PRNG with the {@code DEFAULT} parameters. 139 */ 140 public ThreadLocal() { 141 this(Param.DEFAULT); 142 } 143 144 /** 145 * Create a new <i>thread local</i> instance of the 146 * {@code LCG64ShiftRandom} PRNG with the given parameters. 147 * 148 * @param param the LC parameters. 149 * @throws NullPointerException if the given parameters are null. 150 */ 151 public ThreadLocal(final Param param) { 152 _param = requireNonNull(param, "PRNG param must not be null."); 153 } 154 155 /** 156 * Create a new PRNG using <i>block splitting</i> for guaranteeing well 157 * distributed PRN for every thread. 158 * 159 * <p> 160 * <strong>Tina’s Random Number Generator Library</strong> 161 * <br> 162 * <em>Chapter 2. Pseudo-random numbers for parallel Monte Carlo 163 * simulations, Page 7</em> 164 * <br> 165 * <small>Heiko Bauke</small> 166 * <br> 167 * [<a href="http://numbercrunch.de/trng/trng.pdf"> 168 * http://numbercrunch.de/trng/trng.pdf 169 * </a>]. 170 */ 171 @Override 172 protected synchronized LCG64ShiftRandom initialValue() { 173 if (_block > 127) { 174 _block = 0; 175 _seed = random.seed(); 176 } 177 178 final LCG64ShiftRandom random = new TLLCG64ShiftRandom(_seed, _param); 179 random.jump(_block++*STEP_BASE); 180 return random; 181 } 182 183 } 184 185 private static final class TLLCG64ShiftRandom extends LCG64ShiftRandom { 186 private static final long serialVersionUID = 1L; 187 188 private final Boolean _sentry = Boolean.TRUE; 189 190 private TLLCG64ShiftRandom(final long seed, final Param param) { 191 super(param, seed); 192 } 193 194 @Override 195 public void setSeed(final long seed) { 196 if (_sentry != null) { 197 throw new UnsupportedOperationException( 198 "The 'setSeed(long)' method is not supported " + 199 "for thread local instances." 200 ); 201 } 202 } 203 204 } 205 206 /** 207 * This is a <i>thread safe</i> variation of the this PRNG—by 208 * synchronizing the random number generation. 209 * 210 * @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a> 211 * @since 1.1 212 * @version 3.0 213 */ 214 @Deprecated 215 public static final class ThreadSafe extends LCG64ShiftRandom { 216 private static final long serialVersionUID = 1L; 217 218 /** 219 * Create a new PRNG instance with the given parameter and seed. 220 * 221 * @param seed the seed of the PRNG. 222 * @param param the parameter of the PRNG. 223 * @throws NullPointerException if the given {@code param} is null. 224 * 225 * @deprecated Use {@code LCG64ShiftRandom.ThreadSafe(Param, long)} 226 * instead. 227 */ 228 @Deprecated 229 public ThreadSafe(final long seed, final Param param) { 230 super(param, seed); 231 } 232 233 /** 234 * Create a new PRNG instance with the given parameter and seed. 235 * 236 * @param seed the seed of the PRNG. 237 * @param param the parameter of the PRNG. 238 * @throws NullPointerException if the given {@code param} is null. 239 */ 240 public ThreadSafe(final Param param, final long seed) { 241 super(param, seed); 242 } 243 244 /** 245 * Create a new PRNG instance with {@link Param#DEFAULT} parameter and 246 * the given seed. 247 * 248 * @param seed the seed of the PRNG 249 */ 250 public ThreadSafe(final long seed) { 251 this(Param.DEFAULT, seed); 252 } 253 254 /** 255 * Create a new PRNG instance with the given parameter and a safe 256 * default seed. 257 * 258 * @param param the PRNG parameter. 259 * @throws NullPointerException if the given {@code param} is null. 260 */ 261 public ThreadSafe(final Param param) { 262 this(param, random.seed()); 263 } 264 265 /** 266 * Create a new PRNG instance with {@link Param#DEFAULT} parameter and 267 * a safe seed. 268 */ 269 public ThreadSafe() { 270 this(Param.DEFAULT, random.seed()); 271 } 272 273 @Override 274 public synchronized void setSeed(final long seed) { 275 super.setSeed(seed); 276 } 277 278 @Override 279 public synchronized long nextLong() { 280 return super.nextLong(); 281 } 282 283 @Override 284 public synchronized void split(final int p, final int s) { 285 super.split(p, s); 286 } 287 288 @Override 289 public synchronized void jump2(final int s) { 290 super.jump2(s); 291 } 292 293 @Override 294 public synchronized void jump(final long step) { 295 super.jump(step); 296 } 297 298 } 299 300 /** 301 * Parameter class for the {@code LCG64ShiftRandom} generator, for the 302 * parameters <i>a</i> and <i>b</i> of the LC recursion 303 * <i>r<sub>i+1</sub> = a · r<sub>i</sub> + b</i> mod <i>2<sup>64</sup></i>. 304 * 305 * @author <a href="mailto:franz.wilhelmstoetter@gmx.at">Franz Wilhelmstötter</a> 306 * @since 1.1 307 * @version 2.0 308 */ 309 @Deprecated 310 public static final class Param implements Serializable { 311 312 private static final long serialVersionUID = 1L; 313 314 /** 315 * The default PRNG parameters: a = 0xFBD19FBBC5C07FF5L; b = 1 316 */ 317 public static final Param DEFAULT = Param.of(0xFBD19FBBC5C07FF5L, 1L); 318 319 /** 320 * LEcuyer 1 parameters: a = 0x27BB2EE687B0B0FDL; b = 1 321 */ 322 public static final Param LECUYER1 = Param.of(0x27BB2EE687B0B0FDL, 1L); 323 324 /** 325 * LEcuyer 2 parameters: a = 0x2C6FE96EE78B6955L; b = 1 326 */ 327 public static final Param LECUYER2 = Param.of(0x2C6FE96EE78B6955L, 1L); 328 329 /** 330 * LEcuyer 3 parameters: a = 0x369DEA0F31A53F85L; b = 1 331 */ 332 public static final Param LECUYER3 = Param.of(0x369DEA0F31A53F85L, 1L); 333 334 335 /** 336 * The parameter <i>a</i> of the LC recursion. 337 */ 338 public final long a; 339 340 /** 341 * The parameter <i>b</i> of the LC recursion. 342 */ 343 public final long b; 344 345 /** 346 * Create a new parameter object. 347 * 348 * @param a the parameter <i>a</i> of the LC recursion. 349 * @param b the parameter <i>b</i> of the LC recursion. 350 */ 351 private Param(final long a, final long b) { 352 this.a = a; 353 this.b = b; 354 } 355 356 public static Param of(final long a, final long b) { 357 return new Param(a, b); 358 } 359 360 @Override 361 public int hashCode() { 362 return 31*(int)(a^(a >>> 32)) + 31*(int)(b^(b >>> 32)); 363 } 364 365 @Override 366 public boolean equals(final Object obj) { 367 return obj instanceof Param && 368 ((Param)obj).a == a && 369 ((Param)obj).b == b; 370 } 371 372 @Override 373 public String toString() { 374 return format("%s[a=%d, b=%d]", getClass().getName(), a, b); 375 } 376 } 377 378 /** 379 * Represents the state of this random engine 380 */ 381 private final static class State implements Serializable { 382 private static final long serialVersionUID = 1L; 383 384 long _r; 385 386 State(final long seed) { 387 setSeed(seed); 388 } 389 390 void setSeed(final long seed) { 391 _r = seed; 392 } 393 394 @Override 395 public int hashCode() { 396 return Hash.of(getClass()).and(_r).value(); 397 } 398 399 @Override 400 public boolean equals(final Object obj) { 401 return obj instanceof State && ((State)obj)._r == _r; 402 } 403 404 @Override 405 public String toString() { 406 return format("State[%d]", _r); 407 } 408 } 409 410 411 private Param _param; 412 private final State _state; 413 414 /** 415 * Create a new PRNG instance with the given parameter and seed. 416 * 417 * @param param the parameter of the PRNG. 418 * @param seed the seed of the PRNG. 419 * @throws NullPointerException if the given {@code param} is null. 420 */ 421 public LCG64ShiftRandom(final Param param, final long seed) { 422 _param = requireNonNull(param, "PRNG param must not be null."); 423 _state = new State(seed); 424 } 425 426 /** 427 * Create a new PRNG instance with the given parameter and a safe seed 428 * 429 * @param param the PRNG parameter. 430 * @throws NullPointerException if the given {@code param} is null. 431 */ 432 public LCG64ShiftRandom(final Param param) { 433 this(param, random.seed()); 434 } 435 436 /** 437 * Create a new PRNG instance with {@link Param#DEFAULT} parameter and the 438 * given seed. 439 * 440 * @param seed the seed of the PRNG 441 */ 442 public LCG64ShiftRandom(final long seed) { 443 this(Param.DEFAULT, seed); 444 } 445 446 /** 447 * Create a new PRNG instance with {@link Param#DEFAULT} parameter and safe 448 * seed. 449 */ 450 public LCG64ShiftRandom() { 451 this(Param.DEFAULT, random.seed()); 452 } 453 454 @Override 455 public long nextLong() { 456 step(); 457 458 long t = _state._r; 459 t ^= t >>> 17; 460 t ^= t << 31; 461 t ^= t >>> 8; 462 return t; 463 } 464 465 private void step() { 466 _state._r = _param.a*_state._r + _param.b; 467 } 468 469 @Override 470 public void setSeed(final long seed) { 471 if (_state != null) _state.setSeed(seed); 472 } 473 474 /** 475 * Changes the internal state of the PRNG in a way that future calls to 476 * {@link #nextLong()} will generated the s<sup>th</sup> sub-stream of 477 * p<sup>th</sup> sub-streams. <i>s</i> must be within the range of 478 * {@code [0, p-1)}. This method is mainly used for <i>parallelization</i> 479 * via <i>leap-frogging</i>. 480 * 481 * @param p the overall number of sub-streams 482 * @param s the s<sup>th</sup> sub-stream 483 * @throws IllegalArgumentException if {@code p < 1 || s >= p}. 484 */ 485 public void split(final int p, final int s) { 486 if (p < 1) { 487 throw new IllegalArgumentException(format( 488 "p must be >= 1 but was %d.", p 489 )); 490 } 491 if (s >= p) { 492 throw new IllegalArgumentException(format( 493 "s must be < %d but was %d.", p, s 494 )); 495 } 496 497 if (p > 1) { 498 jump(s + 1); 499 final long b = _param.b*f(p, _param.a); 500 final long a = arithmetic.pow(_param.a, p); 501 _param = Param.of(a, b); 502 backward(); 503 } 504 } 505 506 /** 507 * Changes the internal state of the PRNG in such a way that the engine 508 * <i>jumps</i> 2<sup>s</sup> steps ahead. 509 * 510 * @param s the 2<sup>s</sup> steps to jump ahead. 511 * @throws IllegalArgumentException if {@code s < 0}. 512 */ 513 public void jump2(final int s) { 514 if (s < 0) { 515 throw new IllegalArgumentException(format( 516 "s must be positive but was %d.", s 517 )); 518 } 519 520 if (s >= Long.SIZE) { 521 throw new IllegalArgumentException(format( 522 "The 'jump2' size must be smaller than %d but was %d.", 523 Long.SIZE, s 524 )); 525 } 526 527 _state._r = _state._r*arithmetic.pow(_param.a, 1L << s) + 528 f(1L << s, _param.a)*_param.b; 529 } 530 531 /** 532 * Changes the internal state of the PRNG in such a way that the engine 533 * <i>jumps</i> s steps ahead. 534 * 535 * @param step the steps to jump ahead. 536 * @throws IllegalArgumentException if {@code s < 0}. 537 */ 538 public void jump(final long step) { 539 if (step < 0) { 540 throw new IllegalArgumentException(format( 541 "step must be positive but was %d", step 542 )); 543 } 544 545 if (step < 16) { 546 for (int i = 0; i < step; ++i) { 547 step(); 548 } 549 } else { 550 long s = step; 551 int i = 0; 552 while (s > 0) { 553 if (s%2 == 1) { 554 jump2(i); 555 } 556 ++i; 557 s >>= 1; 558 } 559 } 560 } 561 562 private void backward() { 563 for (int i = 0; i < Long.SIZE; ++i) { 564 jump2(i); 565 } 566 } 567 568 public Param getParam() { 569 return _param; 570 } 571 572 @Override 573 public int hashCode() { 574 return Hash.of(getClass()) 575 .and(_param) 576 .and(_state).value(); 577 } 578 579 @Override 580 public boolean equals(final Object obj) { 581 return Equality.of(this, obj).test(random -> 582 eq(_param, random._param) && 583 eq(_state, random._state) 584 ); 585 } 586 587 @Override 588 public String toString() { 589 return format("%s[%s, %s]", getClass().getSimpleName(), _param, _state); 590 } 591 592 593 594 /* ************************************************************************* 595 * Some static helper methods 596 ***************************************************************************/ 597 598 /** 599 * Compute prod(1+a^(2^i), i=0..l-1). 600 */ 601 private static long g(final int l, final long a) { 602 long p = a; 603 long res = 1; 604 for (int i = 0; i < l; ++i) { 605 res *= 1 + p; 606 p *= p; 607 } 608 609 return res; 610 } 611 612 /** 613 * Compute sum(a^i, i=0..s-1). 614 */ 615 private static long f(final long s, final long a) { 616 long y = 0; 617 618 if (s != 0) { 619 long e = log2Floor(s); 620 long p = a; 621 622 for (int l = 0; l <= e; ++l) { 623 if (((1L << l) & s) != 0) { 624 y = g(l, a) + p*y; 625 } 626 p *= p; 627 } 628 } 629 630 return y; 631 } 632 633 private static long log2Floor(final long s) { 634 long x = s; 635 long y = 0; 636 637 while (x != 0) { 638 x >>>= 1; 639 ++y; 640 } 641 642 return y - 1; 643 } 644 645} 646 647/* 648#=============================================================================# 649# Testing: org.jenetics.util.LCG64ShiftRandom (2015-07-12 01:22) # 650#=============================================================================# 651#=============================================================================# 652# Linux 3.19.0-22-generic (amd64) # 653# java version "1.8.0_45" # 654# Java(TM) SE Runtime Environment (build 1.8.0_45-b14) # 655# Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02) # 656#=============================================================================# 657#=============================================================================# 658# dieharder version 3.31.1 Copyright 2003 Robert G. Brown # 659#=============================================================================# 660 rng_name |rands/second| Seed | 661stdin_input_raw| 3.26e+07 |2198533946| 662#=============================================================================# 663 test_name |ntup| tsamples |psamples| p-value |Assessment 664#=============================================================================# 665 diehard_birthdays| 0| 100| 100|0.96061667| PASSED 666 diehard_operm5| 0| 1000000| 100|0.49388035| PASSED 667 diehard_rank_32x32| 0| 40000| 100|0.76944223| PASSED 668 diehard_rank_6x8| 0| 100000| 100|0.81999775| PASSED 669 diehard_bitstream| 0| 2097152| 100|0.66213596| PASSED 670 diehard_opso| 0| 2097152| 100|0.35244278| PASSED 671 diehard_oqso| 0| 2097152| 100|0.30642433| PASSED 672 diehard_dna| 0| 2097152| 100|0.31111322| PASSED 673diehard_count_1s_str| 0| 256000| 100|0.29900596| PASSED 674diehard_count_1s_byt| 0| 256000| 100|0.84049939| PASSED 675 diehard_parking_lot| 0| 12000| 100|0.25249632| PASSED 676 diehard_2dsphere| 2| 8000| 100|0.89898431| PASSED 677 diehard_3dsphere| 3| 4000| 100|0.87592069| PASSED 678 diehard_squeeze| 0| 100000| 100|0.46151457| PASSED 679 diehard_sums| 0| 100| 100|0.09988415| PASSED 680 diehard_runs| 0| 100000| 100|0.71496719| PASSED 681 diehard_runs| 0| 100000| 100|0.84035529| PASSED 682 diehard_craps| 0| 200000| 100|0.39228628| PASSED 683 diehard_craps| 0| 200000| 100|0.43227446| PASSED 684 marsaglia_tsang_gcd| 0| 10000000| 100|0.92226509| PASSED 685 marsaglia_tsang_gcd| 0| 10000000| 100|0.14768717| PASSED 686 sts_monobit| 1| 100000| 100|0.99459043| PASSED 687 sts_runs| 2| 100000| 100|0.14017900| PASSED 688 sts_serial| 1| 100000| 100|0.93191375| PASSED 689 sts_serial| 2| 100000| 100|0.78130569| PASSED 690 sts_serial| 3| 100000| 100|0.48954386| PASSED 691 sts_serial| 3| 100000| 100|0.20669186| PASSED 692 sts_serial| 4| 100000| 100|0.51752304| PASSED 693 sts_serial| 4| 100000| 100|0.81217070| PASSED 694 sts_serial| 5| 100000| 100|0.61151292| PASSED 695 sts_serial| 5| 100000| 100|0.43893995| PASSED 696 sts_serial| 6| 100000| 100|0.70098249| PASSED 697 sts_serial| 6| 100000| 100|0.88111033| PASSED 698 sts_serial| 7| 100000| 100|0.08860893| PASSED 699 sts_serial| 7| 100000| 100|0.10888449| PASSED 700 sts_serial| 8| 100000| 100|0.48682957| PASSED 701 sts_serial| 8| 100000| 100|0.79253724| PASSED 702 sts_serial| 9| 100000| 100|0.57005454| PASSED 703 sts_serial| 9| 100000| 100|0.57300065| PASSED 704 sts_serial| 10| 100000| 100|0.60555174| PASSED 705 sts_serial| 10| 100000| 100|0.26010863| PASSED 706 sts_serial| 11| 100000| 100|0.23181253| PASSED 707 sts_serial| 11| 100000| 100|0.55889710| PASSED 708 sts_serial| 12| 100000| 100|0.50349009| PASSED 709 sts_serial| 12| 100000| 100|0.67703032| PASSED 710 sts_serial| 13| 100000| 100|0.09716434| PASSED 711 sts_serial| 13| 100000| 100|0.01651733| PASSED 712 sts_serial| 14| 100000| 100|0.58227903| PASSED 713 sts_serial| 14| 100000| 100|0.49816453| PASSED 714 sts_serial| 15| 100000| 100|0.35547243| PASSED 715 sts_serial| 15| 100000| 100|0.77801465| PASSED 716 sts_serial| 16| 100000| 100|0.55611062| PASSED 717 sts_serial| 16| 100000| 100|0.45764285| PASSED 718 rgb_bitdist| 1| 100000| 100|0.74657121| PASSED 719 rgb_bitdist| 2| 100000| 100|0.95265707| PASSED 720 rgb_bitdist| 3| 100000| 100|0.71143353| PASSED 721 rgb_bitdist| 4| 100000| 100|0.99995544| WEAK 722 rgb_bitdist| 5| 100000| 100|0.99616318| WEAK 723 rgb_bitdist| 6| 100000| 100|0.66956720| PASSED 724 rgb_bitdist| 7| 100000| 100|0.95378286| PASSED 725 rgb_bitdist| 8| 100000| 100|0.46355875| PASSED 726 rgb_bitdist| 9| 100000| 100|0.21831657| PASSED 727 rgb_bitdist| 10| 100000| 100|0.97851877| PASSED 728 rgb_bitdist| 11| 100000| 100|0.35608637| PASSED 729 rgb_bitdist| 12| 100000| 100|0.11482554| PASSED 730rgb_minimum_distance| 2| 10000| 1000|0.67569619| PASSED 731rgb_minimum_distance| 3| 10000| 1000|0.40169012| PASSED 732rgb_minimum_distance| 4| 10000| 1000|0.68466980| PASSED 733rgb_minimum_distance| 5| 10000| 1000|0.85971777| PASSED 734 rgb_permutations| 2| 100000| 100|0.98547170| PASSED 735 rgb_permutations| 3| 100000| 100|0.13346308| PASSED 736 rgb_permutations| 4| 100000| 100|0.30098202| PASSED 737 rgb_permutations| 5| 100000| 100|0.49670259| PASSED 738 rgb_lagged_sum| 0| 1000000| 100|0.00376838| WEAK 739 rgb_lagged_sum| 1| 1000000| 100|0.84875325| PASSED 740 rgb_lagged_sum| 2| 1000000| 100|0.47618795| PASSED 741 rgb_lagged_sum| 3| 1000000| 100|0.74638546| PASSED 742 rgb_lagged_sum| 4| 1000000| 100|0.66367284| PASSED 743 rgb_lagged_sum| 5| 1000000| 100|0.38277246| PASSED 744 rgb_lagged_sum| 6| 1000000| 100|0.89022413| PASSED 745 rgb_lagged_sum| 7| 1000000| 100|0.20961380| PASSED 746 rgb_lagged_sum| 8| 1000000| 100|0.85608212| PASSED 747 rgb_lagged_sum| 9| 1000000| 100|0.98007494| PASSED 748 rgb_lagged_sum| 10| 1000000| 100|0.11658240| PASSED 749 rgb_lagged_sum| 11| 1000000| 100|0.59955707| PASSED 750 rgb_lagged_sum| 12| 1000000| 100|0.00017001| WEAK 751 rgb_lagged_sum| 13| 1000000| 100|0.90147191| PASSED 752 rgb_lagged_sum| 14| 1000000| 100|0.41636295| PASSED 753 rgb_lagged_sum| 15| 1000000| 100|0.37015147| PASSED 754 rgb_lagged_sum| 16| 1000000| 100|0.66453012| PASSED 755 rgb_lagged_sum| 17| 1000000| 100|0.18865006| PASSED 756 rgb_lagged_sum| 18| 1000000| 100|0.12419575| PASSED 757 rgb_lagged_sum| 19| 1000000| 100|0.39883314| PASSED 758 rgb_lagged_sum| 20| 1000000| 100|0.09942580| PASSED 759 rgb_lagged_sum| 21| 1000000| 100|0.53467964| PASSED 760 rgb_lagged_sum| 22| 1000000| 100|0.97551479| PASSED 761 rgb_lagged_sum| 23| 1000000| 100|0.53709182| PASSED 762 rgb_lagged_sum| 24| 1000000| 100|0.97407004| PASSED 763 rgb_lagged_sum| 25| 1000000| 100|0.19308485| PASSED 764 rgb_lagged_sum| 26| 1000000| 100|0.02836261| PASSED 765 rgb_lagged_sum| 27| 1000000| 100|0.09286364| PASSED 766 rgb_lagged_sum| 28| 1000000| 100|0.64833884| PASSED 767 rgb_lagged_sum| 29| 1000000| 100|0.50128799| PASSED 768 rgb_lagged_sum| 30| 1000000| 100|0.18237609| PASSED 769 rgb_lagged_sum| 31| 1000000| 100|0.92914172| PASSED 770 rgb_lagged_sum| 32| 1000000| 100|0.11809175| PASSED 771 rgb_kstest_test| 0| 10000| 1000|0.40816346| PASSED 772 dab_bytedistrib| 0| 51200000| 1|0.21337569| PASSED 773 dab_dct| 256| 50000| 1|0.25233302| PASSED 774Preparing to run test 207. ntuple = 0 775 dab_filltree| 32| 15000000| 1|0.29102117| PASSED 776 dab_filltree| 32| 15000000| 1|0.48186931| PASSED 777Preparing to run test 208. ntuple = 0 778 dab_filltree2| 0| 5000000| 1|0.48666498| PASSED 779 dab_filltree2| 1| 5000000| 1|0.90599317| PASSED 780Preparing to run test 209. ntuple = 0 781 dab_monobit2| 12| 65000000| 1|0.98621807| PASSED 782#=============================================================================# 783# Summary: PASSED=110, WEAK=4, FAILED=0 # 784# 235,031.406 MB of random data created with 99.045 MB/sec # 785#=============================================================================# 786#=============================================================================# 787# Runtime: 0:39:32 # 788#=============================================================================# 789*/