1 /* 2 * Copyright (C) 2009 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package examples; 18 19 import com.google.caliper.BeforeExperiment; 20 import com.google.caliper.Benchmark; 21 import com.google.caliper.Param; 22 23 import java.util.Arrays; 24 import java.util.Random; 25 26 /** 27 * Measures sorting on different distributions of integers. 28 */ 29 public class ArraySortBenchmark { 30 31 @Param({"10", "100", "1000", "10000"}) private int length; 32 33 @Param private Distribution distribution; 34 35 private int[] values; 36 private int[] copy; 37 setUp()38 @BeforeExperiment void setUp() throws Exception { 39 values = distribution.create(length); 40 copy = new int[length]; 41 } 42 sort(int reps)43 @Benchmark void sort(int reps) { 44 for (int i = 0; i < reps; i++) { 45 System.arraycopy(values, 0, copy, 0, values.length); 46 Arrays.sort(copy); 47 } 48 } 49 50 public enum Distribution { 51 SAWTOOTH { 52 @Override create(int length)53 int[] create(int length) { 54 int[] result = new int[length]; 55 for (int i = 0; i < length; i += 5) { 56 result[i] = 0; 57 result[i + 1] = 1; 58 result[i + 2] = 2; 59 result[i + 3] = 3; 60 result[i + 4] = 4; 61 } 62 return result; 63 } 64 }, 65 INCREASING { 66 @Override create(int length)67 int[] create(int length) { 68 int[] result = new int[length]; 69 for (int i = 0; i < length; i++) { 70 result[i] = i; 71 } 72 return result; 73 } 74 }, 75 DECREASING { 76 @Override create(int length)77 int[] create(int length) { 78 int[] result = new int[length]; 79 for (int i = 0; i < length; i++) { 80 result[i] = length - i; 81 } 82 return result; 83 } 84 }, 85 RANDOM { 86 @Override create(int length)87 int[] create(int length) { 88 Random random = new Random(); 89 int[] result = new int[length]; 90 for (int i = 0; i < length; i++) { 91 result[i] = random.nextInt(); 92 } 93 return result; 94 } 95 }; 96 create(int length)97 abstract int[] create(int length); 98 } 99 } 100