19 #include <glog/logging.h> 27 using namespace folly;
36 static std::atomic<int>
testSize(1000);
37 static vector<fbstring> testStrVector =
38 seq(1,
testSize.load()) | eachTo<fbstring>() | as<vector>();
39 static auto testFileContent =
from(testStrVector) |
unsplit(
'\n');
41 const char*
const kLine =
"The quick brown fox jumped over the lazy dog.\n";
42 const size_t kLineCount = 10000;
44 const size_t kSmallLineSize = 17;
45 std::vector<std::string> smallLines;
47 void initStringResplitterBenchmark() {
48 bigLines.reserve(kLineCount * strlen(kLine));
49 for (
size_t i = 0;
i < kLineCount; ++
i) {
52 size_t remaining = bigLines.size();
55 size_t n =
std::min(kSmallLineSize, remaining);
56 smallLines.push_back(bigLines.substr(pos, n));
90 std::vector<StringPiece> parts;
91 split(
' ', line, parts);
101 s += (
split(line,
' ') | as<vector>()).size();
111 std::vector<StringPiece> parts;
114 split(
' ', line, parts);
123 std::vector<StringPiece> parts;
156 join(
',', testStrVector, joined);
167 join(
',', testStrVector, joined);
196 std::vector<fbstring>
v;
219 for (
size_t i = 0;
i < iters; ++
i) {
234 return folly::to<fbstring>(
i,
' ', i *
i,
' ', i * i *
i);
241 for (
size_t i = 0;
i < iters;
i += 1000) {
243 s +=
split(records,
'\n')
244 | eachToTuple<int, size_t, StringPiece>(
' ')
254 std::vector<StringPiece> fields;
255 for (
size_t i = 0;
i < iters;
i += 1000) {
257 s +=
split(records,
'\n')
261 CHECK(fields.size() == 3);
263 folly::to<int>(fields[0]),
264 folly::to<size_t>(fields[1]),
276 for (
size_t i = 0;
i < iters;
i += 1000) {
278 s +=
split(records,
'\n')
280 std::vector<StringPiece> fields;
282 CHECK(fields.size() == 3);
284 folly::to<int>(fields[0]),
285 folly::to<size_t>(fields[1]),
297 for (
size_t i = 0;
i < iters;
i += 1000) {
299 s +=
split(records,
'\n')
301 std::vector<std::string> fields;
303 CHECK(fields.size() == 3);
305 folly::to<int>(fields[0]),
306 folly::to<size_t>(fields[1]),
348 gflags::ParseCommandLineFlags(&argc, &argv,
true);
349 initStringResplitterBenchmark();
std::vector< uint8_t > buffer(kBufferSize+16)
S resplit(char delimiter, bool keepDelimiter=false)
void Lines_Gen(size_t iters, int joinSize)
constexpr detail::Count count
static std::atomic< int > testSize(1000)
From from(Container &source)
#define BENCHMARK_SUSPEND
constexpr size_type size() const
Gen seq(Value first, Value last)
—— Concurrent Priority Queue Implementation ——
void split(const Delim &delimiter, const String &input, std::vector< OutputType > &out, bool ignoreEmpty)
constexpr detail::Sum sum
BENCHMARK_RELATIVE(StringResplitter_Small, iters)
#define FOR_EACH_RANGE(i, begin, end)
void StringUnsplit_Gen(size_t iters, size_t joinSize)
Range subpiece(size_type first, size_type length=npos) const
S split(const StringPiece source, char delimiter)
Map map(Predicate pred=Predicate())
Append appendTo(Collection &collection)
S lines(StringPiece source)
#define BENCHMARK_PARAM(name, param)
BENCHMARK(fbFollyGlobalBenchmarkBaseline)
#define BENCHMARK_RELATIVE_PARAM(name, param)
detail::Take take(Number count)
Map mapped(Predicate pred=Predicate())
void join(const Delim &delimiter, Iterator begin, Iterator end, String &output)
Unsplit unsplit(const Delimiter &delimiter)
Range< const char * > StringPiece
int main(int argc, char *argv[])
auto doNotOptimizeAway(const T &datum) -> typename std::enable_if< !detail::DoNotOptimizeAwayNeedsIndirect< T >::value >::type