Skip to content

Commit

Permalink
timing in tests
Browse files Browse the repository at this point in the history
Signed-off-by: Mark Herwege <[email protected]>
  • Loading branch information
mherwege committed Aug 19, 2024
1 parent d973995 commit e2790c7
Showing 1 changed file with 32 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import static org.junit.jupiter.api.Assertions.*;

import java.io.PrintStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -33,30 +34,57 @@ public class StatisticsTest {

@Test
public void testQuickSelect() {
List<BigDecimal> baseList = new Random().doubles(100, 0, 100).mapToObj(v -> BigDecimal.valueOf(v)).sorted()
.toList();
List<BigDecimal> randomList = new Random().doubles(100, 0, 100).mapToObj(v -> BigDecimal.valueOf(v)).toList();
int iterations = 50;

int size = baseList.size();
int size = randomList.size();
int k = size / 2; // median

long startTime = System.nanoTime();
List<BigDecimal> baseList = randomList.stream().sorted().toList();
long endTime = System.nanoTime();
long duration = endTime - startTime;
int expected = baseList.get(k).intValue();
int prevExpected = baseList.get(k - 1).intValue();

long durationNoForcePrevious = 0;
long durationForcePrevious = 0;
// Iterate a few times with reshuffled list to exclude impact of initial ordering
for (int i = 0; i < 10; i++) {
for (int i = 0; i < iterations; i++) {
ArrayList<BigDecimal> bdList = new ArrayList<>(baseList);
Collections.shuffle(bdList);
startTime = System.nanoTime();
BigDecimal bd = Statistics.quickSelect(bdList, 0, size - 1, k, false);
endTime = System.nanoTime();
durationNoForcePrevious += endTime - startTime;
assertNotNull(bd);
int result = bd.intValue();
assertEquals(expected, result);

bdList = new ArrayList<>(baseList); // recreate as order may have changed
Collections.shuffle(bdList);
startTime = System.nanoTime();
bd = Statistics.quickSelect(bdList, 0, size - 1, k, true);
endTime = System.nanoTime();
durationForcePrevious += endTime - startTime;
assertNotNull(bd);
result = bd.intValue();
assertEquals(expected, result);
assertEquals(prevExpected, bdList.get(k - 1).intValue());
}

PrintStream out = System.out;
if (out != null) {
out.print("List size: ");
out.print(size);
out.print(", iterations: ");
out.println(iterations);
out.print(" Stream sort duration (ns): ");
out.println(duration);
out.print(" Quickselect average duration (ns): ");
out.println(durationNoForcePrevious / iterations);
out.print(" Quickselect force previous order average duration (ns): ");
out.println(durationForcePrevious / iterations);
}
}
}

0 comments on commit e2790c7

Please sign in to comment.