}
}
-template <typename T>
-inline void stringToTypeOptional(const char* str, uint32_t n) {
- for (uint32_t i = 0; i < n; ++i) {
- auto val = tryTo<T>(str);
- if (val.hasValue()) {
- doNotOptimizeAway(val.value());
- }
- }
-}
-
template <typename T>
inline void ptrPairToIntClassic(StringPiece sp, uint32_t n) {
for (uint32_t i = 0; i < n; ++i) {
}
}
-template <typename T>
-inline void ptrPairToIntOptional(StringPiece sp, uint32_t n) {
- for (uint32_t i = 0; i < n; ++i) {
- auto val = tryTo<T>(sp.begin(), sp.end());
- if (val.hasValue()) {
- doNotOptimizeAway(val.value());
- }
- }
-}
-
constexpr uint32_t kArithNumIter = 10000;
template <typename T, typename U>
return kArithNumIter * numItems;
}
-template <typename T, typename U>
-inline size_t arithToArithOptional(const U* in, uint32_t numItems) {
- for (uint32_t i = 0; i < kArithNumIter; ++i) {
- for (uint32_t j = 0; j < numItems; ++j) {
- auto val = tryTo<T>(*in);
- doNotOptimizeAway(val.hasValue());
- if (val.hasValue()) {
- auto v2 = val.value();
- doNotOptimizeAway(v2);
- }
- doNotOptimizeAway(j);
- }
- doNotOptimizeAway(i);
- }
-
- return kArithNumIter * numItems;
-}
-
} // namespace
namespace folly {
} \
BENCHMARK(stringTo##name##ClassicError, n) { \
stringToTypeClassic<type>(fail, n); \
- } \
- BENCHMARK(stringTo##name##Optional, n) { \
- stringToTypeOptional<type>(pass, n); \
- } \
- BENCHMARK(stringTo##name##OptionalError, n) { \
- stringToTypeOptional<type>(fail, n); \
}
#define PTR_PAIR_TO_INT_BENCHMARK(type, name, pass, fail) \
} \
BENCHMARK(ptrPairTo##name##ClassicError, n) { \
ptrPairToIntClassic<type>(fail, n); \
- } \
- BENCHMARK(ptrPairTo##name##Optional, n) { \
- ptrPairToIntOptional<type>(pass, n); \
- } \
- BENCHMARK(ptrPairTo##name##OptionalError, n) { \
- ptrPairToIntOptional<type>(fail, n); \
}
-#define ARITH_TO_ARITH_BENCHMARK(type, name, pass, fail) \
- BENCHMARK_MULTI(name##Classic) { \
- return arithToArithClassic<type>(pass.data(), pass.size()); \
- } \
- BENCHMARK_MULTI(name##ClassicError) { \
- return arithToArithClassic<type>(fail.data(), fail.size()); \
- } \
- BENCHMARK_MULTI(name##Optional) { \
- return arithToArithOptional<type>(pass.data(), pass.size()); \
- } \
- BENCHMARK_MULTI(name##OptionalError) { \
- return arithToArithOptional<type>(fail.data(), fail.size()); \
+#define ARITH_TO_ARITH_BENCHMARK(type, name, pass, fail) \
+ BENCHMARK_MULTI(name##Classic) { \
+ return arithToArithClassic<type>(pass.data(), pass.size()); \
+ } \
+ BENCHMARK_MULTI(name##ClassicError) { \
+ return arithToArithClassic<type>(fail.data(), fail.size()); \
}
#define INT_TO_ARITH_BENCHMARK(type, name, pass, fail) \