summaryrefslogtreecommitdiff
path: root/libcxx/benchmarks
diff options
context:
space:
mode:
authorMark de Wever <koraq@xs4all.nl>2021-10-02 12:38:46 +0200
committerMark de Wever <koraq@xs4all.nl>2022-06-11 15:25:56 +0200
commitaed5ddf8d09762f3adb80dc842239ad67ed2e301 (patch)
treea7af63bb66716ca980ad4287260f0f04b0c3703a /libcxx/benchmarks
parent338fd211e7c36d7a2e0eee4c3530ed656c893a9d (diff)
downloadllvm-aed5ddf8d09762f3adb80dc842239ad67ed2e301.tar.gz
[libc++][format] Implement format-string.
Implements the compile-time checking of the formatting arguments. Completes: - P2216 std::format improvements Reviewed By: #libc, ldionne Differential Revision: https://reviews.llvm.org/D121530
Diffstat (limited to 'libcxx/benchmarks')
-rw-r--r--libcxx/benchmarks/formatter_float.bench.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/libcxx/benchmarks/formatter_float.bench.cpp b/libcxx/benchmarks/formatter_float.bench.cpp
index 3190b3779c5d..ee04647aa955 100644
--- a/libcxx/benchmarks/formatter_float.bench.cpp
+++ b/libcxx/benchmarks/formatter_float.bench.cpp
@@ -216,17 +216,27 @@ struct FloatingPoint {
void run(benchmark::State& state) const {
std::array<F, 1000> data{Value<V::value>::template make_data<F>()};
std::array<char, 20'000> output;
- std::string fmt{std::string("{:") + Alignment<A::value>::fmt + Precision<P::value>::fmt +
- Localization<L::value>::fmt + DisplayType<DT::value>::fmt + "}"};
while (state.KeepRunningBatch(1000))
for (F value : data)
- benchmark::DoNotOptimize(std::format_to(output.begin(), fmt, value));
+ benchmark::DoNotOptimize(std::format_to(output.begin(), std::string_view{fmt.data(), fmt.size()}, value));
}
std::string name() const {
return "FloatingPoint" + L::name() + DT::name() + T::name() + V::name() + A::name() + P::name();
}
+
+ static constexpr std::string make_fmt() {
+ return std::string("{:") + Alignment<A::value>::fmt + Precision<P::value>::fmt + Localization<L::value>::fmt +
+ DisplayType<DT::value>::fmt + "}";
+ }
+
+ static constexpr auto fmt = []() {
+ constexpr size_t s = make_fmt().size();
+ std::array<char, s> r;
+ std::ranges::copy(make_fmt(), r.begin());
+ return r;
+ }();
};
int main(int argc, char** argv) {