123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- /*
- * Copyright 2011-present Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- /**
- * This file is supposed to be included from within
- * FBStringTest. Do not use otherwise.
- *
- * override-include-guard
- */
- void BENCHFUN(initRNG)(size_t /* iters */, size_t) {
- srand(seed);
- }
- BENCHMARK_PARAM(BENCHFUN(initRNG), 0)
- void BENCHFUN(defaultCtor)(size_t iters, size_t) {
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s[4096];
- doNotOptimizeAway(&s);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(defaultCtor), 0)
- void BENCHFUN(copyCtor)(size_t iters, size_t arg) {
- STRING s;
- BENCHMARK_SUSPEND {
- randomString(&s, arg);
- }
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s1 = s;
- doNotOptimizeAway(&s1);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(copyCtor), 32768)
- void BENCHFUN(ctorFromArray)(size_t iters, size_t arg) {
- STRING s;
- BENCHMARK_SUSPEND {
- randomString(&s, arg);
- if (s.empty()) {
- s = "This is rare.";
- }
- }
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s1(s.data(), s.size());
- doNotOptimizeAway(&s1);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(ctorFromArray), 32768)
- void BENCHFUN(ctorFromTwoPointers)(size_t iters, size_t arg) {
- /* library-local */ static STRING s;
- BENCHMARK_SUSPEND {
- if (s.size() < arg) {
- s.resize(arg);
- }
- }
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s1(s.begin(), s.end());
- doNotOptimizeAway(&s1);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(ctorFromTwoPointers), 0)
- BENCHMARK_PARAM(BENCHFUN(ctorFromTwoPointers), 7)
- BENCHMARK_PARAM(BENCHFUN(ctorFromTwoPointers), 15)
- BENCHMARK_PARAM(BENCHFUN(ctorFromTwoPointers), 23)
- BENCHMARK_PARAM(BENCHFUN(ctorFromTwoPointers), 24)
- void BENCHFUN(ctorFromChar)(size_t iters, size_t arg) {
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s1('a', arg);
- doNotOptimizeAway(&s1);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(ctorFromChar), 1048576)
- void BENCHFUN(assignmentOp)(size_t iters, size_t arg) {
- STRING s;
- BENCHMARK_SUSPEND {
- randomString(&s, arg);
- }
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s1;
- BENCHMARK_SUSPEND {
- randomString(&s1, arg);
- doNotOptimizeAway(&s1);
- }
- s1 = s;
- }
- }
- BENCHMARK_PARAM(BENCHFUN(assignmentOp), 256)
- void BENCHFUN(assignmentFill)(size_t iters, size_t) {
- STRING s;
- FOR_EACH_RANGE (i, 0, iters) {
- s = static_cast<char>(i);
- doNotOptimizeAway(&s);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(assignmentFill), 0)
- void BENCHFUN(resize)(size_t iters, size_t arg) {
- STRING s;
- FOR_EACH_RANGE (i, 0, iters) {
- s.resize(random(0, arg));
- doNotOptimizeAway(&s);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(resize), 524288)
- void BENCHFUN(findSuccessful)(size_t iters, size_t /* arg */) {
- size_t pos, len;
- STRING s;
- BENCHMARK_SUSPEND {
- // Text courtesy (ahem) of
- // http://www.psychologytoday.com/blog/career-transitions/200906/
- // the-dreaded-writing-sample
- s = "\
- Even if you've mastered the art of the cover letter and the resume, \
- another part of the job search process can trip up an otherwise \
- qualified candidate: the writing sample.\n\
- \n\
- Strong writing and communication skills are highly sought after by \
- most employers. Whether crafting short emails or lengthy annual \
- reports, many workers use their writing skills every day. And for an \
- employer seeking proof behind that ubiquitous candidate \
- phrase,\"excellent communication skills\", a required writing sample \
- is invaluable.\n\
- \n\
- Writing samples need the same care and attention given to cover \
- letters and resumes. Candidates with otherwise impeccable credentials \
- are routinely eliminated by a poorly chosen writing sample. Notice I \
- said \"poorly chosen\" not \"poorly written.\" Because that's the rub: \
- a writing sample not only reveals the individual's writing skills, it \
- also offers a peek into what they consider important or relevant for \
- the position. If you miss that mark with your writing sample, don't \
- expect to get a call for an interview.";
- pos = random(0, s.size());
- len = random(0, s.size() - pos);
- }
- FOR_EACH_RANGE (i, 0, iters) {
- doNotOptimizeAway(s.find(s.data(), pos, len));
- }
- }
- BENCHMARK_PARAM(BENCHFUN(findSuccessful), 524288)
- void BENCHFUN(findUnsuccessful)(size_t iters, size_t /* arg */) {
- STRING s, s1;
- BENCHMARK_SUSPEND {
- s = "\
- Even if you've mastered the art of the cover letter and the resume, \
- another part of the job search process can trip up an otherwise \
- qualified candidate: the writing sample.\n\
- \n\
- Strong writing and communication skills are highly sought after by \
- most employers. Whether crafting short emails or lengthy annual \
- reports, many workers use their writing skills every day. And for an \
- employer seeking proof behind that ubiquitous candidate \
- phrase,\"excellent communication skills\", a required writing sample \
- is invaluable.\n\
- \n\
- Writing samples need the same care and attention given to cover \
- letters and resumes. Candidates with otherwise impeccable credentials \
- are routinely eliminated by a poorly chosen writing sample. Notice I \
- said \"poorly chosen\" not \"poorly written.\" Because that's the rub: \
- a writing sample not only reveals the individual's writing skills, it \
- also offers a peek into what they consider important or relevant for \
- the position. If you miss that mark with your writing sample, don't \
- expect to get a call for an interview.";
- s1 = "So how do you tackle that writing sample request?";
- }
- FOR_EACH_RANGE (i, 0, iters) { doNotOptimizeAway(s.find(s1)); }
- }
- BENCHMARK_PARAM(BENCHFUN(findUnsuccessful), 524288)
- void BENCHFUN(equality)(size_t iters, size_t arg) {
- std::vector<STRING> haystack(arg);
- BENCHMARK_SUSPEND {
- for (auto& hay : haystack) {
- randomBinaryString(&hay, 1024);
- }
- }
- FOR_EACH_RANGE (i, 0, iters) {
- STRING needle;
- randomBinaryString(&needle, 1024);
- doNotOptimizeAway(std::find(haystack.begin(), haystack.end(), needle));
- }
- }
- BENCHMARK_PARAM(BENCHFUN(equality), 65536)
- void BENCHFUN(replace)(size_t iters, size_t arg) {
- STRING s;
- BENCHMARK_SUSPEND {
- randomString(&s, arg);
- }
- FOR_EACH_RANGE (i, 0, iters) {
- BenchmarkSuspender susp;
- doNotOptimizeAway(&s);
- auto const pos = random(0, s.size());
- auto toRemove = random(0, s.size() - pos);
- auto toInsert = random(0, arg);
- STRING s1;
- randomString(&s1, toInsert);
- susp.dismiss();
- s.replace(pos, toRemove, s1);
- }
- }
- BENCHMARK_PARAM(BENCHFUN(replace), 256)
- void BENCHFUN(push_back)(size_t iters, size_t arg) {
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s;
- FOR_EACH_RANGE (j, 0, arg) { s += ' '; }
- }
- }
- BENCHMARK_PARAM(BENCHFUN(push_back), 1)
- BENCHMARK_PARAM(BENCHFUN(push_back), 23)
- BENCHMARK_PARAM(BENCHFUN(push_back), 127)
- BENCHMARK_PARAM(BENCHFUN(push_back), 1024)
- void BENCHFUN(short_append)(size_t iters, size_t arg) {
- FOR_EACH_RANGE (i, 0, iters) {
- STRING s;
- FOR_EACH_RANGE (j, 0, arg) { s += "012"; }
- }
- }
- BENCHMARK_PARAM(BENCHFUN(short_append), 23)
- BENCHMARK_PARAM(BENCHFUN(short_append), 1024)
- void BENCHFUN(getline)(size_t iters, size_t arg) {
- string lines;
- BENCHMARK_SUSPEND {
- string line;
- FOR_EACH_RANGE (i, 0, 512) {
- randomString(&line, arg);
- lines += line;
- lines += '\n';
- }
- }
- STRING line;
- while (iters) {
- std::istringstream is(lines);
- while (iters && getline(is, line)) {
- folly::doNotOptimizeAway(line.size());
- iters--;
- }
- }
- }
- BENCHMARK_PARAM(BENCHFUN(getline), 23)
- BENCHMARK_PARAM(BENCHFUN(getline), 1000)
|