28 #include <boost/algorithm/string.hpp> 29 #include <boost/random.hpp> 40 using namespace folly;
46 static RandomT
rng(seed);
47 static const size_t maxString = 100;
48 static const bool avoidAliasing =
true;
50 template <
class Integral1,
class Integral2>
51 Integral2
random(Integral1 low, Integral2 up) {
52 boost::uniform_int<>
range(low, up);
56 template <
class String>
57 void randomString(String* toFill,
unsigned int maxSize = 1000) {
59 toFill->resize(
random(0, maxSize));
63 template <
class String,
class Integral>
66 str =
String(tmp.begin(), tmp.end());
69 std::list<char>
RandomList(
unsigned int maxSize) {
70 std::list<char> lst(
random(0u, maxSize));
71 std::list<char>::iterator
i = lst.begin();
72 for (; i != lst.end(); ++
i) {
83 template <
class String>
85 test.String::~String();
88 template <
class String>
91 assert(test2 == test);
93 template <
class String>
105 template <
class String>
108 const size_t pos =
random(0, test.size());
116 template <
class String>
119 const size_t pos =
random(0, test.size()), n =
random(0, test.size() - pos);
120 String before(test.data(), test.size());
121 String
s(test.c_str() + pos, n);
122 String after(test.data(), test.size());
126 template <
class String>
129 const size_t pos =
random(0, test.size());
130 String before(test.data(), test.size());
131 String
s(test.c_str() + pos);
132 String after(test.data(), test.size());
136 template <
class String>
139 const size_t n =
random(0, test.size());
140 const auto c = test.front();
143 template <
class String>
147 String s1(test.begin(), test.end());
149 String s2(test.data(), test.data() + test.size());
153 for (
auto c : test) {
156 String s3(lst.begin(), lst.end());
159 std::list<wchar_t> lst1;
160 for (
auto c : test) {
163 String s4(lst1.begin(), lst1.end());
172 template <
class String>
175 std::initializer_list<typename String::value_type> il = {
176 'h',
'e',
'l',
'l',
'o'};
180 template <
class String>
184 String
s(
size,
'\0');
189 template <
class String>
193 String
s(
size,
'\0');
197 if (
typeid(String) ==
typeid(
fbstring)) {
201 template <
class String>
204 String
s(
random(0, 1000),
'\0');
206 for (; i != s.size(); ++
i) {
211 template <
class String>
214 const size_t pos =
random(0, test.size());
216 test = String(test.c_str() + pos);
218 test = test.c_str() + pos;
221 template <
class String>
224 using value_type =
typename String::value_type;
225 test =
random(static_cast<value_type>(
'a'), static_cast<value_type>(
'z'));
227 template <
class String>
230 initializer_list<typename String::value_type> il = {
'h',
'e',
'l',
'l',
'o'};
234 template <
class String>
237 EXPECT_EQ(test.size(), test.end() - test.begin());
238 EXPECT_EQ(test.size(), test.rend() - test.rbegin());
239 EXPECT_EQ(test.size(), test.cend() - test.cbegin());
240 EXPECT_EQ(test.size(), test.crend() - test.crbegin());
242 auto s = test.size();
243 test.resize(test.end() - test.begin());
245 test.resize(test.rend() - test.rbegin());
249 template <
class String>
254 EXPECT_LE(test.capacity(), test.max_size());
260 copy.reserve(copy.capacity() * 3);
261 copy.shrink_to_fit();
265 string empty(
"empty");
266 string notempty(
"not empty");
268 test = String(empty.begin(), empty.end());
270 test = String(notempty.begin(), notempty.end());
274 template <
class String>
279 EXPECT_EQ(test[test.size() - 1], test.back());
280 auto const i =
random(0, test.size() - 1);
289 template <
class String>
296 char_traits<typename String::value_type>::length(test1.c_str()));
297 auto len = test.size();
299 EXPECT_EQ(test.size(), test1.size() + len);
303 auto dt = test2.data();
304 auto sz = test.c_str();
307 String
copy(test.data(), test.size());
309 char_traits<typename String::value_type>::length(test.c_str()), len);
314 char_traits<typename String::value_type>::length(test.c_str()), 2 * len);
321 char_traits<typename String::value_type>::length(test.c_str()), len);
323 auto const pos =
random(0, test.size());
325 char_traits<typename String::value_type>::length(test.c_str() + pos),
328 String addMe(test.c_str() + pos);
332 test += test.c_str() + pos;
340 initializer_list<typename String::value_type> il{
'a',
'b',
'c'};
344 template <
class String>
354 s.resize(s.size() - 1);
359 test.append(s,
random(0, s.size()),
random(0, maxString));
361 test.append(s.c_str(),
random(0, s.size()));
363 test.append(s.c_str());
366 test.append(lst.begin(), lst.end());
371 initializer_list<typename String::value_type> il{
'a',
'b',
'c'};
375 template <
class String>
384 if (
typeid(String) ==
typeid(
fbstring)) {
389 template <
class String>
394 test.assign(s,
random(0, s.size()),
random(0, maxString));
397 template <
class String>
402 test.assign(s.c_str(),
random(0, s.size()));
405 template <
class String>
410 test.assign(s.c_str());
413 template <
class String>
421 template <
class String>
425 test.assign(lst.begin(), lst.end());
428 template <
class String>
434 template <
class String>
437 test.assign(test,
random(0, test.size()),
random(0, maxString));
440 template <
class String>
443 test.assign(test.c_str(),
random(0, test.size()));
446 template <
class String>
449 test.assign(test.c_str());
452 template <
class String>
455 initializer_list<typename String::value_type> il{
'a',
'b',
'c'};
459 template <
class String>
464 test.insert(
random(0, test.size()), s);
469 test.insert(
random(0, test.size()), s.c_str(),
random(0, s.size()));
471 test.insert(
random(0, test.size()), s.c_str());
473 typename String::size_type pos =
random(0, test.size());
474 typename String::iterator res =
475 test.insert(test.begin() + pos,
random(
'a',
'z'));
478 pos =
random(0, test.size());
480 test.insert(test.begin() + pos, lst.begin(), lst.end());
482 initializer_list<typename String::value_type> il{
'a',
'b',
'c'};
483 pos =
random(0, test.size());
485 test.insert(test.begin() + pos, il);
489 ss <<
"hello cruel world";
490 auto i = istream_iterator<char>(ss);
491 test.insert(test.begin(),
i, istream_iterator<char>());
494 template <
class String>
498 test.erase(
random(0, test.size()),
random(0, maxString));
502 test.erase(test.begin() +
random(0, test.size() - 1));
505 auto const i = test.begin() +
random(0, test.size());
506 if (i != test.end()) {
507 test.erase(i, i +
random(0,
size_t(test.end() -
i)));
516 template <
class String>
518 auto pos =
random(0, test.size());
520 test.replace(pos,
random(0, test.size() - pos), String(test));
522 test.replace(pos,
random(0, test.size() - pos), test);
524 pos =
random(0, test.size());
527 test.replace(pos, pos +
random(0, test.size() - pos), s);
528 auto pos1 =
random(0, test.size());
529 auto pos2 =
random(0, test.size());
533 pos1 +
random(0, test.size() - pos1),
536 pos2 +
random(0, test.size() - pos2));
540 pos1 +
random(0, test.size() - pos1),
543 pos2 +
random(0, test.size() - pos2));
545 pos1 =
random(0, test.size());
548 pos2 =
random(0, str.size());
551 pos1 +
random(0, test.size() - pos1),
554 pos2 +
random(0, str.size() - pos2));
555 pos =
random(0, test.size());
558 pos,
random(0, test.size() - pos), String(test).c_str(), test.size());
560 test.replace(pos,
random(0, test.size() - pos), test.c_str(), test.size());
562 pos =
random(0, test.size());
565 pos, pos +
random(0, test.size() - pos), str.c_str(), str.size());
566 pos =
random(0, test.size());
568 test.replace(pos, pos +
random(0, test.size() - pos), str.c_str());
569 pos =
random(0, test.size());
572 random(0, test.size() - pos),
575 pos =
random(0, test.size());
577 auto newString = String(test);
580 test.begin() + pos +
random(0, test.size() - pos),
585 test.begin() + pos +
random(0, test.size() - pos),
588 pos =
random(0, test.size());
590 auto newString = String(test);
593 test.begin() + pos +
random(0, test.size() - pos),
595 test.size() -
random(0, test.size()));
599 test.begin() + pos +
random(0, test.size() - pos),
601 test.size() -
random(0, test.size()));
603 pos =
random(0, test.size());
604 auto const n =
random(0, test.size() - pos);
605 typename String::iterator
b = test.begin();
608 const String& str3 = str1;
609 const typename String::value_type* ss = str3.c_str();
610 test.replace(b + pos, b + pos + n, ss);
611 pos =
random(0, test.size());
614 test.begin() + pos +
random(0, test.size() - pos),
619 template <
class String>
621 std::vector<typename String::value_type>
vec(
random(0, maxString));
625 test.copy(vec.data(), vec.size(),
random(0, test.size()));
628 template <
class String>
635 template <
class String>
639 assert(test.c_str() == test.data());
643 DCHECK(test.get_allocator() == s.get_allocator());
646 template <
class String>
648 String str = test.substr(
random(0, test.size()),
random(0, test.size()));
652 template <
class String>
655 String(test).substr(
random(0, test.size()),
random(0, test.size()));
659 template <
class String>
661 auto const& cTest =
test;
662 String str = cTest.substr(
random(0, test.size()),
random(0, test.size()));
666 template <
class String>
670 String str = test.substr(
from, length);
673 test.find(str.c_str(),
random(0, test.size()),
random(0, str.size())));
676 template <
class String>
680 String str = String(test).substr(
from, length);
683 test.find(str.c_str(),
random(0, test.size()),
random(0, str.size())));
686 template <
class String>
690 const auto& cTest =
test;
691 String str = cTest.substr(
from, length);
694 test.find(str.c_str(),
random(0, test.size()),
random(0, str.size())));
697 template <
class String>
699 String str = test.substr(
random(0, test.size()),
random(0, test.size()));
703 template <
class String>
706 String(test).substr(
random(0, test.size()),
random(0, test.size()));
710 template <
class String>
712 const auto& cTest =
test;
713 String str = cTest.substr(
random(0, test.size()),
random(0, test.size()));
717 template <
class String>
722 template <
class String>
724 String str = test.substr(
random(0, test.size()),
random(0, test.size()));
728 template <
class String>
730 String str = test.substr(
random(0, test.size()),
random(0, test.size()));
733 test.rfind(str.c_str(),
random(0, test.size()),
random(0, str.size())));
736 template <
class String>
738 String str = test.substr(
random(0, test.size()),
random(0, test.size()));
742 template <
class String>
747 template <
class String>
754 template <
class String>
761 str.c_str(),
random(0, test.size()),
random(0, str.size())));
764 template <
class String>
771 template <
class String>
774 test, test.find_first_of(
random(
'a',
'z'),
random(0, test.size())));
777 template <
class String>
784 template <
class String>
791 str.c_str(),
random(0, test.size()),
random(0, str.size())));
794 template <
class String>
801 template <
class String>
806 template <
class String>
813 template <
class String>
819 test.find_first_not_of(
820 str.c_str(),
random(0, test.size()),
random(0, str.size())));
823 template <
class String>
827 Num2String(test, test.find_first_not_of(str.c_str(),
random(0, test.size())));
830 template <
class String>
833 test, test.find_first_not_of(
random(
'a',
'z'),
random(0, test.size())));
836 template <
class String>
843 template <
class String>
849 test.find_last_not_of(
850 str.c_str(),
random(0, test.size()),
random(0, str.size())));
853 template <
class String>
857 Num2String(test, test.find_last_not_of(str.c_str(),
random(0, test.size())));
860 template <
class String>
863 test, test.find_last_not_of(
random(
'a',
'z'),
random(0, test.size())));
866 template <
class String>
868 test = test.substr(
random(0, test.size()),
random(0, test.size()));
871 template <
class String>
875 int tristate = test.compare(s);
878 }
else if (tristate < 0) {
884 template <
class String>
889 test.compare(
random(0, test.size()),
random(0, test.size()), s);
892 }
else if (tristate < 0) {
898 template <
class String>
902 int tristate = test.compare(
910 }
else if (tristate < 0) {
916 template <
class String>
920 int tristate = test.compare(s.c_str());
923 }
else if (tristate < 0) {
929 template <
class String>
933 int tristate = test.compare(
940 }
else if (tristate < 0) {
946 template <
class String>
955 template <
class String>
961 test =
move(s1) + s2;
964 template <
class String>
970 test = s1 +
move(s2);
973 template <
class String>
982 template <
class String>
988 test = s.c_str() + s1;
991 template <
class String>
997 test = s.c_str() +
move(s1);
1000 template <
class String>
1004 test =
typename String::value_type(
random(
'a',
'z')) +
s;
1007 template <
class String>
1011 test =
typename String::value_type(
random(
'a',
'z')) +
move(s);
1014 template <
class String>
1020 test = s + s1.c_str();
1023 template <
class String>
1029 test =
move(s) + s1.c_str();
1032 template <
class String>
1036 test = s +
typename String::value_type(
random(
'a',
'z'));
1039 template <
class String>
1045 test =
move(s) + s1.c_str();
1049 template <
class String>
1051 basic_stringstream<typename String::value_type> stst(test.c_str());
1063 #if FOLLY_HAVE_WCHAR_SUPPORT 1069 auto l = [&](
const char*
const clause,
1081 #if FOLLY_HAVE_WCHAR_SUPPORT 1085 auto localSeed = seed +
count;
1090 EXPECT_EQ(r, c) <<
"Lengths: " << r.size() <<
" vs. " << c.
size()
1091 <<
"\nReference: '" << r <<
"'" 1092 <<
"\nActual: '" << c.
data()[0] <<
"'";
1093 #if FOLLY_HAVE_WCHAR_SUPPORT 1096 int wret = wcslen(wc.c_str());
1097 auto mbv = std::vector<char>(wret + 1);
1098 auto mb = mbv.data();
1099 int ret = wcstombs(mb, wc.c_str(), wret + 1);
1103 const char* mc = c.
c_str();
1108 }
while (++count % 100 != 0);
1111 #define TEST_CLAUSE(x) \ 1113 clause11_##x<std::string>, \ 1114 clause11_##x<folly::fbstring>, \ 1115 clause11_##x<folly::basic_fbstring<wchar_t>>); 1209 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras accumsan \n\ 1210 elit ut urna consectetur in sagittis mi auctor. Nulla facilisi. In nec \n\ 1211 dolor leo, vitae imperdiet neque. Donec ut erat mauris, a faucibus \n\ 1212 elit. Integer consectetur gravida augue, sit amet mattis mauris auctor \n\ 1213 sed. Morbi congue libero eu nunc sodales adipiscing. In lectus nunc, \n\ 1214 vulputate a fringilla at, venenatis quis justo. Proin eu velit \n\ 1215 nibh. Maecenas vitae tellus eros. Pellentesque habitant morbi \n\ 1216 tristique senectus et netus et malesuada fames ac turpis \n\ 1217 egestas. Vivamus faucibus feugiat consequat. Donec fermentum neque sit \n\ 1218 amet ligula suscipit porta. Phasellus facilisis felis in purus luctus \n\ 1219 quis posuere leo tempor. Nam nunc purus, luctus a pharetra ut, \n\ 1220 placerat at dui. Donec imperdiet, diam quis convallis pulvinar, dui \n\ 1221 est commodo lorem, ut tincidunt diam nibh et nibh. Maecenas nec velit \n\ 1222 massa, ut accumsan magna. Donec imperdiet tempor nisi et \n\ 1223 laoreet. Phasellus lectus quam, ultricies ut tincidunt in, dignissim \n\ 1224 id eros. Mauris vulputate tortor nec neque pellentesque sagittis quis \n\ 1225 sed nisl. In diam lacus, lobortis ut posuere nec, ornare id quam.";
1230 istringstream input(s1);
1260 TEST(FBString, testMoveOperatorPlusLhs) {
1263 auto size1 =
random(100, 2000);
1264 auto size2 =
random(100, 2000);
1273 TEST(FBString, testMoveOperatorPlusRhs) {
1276 auto size1 =
random(100, 2000);
1277 auto size2 =
random(100, 2000);
1291 TEST(FBString, testConstructionFromLiteralZero) {
1295 TEST(FBString, testFixedBugs_D479397) {
1303 TEST(FBString, testFixedBugs_D481173) {
1305 for (
int i = 0; i < 2; ++
i) {
1313 TEST(FBString, testFixedBugs_D580267_push_back) {
1319 TEST(FBString, testFixedBugs_D580267_operator_add_assign) {
1325 TEST(FBString, testFixedBugs_D661622) {
1330 TEST(FBString, testFixedBugs_D785057) {
1336 TEST(FBString, testFixedBugs_D1012196_allocator_malloc) {
1344 TEST(FBString, testFixedBugs_D2813713) {
1356 TEST(FBString, testFixedBugs_D3698862) {
1360 TEST(FBString, testFixedBugs_D4355440) {
1367 struct DummyRefCounted {
1368 std::atomic<size_t> refCount_;
1387 std::hash<fbstring> hashfunc;
1391 #if FOLLY_HAVE_WCHAR_SUPPORT 1392 TEST(FBString, testHashChar16) {
1400 std::hash<u16fbstring> hashfunc;
1430 ss << setw(6) << fbstr;
1434 ss << left << setw(6) << fbstr;
1438 ss << right << setw(6) << fbstr;
1442 ss << setw(4) << fbstr;
1446 ss << setfill(
'^') << setw(6) << fbstr;
1458 make_move_iterator(s.
begin()),
1459 make_move_iterator(s.
end()));
1465 auto ait = b.
begin() + 3;
1466 auto Xit = b.
begin() + 6;
1496 struct TestStructDefaultAllocator {
1501 struct TestStructWithAllocator {
1505 std::atomic<size_t> allocatorConstructedCount(0);
1506 struct TestStructStringAllocator : std::allocator<char> {
1507 TestStructStringAllocator() {
1508 ++allocatorConstructedCount;
1514 TEST(FBStringCtorTest, DefaultInitStructDefaultAlloc) {
1515 TestStructDefaultAllocator t1{};
1519 TEST(FBStringCtorTest, DefaultInitStructAlloc) {
1520 EXPECT_EQ(allocatorConstructedCount.load(), 0);
1521 TestStructWithAllocator<TestStructStringAllocator> t2;
1523 EXPECT_EQ(allocatorConstructedCount.load(), 1);
1526 TEST(FBStringCtorTest, NullZeroConstruction) {
1537 TEST(FBString, compareToStdString) {
1562 TEST(U16FBString, compareToStdU16String) {
1587 TEST(U32FBString, compareToStdU32String) {
1612 TEST(WFBString, compareToStdWString) {
1640 TEST(FBString, compareToStdStringLong) {
1643 auto stdA =
"1234567890a"s;
1644 auto stdB =
"1234567890ab"s;
1665 TEST(U16FBString, compareToStdU16StringLong) {
1668 auto stdA = u
"1234567890a"s;
1669 auto stdB = u
"1234567890ab"s;
1690 #if FOLLY_HAVE_WCHAR_SUPPORT 1691 TEST(U32FBString, compareToStdU32StringLong) {
1694 auto stdA = U
"1234567890a"s;
1695 auto stdB = U
"1234567890ab"s;
1716 TEST(WFBString, compareToStdWStringLong) {
1719 auto stdA = L
"1234567890a"s;
1720 auto stdB = L
"1234567890ab"s;
#define EXPECT_LE(val1, val2)
const value_type * c_str() const
void clause11_21_4_6_8(String &test)
void clause11_21_4_8_1_d(String &test)
void clause11_21_4_7_4_b(String &test)
void Num2String(String &str, Integral n)
Integral2 random(Integral1 low, Integral2 up)
void clause11_21_4_2_e(String &test)
void clause11_21_4_7_9_c(String &test)
void clause11_21_4_2_d(String &test)
void clause11_21_4_6_4(String &test)
void clause11_21_4_7_9_a(String &test)
void clause11_21_4_8_1_c(String &test)
#define EXPECT_THROW(statement, expected_exception)
void clause11_21_4_7_2_b1(String &test)
void clause11_21_4_7_2_c1(String &test)
void clause11_21_4_7_2_b(String &test)
void clause11_21_4_2_h(String &test)
bool usingJEMalloc() noexcept
void clause11_21_4_6_1(String &test)
void clause11_21_4_7_6_b(String &test)
#define EXPECT_EQ(val1, val2)
void clause11_21_4_2_i(String &test)
void clause11_21_4_7_9_b(String &test)
void clause11_21_4_8_1_i(String &test)
static uint64_t test(std::string name, bool fc_, bool dedicated_, bool tc_, bool syncops_, uint64_t base)
constexpr detail::Map< Move > move
const value_type & back() const
void clause11_21_4_7_5_a(String &test)
void clause11_21_4_2_b(String &test)
void clause11_21_4_2_m(String &test)
void clause11_21_4_6_7(String &test)
void clause11_21_4_7_7_a(String &test)
void clause11_21_4_8_1_k(String &test)
void BENCHFUN() getline(size_t iters, size_t arg)
void clause11_21_4_7_4_a(String &test)
void clause11_21_4_8_9_a(String &test)
void clause11_21_4_7_6_d(String &test)
void clause11_21_4_7_3_b(String &test)
void clause11_21_4_8_1_e(String &test)
void clause11_21_4_7_4_d(String &test)
—— Concurrent Priority Queue Implementation ——
void clause11_21_4_6_3_f(String &test)
void clause11_21_4_2_g(String &test)
requires E e noexcept(noexcept(s.error(std::move(e))))
#define EXPECT_GE(val1, val2)
void clause11_21_4_6_3_d(String &test)
void clause11_21_4_7_3_c(String &test)
void clause11_21_4_7_5_b(String &test)
void clause11_21_4_7_2_c2(String &test)
void clause11_21_4_7_9_e(String &test)
void clause11_21_4_6_3_h(String &test)
std::list< char > RandomList(unsigned int maxSize)
void reserve(size_type res_arg=0)
const value_type & front() const
void clause11_21_4_8_1_l(String &test)
void clause11_21_4_8_1_g(String &test)
void clause11_21_4_6_3_c(String &test)
void clause11_21_4_6_3_i(String &test)
#define FOR_EACH_RANGE(i, begin, end)
Gen range(Value begin, Value end)
void clause11_21_4_6_2(String &test)
void clause11_21_4_7_7_d(String &test)
constexpr std::decay< T >::type copy(T &&value) noexcept(noexcept(typename std::decay< T >::type(std::forward< T >(value))))
void clause11_21_4_7_2_a1(String &test)
constexpr auto size(C const &c) -> decltype(c.size())
void clause11_21_4_7_2_b2(String &test)
const value_type * data() const
constexpr auto empty(C const &c) -> decltype(c.empty())
void clause11_21_4_7_7_c(String &test)
void clause11_21_4_8_1_a(String &test)
void clause11_21_4_6_3_e(String &test)
void clause11_21_4_4(String &test)
void clause11_21_4_2_lprime(String &test)
void clause11_21_4_2_l(String &test)
void clause11_21_4_7_1(String &test)
void clause11_21_4_8_1_f(String &test)
void clause11_21_4_2_c(String &test)
void clause11_21_4_6_3_g(String &test)
void clause11_21_4_8_1_b(String &test)
void clause11_21_4_6_6(String &test)
S split(const StringPiece source, char delimiter)
void clause11_21_4_2_f(String &test)
void clause11_21_4_7_3_a(String &test)
size_type capacity() const
void clause11_21_4_6_5(String &test)
void clause11_21_4_7_9_d(String &test)
void clause11_21_4_3(String &test)
size_type find(const basic_fbstring &str, size_type pos=0) const
void push_back(const value_type c)
void clause11_21_4_8_1_h(String &test)
PUSHMI_INLINE_VAR constexpr struct folly::pushmi::operators::from_fn from
void clause11_21_4_7_2_a(String &test)
void clause11_21_4_5(String &test)
void clause11_21_4_7_6_a(String &test)
void clause11_21_4_2_k(String &test)
#define EXPECT_TRUE(condition)
void clause11_21_4_6_3_k(String &test)
void clause11_21_4_2_n(String &test)
static constexpr int mb(int megs)
PUSHMI_INLINE_VAR constexpr struct folly::pushmi::detail::as_const_fn as_const
void clause11_21_4_7_8(String &test)
#define EXPECT_NE(val1, val2)
void clause11_21_4_7_5_c(String &test)
void clause11_21_4_7_2_d(String &test)
basic_fbstring & replace(size_type pos1, size_type n1, const basic_fbstring &str)
void clause11_21_4_7_2_a2(String &test)
void clause11_21_4_7_4_c(String &test)
void clause11_21_4_2_a(String &test)
void swap(SwapTrackingAlloc< T > &, SwapTrackingAlloc< T > &)
#define EXPECT_FALSE(condition)
void clause11_21_4_7_2_c(String &test)
basic_fbstring< char > fbstring
TEST(FBString, testAllClauses)
void clause11_21_4_7_3_d(String &test)
uint32_t randomNumberSeed()
void clause11_21_4_7_5_d(String &test)
void clause11_21_4_8_1_j(String &test)
void clause11_21_4_2_j(String &test)
void clause11_21_4_6_3_j(String &test)
void randomString(String *toFill, size_t size=1000)
void clause11_21_4_6_3_a(String &test)
void clause11_21_4_7_7_b(String &test)
void clause11_21_4_7_6_c(String &test)
size_t goodMallocSize(size_t minSize) noexcept
void clause11_21_4_6_3_b(String &test)