Home | History | Annotate | Download | only in examples
      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.EnumSet;
     24 import java.util.Set;
     25 
     26 /**
     27  * Measures EnumSet#contains().
     28  */
     29 public class EnumSetContainsBenchmark {
     30 
     31   @Param private SetMaker setMaker;
     32 
     33   public enum SetMaker {
     34     ENUM_SET {
     35       @Override Set<?> newSet() {
     36         return EnumSet.allOf(RegularSize.class);
     37       }
     38       @Override Object[] testValues() {
     39         return new Object[] { RegularSize.E1, RegularSize.E2, RegularSize.E20,
     40             RegularSize.E39, RegularSize.E40, "A", LargeSize.E40, null };
     41       }
     42     },
     43     LARGE_ENUM_SET {
     44       @Override Set<?> newSet() {
     45         return EnumSet.allOf(LargeSize.class);
     46       }
     47       @Override Object[] testValues() {
     48         return new Object[] { LargeSize.E1, LargeSize.E63, LargeSize.E64,
     49             LargeSize.E65, LargeSize.E140, "A", RegularSize.E40, null };
     50       }
     51     };
     52 
     53     abstract Set<?> newSet();
     54     abstract Object[] testValues();
     55   }
     56 
     57   private enum RegularSize {
     58     E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16, E17,
     59     E18, E19, E20, E21, E22, E23, E24, E25, E26, E27, E28, E29, E30, E31, E32,
     60     E33, E34, E35, E36, E37, E38, E39, E40,
     61   }
     62 
     63   private enum LargeSize {
     64     E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16, E17,
     65     E18, E19, E20, E21, E22, E23, E24, E25, E26, E27, E28, E29, E30, E31, E32,
     66     E33, E34, E35, E36, E37, E38, E39, E40, E41, E42, E43, E44, E45, E46, E47,
     67     E48, E49, E50, E51, E52, E53, E54, E55, E56, E57, E58, E59, E60, E61, E62,
     68     E63, E64, E65, E66, E67, E68, E69, E70, E71, E72, E73, E74, E75, E76, E77,
     69     E78, E79, E80, E81, E82, E83, E84, E85, E86, E87, E88, E89, E90, E91, E92,
     70     E93, E94, E95, E96, E97, E98, E99, E100, E101, E102, E103, E104, E105, E106,
     71     E107, E108, E109, E110, E111, E112, E113, E114, E115, E116, E117, E118,
     72     E119, E120, E121, E122, E123, E124, E125, E126, E127, E128, E129, E130,
     73     E131, E132, E133, E134, E135, E136, E137, E138, E139, E140,
     74   }
     75 
     76   private Set<?> set;
     77   private Object[] testValues;
     78 
     79   @BeforeExperiment void setUp() {
     80     this.set = setMaker.newSet();
     81     this.testValues = setMaker.testValues();
     82   }
     83 
     84   @Benchmark void contains(int reps) {
     85     for (int i = 0; i < reps; i++) {
     86       set.contains(testValues[i % testValues.length]);
     87     }
     88   }
     89 }
     90