#include "squid.h"
#include "base/CharacterSet.h"
#include "SBufFindTest.h"
+
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/Message.h>
#include <limits>
+#include <random>
/* TODO: The whole SBufFindTest class is currently implemented as a single
CppUnit test case (because we do not want to register and report every one
SBufFindTest::SBufFindTest():
caseLimit(std::numeric_limits<int>::max()),
errorLimit(std::numeric_limits<int>::max()),
- randomSeed(1),
hushSimilar(true),
maxHayLength(40),
thePos(0),
void
SBufFindTest::run()
{
- srandom(randomSeed);
-
for (SBuf::size_type hayLen = 0U; hayLen <= maxHayLength; nextLen(hayLen, maxHayLength)) {
const SBuf cleanHay = RandomSBuf(hayLen);
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklomnpqrstuvwxyz";
+
+ static std::mt19937 mt(time(0));
+
// sizeof() counts the terminating zero at the end of characters
+ // and the distribution is an 'inclusive' value range, so -2
// TODO: add \0 character (needs reporting adjustments to print it as \0)
- static const size_t charCount = sizeof(characters)-1;
-
- char buf[length];
- for (int i = 0; i < length; ++i) {
- const unsigned int pos = random() % charCount;
- assert(pos < sizeof(characters));
- assert(characters[pos] > 32);
- buf[i] = characters[random() % charCount];
- }
+ static std::uniform_int_distribution<uint8_t> dist(0, sizeof(characters)-2);
- return SBuf(buf, length);
+ SBuf buf;
+ buf.reserveCapacity(length);
+ for (int i = 0; i < length; ++i)
+ buf.append(characters[dist(mt)]);
+ return buf;
}
/// increments len to quickly cover [0, max] range, slowing down in risky areas
/* test configuration parameters; can be optionally set before run() */
int caseLimit; ///< approximate caseCount limit
int errorLimit; ///< errorCount limit
- unsigned int randomSeed; ///< pseudo-random sequence choice
/// whether to report only one failed test case per "category"
bool hushSimilar;
/// approximate maximum generated hay string length