Skip to content

Commit df03ef8

Browse files
committed
Before review.
1 parent b8ab753 commit df03ef8

File tree

2 files changed

+530
-21
lines changed

2 files changed

+530
-21
lines changed

src/main/java/com/github/coderodde/util/Benchmark.java

Lines changed: 70 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import java.util.Random;
55

66
public class Benchmark {
7-
7+
//
88
private static final int WARMUP_INT_ARRAY_LENGTH = 100_000;
99
private static final int WARMUP_INT_UPPER_BOUND = 1_000;
1010
private static final int RANDOM_DATA_LENGTH = 1_000_000;
11-
private static final int SPARSE_DATA_LENGTH = 10_000_000;
11+
private static final int SPARSE_DATA_LENGTH = 100_000_000;
1212
private static final int SPARSE_DATA_UPPER_BOUND = 100;
1313
private static final int DEGENERATE_DATA_LENGTH = 2 << 14;
1414

@@ -23,7 +23,8 @@ public static void main(String[] args) {
2323
warmup(random);
2424
long endTime = System.currentTimeMillis();
2525

26-
System.out.printf("Warmed up in %d milliseconds.", endTime - startTime);
26+
System.out.printf("Warmed up in %d milliseconds.\n",
27+
endTime - startTime);
2728

2829
System.out.println("Benchmarking on random data:");
2930

@@ -46,6 +47,7 @@ private static void warmup(final Random random) {
4647

4748
IntTreeSortV1.sort(array1);
4849
IntTreeSortV2.sort(array2);
50+
IntTreeSortV3.sort(array3);
4951
Arrays.sort(array4);
5052

5153
System.out.println();
@@ -75,6 +77,7 @@ private static int[] getRandomIntArray(final Random random) {
7577
private static void benchmarkOnRandomIntData(final Random random) {
7678
final int[] array1 = getRandomIntArray(random);
7779
final int[] array2 = array1.clone();
80+
final int[] array3 = array1.clone();
7881
final int[] array4 = array1.clone();
7982

8083
long startTime = System.currentTimeMillis();
@@ -83,7 +86,7 @@ private static void benchmarkOnRandomIntData(final Random random) {
8386

8487
long endTime = System.currentTimeMillis();
8588

86-
System.out.printf("V1: %d milliseconds.\n",
89+
System.out.printf("V1: %d milliseconds.\n",
8790
endTime - startTime);
8891

8992
startTime = System.currentTimeMillis();
@@ -92,7 +95,16 @@ private static void benchmarkOnRandomIntData(final Random random) {
9295

9396
endTime = System.currentTimeMillis();
9497

95-
System.out.printf("V2: %d milliseconds.\n",
98+
System.out.printf("V2: %d milliseconds.\n",
99+
endTime - startTime);
100+
101+
startTime = System.currentTimeMillis();
102+
103+
IntTreeSortV3.sort(array3);
104+
105+
endTime = System.currentTimeMillis();
106+
107+
System.out.printf("V3: %d milliseconds.\n",
96108
endTime - startTime);
97109

98110
startTime = System.currentTimeMillis();
@@ -101,16 +113,18 @@ private static void benchmarkOnRandomIntData(final Random random) {
101113

102114
endTime = System.currentTimeMillis();
103115

104-
System.out.printf("Arrays.sort: %d milliseconds.\n",
116+
System.out.printf("JDK: %d milliseconds.\n",
105117
endTime - startTime);
106118

107119
System.out.printf("Algorithms agree: %b.\n",
108120
Arrays.equals(array1, array2) &&
121+
Arrays.equals(array1, array3) &&
109122
Arrays.equals(array1, array4));
110123

111-
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
112-
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
113-
System.out.printf("Arrays.sort sorted: %b.\n", isSorted(array4));
124+
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
125+
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
126+
System.out.printf("V3 sorted: %b.\n", isSorted(array3));
127+
System.out.printf("JDK sorted: %b.\n", isSorted(array4));
114128

115129
System.out.println();
116130
}
@@ -128,15 +142,16 @@ private static boolean isSorted(final int[] array) {
128142
private static void benchmarkOnDegenerateData(final Random random) {
129143
final int[] array1 = getDegenerateData(random);
130144
final int[] array2 = array1.clone();
131-
145+
final int[] array3 = array1.clone();
146+
final int[] array4 = array1.clone();
132147

133148
long startTime = System.currentTimeMillis();
134149

135150
IntTreeSortV1.sort(array1);
136151

137152
long endTime = System.currentTimeMillis();
138153

139-
System.out.printf("V1: %d milliseconds.\n",
154+
System.out.printf("V1: %d milliseconds.\n",
140155
endTime - startTime);
141156

142157
startTime = System.currentTimeMillis();
@@ -145,21 +160,44 @@ private static void benchmarkOnDegenerateData(final Random random) {
145160

146161
endTime = System.currentTimeMillis();
147162

148-
System.out.printf("V2: %d milliseconds.\n",
163+
System.out.printf("V2: %d milliseconds.\n",
164+
endTime - startTime);
165+
166+
startTime = System.currentTimeMillis();
167+
168+
IntTreeSortV3.sort(array3);
169+
170+
endTime = System.currentTimeMillis();
171+
172+
System.out.printf("V3: %d milliseconds.\n",
173+
endTime - startTime);
174+
175+
startTime = System.currentTimeMillis();
176+
177+
Arrays.sort(array4);
178+
179+
endTime = System.currentTimeMillis();
180+
181+
System.out.printf("JDK: %d milliseconds.\n",
149182
endTime - startTime);
150183

151184
System.out.printf("Algorithms agree: %b.\n",
152-
Arrays.equals(array1, array2));
185+
Arrays.equals(array1, array2) &&
186+
Arrays.equals(array1, array3) &&
187+
Arrays.equals(array1, array4));
153188

154-
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
155-
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
189+
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
190+
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
191+
System.out.printf("V3 sorted: %b.\n", isSorted(array3));
192+
System.out.printf("JDK sorted: %b.\n", isSorted(array4));
156193

157194
System.out.println();
158195
}
159196

160197
private static void benchmarkOnSparseData(final Random random) {
161198
final int[] array1 = getSparseData(random);
162199
final int[] array2 = array1.clone();
200+
final int[] array3 = array1.clone();
163201
final int[] array4 = array1.clone();
164202

165203
long startTime = System.currentTimeMillis();
@@ -168,7 +206,7 @@ private static void benchmarkOnSparseData(final Random random) {
168206

169207
long endTime = System.currentTimeMillis();
170208

171-
System.out.printf("V1: %d milliseconds.\n",
209+
System.out.printf("V1: %d milliseconds.\n",
172210
endTime - startTime);
173211

174212
startTime = System.currentTimeMillis();
@@ -177,7 +215,16 @@ private static void benchmarkOnSparseData(final Random random) {
177215

178216
endTime = System.currentTimeMillis();
179217

180-
System.out.printf("V2: %d milliseconds.\n",
218+
System.out.printf("V2: %d milliseconds.\n",
219+
endTime - startTime);
220+
221+
startTime = System.currentTimeMillis();
222+
223+
IntTreeSortV3.sort(array3);
224+
225+
endTime = System.currentTimeMillis();
226+
227+
System.out.printf("V3: %d milliseconds.\n",
181228
endTime - startTime);
182229

183230
startTime = System.currentTimeMillis();
@@ -186,16 +233,18 @@ private static void benchmarkOnSparseData(final Random random) {
186233

187234
endTime = System.currentTimeMillis();
188235

189-
System.out.printf("Arrays.sort: %d milliseconds.\n",
236+
System.out.printf("JDK: %d milliseconds.\n",
190237
endTime - startTime);
191238

192239
System.out.printf("Algorithms agree: %b.\n",
193240
Arrays.equals(array1, array2) &&
241+
Arrays.equals(array1, array3) &&
194242
Arrays.equals(array1, array4));
195243

196-
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
197-
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
198-
System.out.printf("Arrays.sort sorted: %b.\n", isSorted(array4));
244+
System.out.printf("V1 sorted: %b.\n", isSorted(array1));
245+
System.out.printf("V2 sorted: %b.\n", isSorted(array2));
246+
System.out.printf("V2 sorted: %b.\n", isSorted(array3));
247+
System.out.printf("JDK sorted: %b.\n", isSorted(array4));
199248

200249
System.out.println();
201250
}

0 commit comments

Comments
 (0)