package com.databricks.unsafe.util.benchmark; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; @State(Scope.Benchmark) public class BinarySearch { @Param({"1", "10", "50", "100", "200", "250", "273", "365"}) public int dayInYear; private static final int[] arr = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}; @Benchmark public long linearSearch() { if (dayInYear <= 31) { return 1; } else if (dayInYear <= 59) { return 2; } else if (dayInYear <= 90) { return 3; } else if (dayInYear <= 120) { return 4; } else if (dayInYear <= 151) { return 5; } else if (dayInYear <= 181) { return 6; } else if (dayInYear <= 212) { return 7; } else if (dayInYear <= 243) { return 8; } else if (dayInYear <= 273) { return 9; } else if (dayInYear <= 304) { return 10; } else if (dayInYear <= 334) { return 11; } else { return 12; } } @Benchmark public long binarySearch() { int index = java.util.Arrays.binarySearch(arr, dayInYear); return index > 0 ? index - 1 : - index - 2; // zero based } public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() .include(BinarySearch.class.getSimpleName()) .warmupIterations(5) .measurementIterations(5) .forks(2) .jvmArgs("-ea") .build(); new Runner(opt).run(); } }