1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.rng.simple.internal;
18
19 import java.util.Map;
20 import java.util.HashMap;
21 import org.junit.Assert;
22 import org.junit.Test;
23
24 import org.apache.commons.rng.core.util.NumberFactory;
25
26
27
28
29 public class SeedFactoryTest {
30 @Test
31 public void testCreateLong() {
32 final Map<Long, Integer> values = new HashMap<Long, Integer>();
33
34 final int n = 100000;
35 for (int i = 0; i < n; i++) {
36 final long v = SeedFactory.createLong();
37
38 Integer count = values.get(v);
39 if (count == null) {
40 count = 0;
41 }
42 values.put(v, count + 1);
43 }
44
45
46 assertDifferentValues(values);
47 }
48
49 @Test
50 public void testCreateLongArray() {
51 final Map<Long, Integer> values = new HashMap<Long, Integer>();
52
53 final int n = 100000;
54 final long[] array = SeedFactory.createLongArray(n);
55 Assert.assertEquals(n, array.length);
56
57 for (long v : array) {
58 Integer count = values.get(v);
59 if (count == null) {
60 count = 0;
61 }
62 values.put(v, count + 1);
63 }
64
65
66 assertDifferentValues(values);
67 }
68
69 @Test
70 public void testCreateIntArray() {
71 final Map<Long, Integer> values = new HashMap<Long, Integer>();
72
73 for (int i = 0; i < 50000; i++) {
74 final int[] a = SeedFactory.createIntArray(2);
75 final long v = NumberFactory.makeLong(a[0], a[1]);
76 Integer count = values.get(v);
77 if (count == null) {
78 count = 0;
79 }
80 values.put(v, count + 1);
81 }
82
83
84 assertDifferentValues(values);
85 }
86
87
88
89
90
91
92
93 private static <T> void assertDifferentValues(Map<T, Integer> map) {
94 final StringBuilder sb = new StringBuilder();
95
96 int duplicates = 0;
97 for (Map.Entry<T, Integer> entry : map.entrySet()) {
98 final int count = entry.getValue();
99 if (count <= 0) {
100 throw new IllegalStateException();
101 }
102
103 if (count > 1) {
104 duplicates += count - 1;
105 sb.append(entry.getKey() + ": " + count + "\n");
106 }
107 }
108
109 if (duplicates > 0) {
110 Assert.fail(duplicates + " duplicates\n" + sb);
111 }
112 }
113 }