fork download
  1. import java.util.Random;
  2. import java.lang.System;
  3.  
  4. class ShuffleTest {
  5. private static abstract class Generator {
  6. public abstract String generate();
  7. }
  8.  
  9. private static final class GeneratorRolfl extends Generator {
  10. private final Random rand = new Random();
  11. private final char[] digits = "0123456789".toCharArray();
  12.  
  13. public final String generate() {
  14. int index = digits.length;
  15. // Fisher-Yates.
  16. while (index > 1) {
  17. final int pos = rand.nextInt(index--);
  18. final char tmp = digits[pos];
  19. digits[pos] = digits[index];
  20. digits[index] = tmp;
  21. }
  22. return new String(digits);
  23. }
  24. }
  25.  
  26. private static final class GeneratorIlmari extends Generator {
  27. private final Random rand = new Random();
  28. private final char[] digits = new char[10];
  29.  
  30. public final String generate() {
  31. digits[0] = '0';
  32. for (int index = 1; index < digits.length; index++) {
  33. final int pos = rand.nextInt(index + 1);
  34. digits[index] = digits[pos];
  35. digits[pos] = (char) ('0' + index);
  36. }
  37. return new String(digits);
  38. }
  39. }
  40.  
  41. public static void main (String args[]) {
  42. Generator generators[] = { new GeneratorRolfl(), new GeneratorIlmari() };
  43. int iterations = 1000000, burnin = 10000;
  44.  
  45. if (args.length > 0) {
  46. iterations = Integer.parseInt( args[0] );
  47. }
  48. if (args.length > 1) {
  49. burnin = Integer.parseInt( args[1] );
  50. }
  51.  
  52. for (Generator gen: generators) {
  53. System.out.println("Burning in " + gen.getClass().getName() + " for " + burnin + " iterations...");
  54. for (int i = 0; i < burnin; i++) {
  55. gen.generate();
  56. }
  57. System.out.println("Benchmarking " + gen.getClass().getName() + " for " + iterations + " iterations...");
  58. long t0 = System.nanoTime();
  59. for (int i = 0; i < iterations; i++) {
  60. gen.generate();
  61. }
  62. long t1 = System.nanoTime();
  63. System.out.println("Elapsed time: " + (t1 - t0) * 1.0e-9 + " seconds");
  64. }
  65. }
  66. }
Success #stdin #stdout 1.2s 380480KB
stdin
Standard input is empty
stdout
Burning in ShuffleTest$GeneratorRolfl for 10000 iterations...
Benchmarking ShuffleTest$GeneratorRolfl for 1000000 iterations...
Elapsed time: 0.56381232 seconds
Burning in ShuffleTest$GeneratorIlmari for 10000 iterations...
Benchmarking ShuffleTest$GeneratorIlmari for 1000000 iterations...
Elapsed time: 0.543000004 seconds