package net.tuis.ubench; import java.io.IOException; import java.nio.file.Paths; import java.util.Arrays; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.stream.IntStream; @SuppressWarnings("javadoc") public class ExampleScales { private static final ConcurrentMap<Integer, AtomicInteger> arrayCounts = new ConcurrentHashMap<>(); private static final int[] randomData(int size) { arrayCounts.computeIfAbsent(size, key -> new AtomicInteger(0)).incrementAndGet(); // System.out.println("Randomizing " + size); Random rand = new Random(size); return IntStream.generate(rand::nextInt).limit(size).toArray(); } private static final long linear(long input) { long count = 0; while (input > 10) { input -= 10; count++; } return count; } public static void main(String[] args) throws IOException { UUtils.setStandaloneLogging(Level.INFO); //UScale.function(div -> div / 3, scale -> scale).report(); UScale.function( "Linear", data -> linear(data), scale -> scale, true) .reportHTML(Paths.get("output/Linear.html")); if (!Boolean.getBoolean("DOALL")) { return; } UScale scales = UScale.consumer("Arrays::Sort", Arrays::sort, scale -> randomData(scale), false); scales.report(); scales.reportHTML(Paths.get("output/ArraysSort.html")); System.out.println(scales.toJSONString()); arrayCounts.keySet().stream().sorted() .map(scale -> String.format("Scale %d -> created %d", scale, arrayCounts.get(scale).get())) .forEach(System.out::println); UScale.consumer("Arrays::Sort (presorted)", Arrays::sort, scale -> randomData(scale), true).report(); arrayCounts.keySet().stream().sorted() .map(scale -> String.format("Scale %d -> created %d", scale, arrayCounts.get(scale).get())) .forEach(System.out::println); } }