Home | History | Annotate | Download | only in base
      1 /*
      2  * Copyright (C) 2012 The Guava Authors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
      5  * in compliance with the License. You may obtain a copy of the License at
      6  *
      7  * http://www.apache.org/licenses/LICENSE-2.0
      8  *
      9  * Unless required by applicable law or agreed to in writing, software distributed under the License
     10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
     11  * or implied. See the License for the specific language governing permissions and limitations under
     12  * the License.
     13  */
     14 
     15 package com.google.common.base;
     16 
     17 /**
     18  * Common benchmarking utilities.
     19  *
     20  * @author Christopher Swenson
     21  * @author Louis Wasserman
     22  */
     23 class BenchmarkHelpers {
     24   private static final String WHITESPACE_CHARACTERS =
     25       "\u00a0\u180e\u202f\t\n\013\f\r \u0085"
     26           + "\u1680\u2028\u2029\u205f\u3000\u2000\u2001\u2002\u2003\u2004\u2005"
     27           + "\u2006\u2007\u2008\u2009\u200a";
     28   private static final String ASCII_CHARACTERS;
     29   static {
     30     int spaceInAscii = 32;
     31     int sevenBitAsciiMax = 128;
     32     StringBuilder sb = new StringBuilder(sevenBitAsciiMax - spaceInAscii);
     33     for (int ch = spaceInAscii; ch < sevenBitAsciiMax; ch++) {
     34       sb.append((char) ch);
     35     }
     36     ASCII_CHARACTERS = sb.toString();
     37   }
     38 
     39   private static final String ALL_DIGITS;
     40   static {
     41     StringBuilder sb = new StringBuilder();
     42     String zeros =
     43         "0\u0660\u06f0\u07c0\u0966\u09e6\u0a66\u0ae6\u0b66\u0be6\u0c66"
     44             + "\u0ce6\u0d66\u0e50\u0ed0\u0f20\u1040\u1090\u17e0\u1810\u1946"
     45             + "\u19d0\u1b50\u1bb0\u1c40\u1c50\ua620\ua8d0\ua900\uaa50\uff10";
     46     for (char base : zeros.toCharArray()) {
     47       for (int offset = 0; offset < 10; offset++) {
     48         sb.append((char) (base + offset));
     49       }
     50     }
     51     ALL_DIGITS = sb.toString();
     52   }
     53 
     54   /**
     55    * Sample CharMatcher instances for benchmarking.
     56    */
     57   public enum SampleMatcherConfig {
     58     WHITESPACE(CharMatcher.WHITESPACE, WHITESPACE_CHARACTERS),
     59     HASH(CharMatcher.is('#'), "#"),
     60     ASCII(CharMatcher.ASCII, ASCII_CHARACTERS),
     61     WESTERN_DIGIT("0123456789"),
     62     ALL_DIGIT(CharMatcher.DIGIT, ALL_DIGITS),
     63     OPS_5("+-*/%"),
     64     HEX_16(CharMatcher.inRange('0', '9').or(CharMatcher.inRange('A', 'F')), "0123456789ABCDEF"),
     65     HEX_22(CharMatcher.inRange('0', '9')
     66         .or(CharMatcher.inRange('A', 'F')).or(CharMatcher.inRange('a', 'f')),
     67         "0123456789ABCDEFabcdef"),
     68     GERMAN_59(CharMatcher.inRange('a', 'z')
     69         .or(CharMatcher.inRange('A', 'Z')).or(CharMatcher.anyOf("")),
     70         "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
     71 
     72     public final CharMatcher matcher;
     73     public final String matchingChars;
     74 
     75     SampleMatcherConfig(String matchingChars) {
     76       this(CharMatcher.anyOf(matchingChars), matchingChars);
     77     }
     78 
     79     SampleMatcherConfig(CharMatcher matcher, String matchingChars) {
     80       this.matcher = matcher;
     81       this.matchingChars = matchingChars;
     82     }
     83   }
     84 }
     85