17dd252788645e940eada959bdde927426e2531c9Paul Duffin/*
27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2012 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License");
57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License.
67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at
77dd252788645e940eada959bdde927426e2531c9Paul Duffin *
87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
97dd252788645e940eada959bdde927426e2531c9Paul Duffin *
107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software
117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS,
127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and
147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License.
157dd252788645e940eada959bdde927426e2531c9Paul Duffin */
167dd252788645e940eada959bdde927426e2531c9Paul Duffin
177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.hash;
187dd252788645e940eada959bdde927426e2531c9Paul Duffin
190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.caliper.BeforeExperiment;
200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.caliper.Benchmark;
217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.caliper.Param;
227dd252788645e940eada959bdde927426e2531c9Paul Duffin
237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.security.MessageDigest;
247dd252788645e940eada959bdde927426e2531c9Paul Duffin
257dd252788645e940eada959bdde927426e2531c9Paul Duffin/**
267dd252788645e940eada959bdde927426e2531c9Paul Duffin * Benchmarks for comparing instance creation of {@link MessageDigest}s.
277dd252788645e940eada959bdde927426e2531c9Paul Duffin *
287dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Kurt Alfred Kluever
297dd252788645e940eada959bdde927426e2531c9Paul Duffin */
300888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class MessageDigestCreationBenchmark {
317dd252788645e940eada959bdde927426e2531c9Paul Duffin
327dd252788645e940eada959bdde927426e2531c9Paul Duffin  @Param({"MD5", "SHA-1", "SHA-256", "SHA-512"})
337dd252788645e940eada959bdde927426e2531c9Paul Duffin  private String algorithm;
347dd252788645e940eada959bdde927426e2531c9Paul Duffin
357dd252788645e940eada959bdde927426e2531c9Paul Duffin  private MessageDigest md;
367dd252788645e940eada959bdde927426e2531c9Paul Duffin
370888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @BeforeExperiment void setUp() throws Exception {
387dd252788645e940eada959bdde927426e2531c9Paul Duffin    md = MessageDigest.getInstance(algorithm);
397dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
407dd252788645e940eada959bdde927426e2531c9Paul Duffin
410888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Benchmark int getInstance(int reps) throws Exception {
427dd252788645e940eada959bdde927426e2531c9Paul Duffin    int retValue = 0;
437dd252788645e940eada959bdde927426e2531c9Paul Duffin    for (int i = 0; i < reps; i++) {
447dd252788645e940eada959bdde927426e2531c9Paul Duffin      retValue ^= MessageDigest.getInstance(algorithm).getDigestLength();
457dd252788645e940eada959bdde927426e2531c9Paul Duffin    }
467dd252788645e940eada959bdde927426e2531c9Paul Duffin    return retValue;
477dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
487dd252788645e940eada959bdde927426e2531c9Paul Duffin
490888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Benchmark int clone(int reps) throws Exception {
507dd252788645e940eada959bdde927426e2531c9Paul Duffin    int retValue = 0;
517dd252788645e940eada959bdde927426e2531c9Paul Duffin    for (int i = 0; i < reps; i++) {
527dd252788645e940eada959bdde927426e2531c9Paul Duffin      retValue ^= ((MessageDigest) md.clone()).getDigestLength();
537dd252788645e940eada959bdde927426e2531c9Paul Duffin    }
547dd252788645e940eada959bdde927426e2531c9Paul Duffin    return retValue;
557dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
567dd252788645e940eada959bdde927426e2531c9Paul Duffin}
57