18 #include <type_traits>
21 #include "benchmark/benchmark.h"
22 #include "absl/base/internal/raw_logging.h"
23 #include "absl/random/distributions.h"
24 #include "absl/random/random.h"
25 #include "absl/strings/numbers.h"
54 const int digits =
state.range(0);
81 const int digits =
state.range(0);
109 const int digits =
state.range(0);
136 const int digits =
state.range(0);
166 std::vector<std::string> MakeFloatStrings(
int num_strings,
int num_digits) {
169 std::minstd_rand0 rng(1);
170 std::uniform_int_distribution<int> random_digit(
'0',
'9');
172 std::vector<std::string> float_strings(num_strings);
174 s.reserve(2 * num_digits + 1);
175 for (
int i = 0;
i < num_digits; ++
i) {
176 s.push_back(
static_cast<char>(random_digit(rng)));
179 for (
int i = 0;
i < num_digits; ++
i) {
180 s.push_back(
static_cast<char>(random_digit(rng)));
183 return float_strings;
186 template <
typename StringType>
191 const char* GetStringAs<const char*>(
const std::string& s) {
195 template <
typename StringType>
196 std::vector<StringType> GetStringsAs(
const std::vector<std::string>& strings) {
197 std::vector<StringType>
result;
198 result.reserve(strings.size());
200 result.push_back(GetStringAs<StringType>(s));
205 template <
typename T>
207 const int num_strings =
state.range(0);
208 const int num_digits =
state.range(1);
209 std::vector<std::string> backing_strings =
210 MakeFloatStrings(num_strings, num_digits);
211 std::vector<T> inputs = GetStringsAs<T>(backing_strings);
214 for (
const T&
input : inputs) {
235 template <
typename T>
237 const int num_strings =
state.range(0);
238 const int num_digits =
state.range(1);
239 std::vector<std::string> backing_strings =
240 MakeFloatStrings(num_strings, num_digits);
241 std::vector<T> inputs = GetStringsAs<T>(backing_strings);
244 for (
const T&
input : inputs) {
267 std::vector<uint64_t> nums;
271 for (
auto&
num : nums) {
276 while (
state.KeepRunningBatch(nums.size())) {
277 for (
auto num : nums) {