blob: 2aa8c9db64457775b701e9b5e614a64fd6cf6116 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <benchmark/benchmark.h>
#include <geode/CacheableString.hpp>
#include "util/string.hpp"
using apache::geode::client::to_utf16;
using apache::geode::client::to_utf8;
using apache::geode::client::internal::geode_hash;
template <class ToString, class FromString>
ToString convert(const FromString& from);
template <>
std::string convert(const std::u32string& from) {
return to_utf8(from);
}
template <>
std::u16string convert(const std::u32string& from) {
return to_utf16(from);
}
template <class String, char32_t UnicodeChar>
void GeodeHashBM(benchmark::State& state) {
const std::u32string u32String(state.range(0), UnicodeChar);
const String string = convert<String>(u32String);
for (auto _ : state) {
int hashcode;
benchmark::DoNotOptimize(hashcode = geode_hash<String>{}(string));
}
}
constexpr char32_t LATIN_CAPITAL_LETTER_C = U'\U00000043';
constexpr char32_t INVERTED_EXCLAMATION_MARK = U'\U000000A1';
constexpr char32_t SAMARITAN_PUNCTUATION_ZIQAA = U'\U00000838';
constexpr char32_t LINEAR_B_SYLLABLE_B008_A = U'\U00010000';
BENCHMARK_TEMPLATE(GeodeHashBM, std::string, LATIN_CAPITAL_LETTER_C)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, LATIN_CAPITAL_LETTER_C)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::string, INVERTED_EXCLAMATION_MARK)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, INVERTED_EXCLAMATION_MARK)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::string, SAMARITAN_PUNCTUATION_ZIQAA)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, SAMARITAN_PUNCTUATION_ZIQAA)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::string, LINEAR_B_SYLLABLE_B008_A)
->Range(8, 8 << 10);
BENCHMARK_TEMPLATE(GeodeHashBM, std::u16string, LINEAR_B_SYLLABLE_B008_A)
->Range(8, 8 << 10);