1*6a9279caSLouis Dionne //===----------------------------------------------------------------------===// 2*6a9279caSLouis Dionne // 3*6a9279caSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*6a9279caSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*6a9279caSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*6a9279caSLouis Dionne // 7*6a9279caSLouis Dionne //===----------------------------------------------------------------------===// 8*6a9279caSLouis Dionne 9*6a9279caSLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17 10*6a9279caSLouis Dionne 11*6a9279caSLouis Dionne #include <format> 12*6a9279caSLouis Dionne 13*6a9279caSLouis Dionne #include <string> 14*6a9279caSLouis Dionne 15*6a9279caSLouis Dionne #include "benchmark/benchmark.h" 16*6a9279caSLouis Dionne #include "make_string.h" 17*6a9279caSLouis Dionne #include "test_macros.h" 18*6a9279caSLouis Dionne 19*6a9279caSLouis Dionne #define CSTR(S) MAKE_CSTRING(CharT, S) 20*6a9279caSLouis Dionne 21*6a9279caSLouis Dionne template <class CharT> 22*6a9279caSLouis Dionne static void BM_format_string(benchmark::State& state) { 23*6a9279caSLouis Dionne size_t size = state.range(0); 24*6a9279caSLouis Dionne std::basic_string<CharT> str(size, CharT('*')); 25*6a9279caSLouis Dionne 26*6a9279caSLouis Dionne while (state.KeepRunningBatch(str.size())) { 27*6a9279caSLouis Dionne std::basic_string<CharT> s = std::format(CSTR("{}"), str); 28*6a9279caSLouis Dionne benchmark::DoNotOptimize(s); 29*6a9279caSLouis Dionne } 30*6a9279caSLouis Dionne 31*6a9279caSLouis Dionne state.SetBytesProcessed(state.iterations() * size * sizeof(CharT)); 32*6a9279caSLouis Dionne } 33*6a9279caSLouis Dionne BENCHMARK(BM_format_string<char>)->RangeMultiplier(2)->Range(1, 1 << 20); 34*6a9279caSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 35*6a9279caSLouis Dionne BENCHMARK(BM_format_string<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20); 36*6a9279caSLouis Dionne #endif 37*6a9279caSLouis Dionne 38*6a9279caSLouis Dionne BENCHMARK_MAIN(); 39