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
15package com.google.common.base;
16
17/**
18 * Common benchmarking utilities.
19 *
20 * @author Christopher Swenson
21 * @author Louis Wasserman
22 */
23class 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