| 59 | } |
| 60 | |
| 61 | void FastHashTest::testStringsShouldMatch_data() |
| 62 | { |
| 63 | QTest::addColumn<QString>("needle"); |
| 64 | QTest::addColumn<QString>("haystack"); |
| 65 | |
| 66 | QTest::newRow("tag manager") << "tagmanager.com/tag.js" << "target.ad.tagmanager.com/tag.js"; |
| 67 | QTest::newRow("cdn") << "somecdn.com/img" << "https://subdomain.somecdn.com/img/a/123/4/xyz.jpg"; |
| 68 | QTest::newRow("quick brown fox") << "fox jumped" << "The quick brown fox jumped over the lazy dog"; |
| 69 | |
| 70 | // Make 10 random strings - only generating 10 as the fast hash is benchmarked, and each row of data |
| 71 | // is ran tens to hundreds of thousands of times to test correctness and performance |
| 72 | const int numRandomStrings = 10; |
| 73 | const auto charSet = charset(); |
| 74 | std::default_random_engine rng(std::random_device{}()); |
| 75 | std::uniform_int_distribution<> dist(0, charSet.size() - 1); |
| 76 | auto randchar = [charSet, &dist,&rng](){ |
| 77 | return charSet[dist(rng)]; |
| 78 | }; |
| 79 | |
| 80 | std::uniform_int_distribution<size_t> randStringLen(80, 200); |
| 81 | std::uniform_int_distribution<size_t> randNeedleLen(5, 70); |
| 82 | for (int i = 0; i < numRandomStrings; ++i) |
| 83 | { |
| 84 | size_t stringLen = randStringLen(rng); |
| 85 | size_t needleLen = randNeedleLen(rng); |
| 86 | |
| 87 | auto randomString = random_string(stringLen, randchar); |
| 88 | |
| 89 | std::uniform_int_distribution<size_t> randNeedleOffset(0, randomString.size() - needleLen); |
| 90 | size_t needleOffset = randNeedleOffset(rng); |
| 91 | auto randomNeedle = randomString.substr(needleOffset, needleLen); |
| 92 | |
| 93 | QString testName = QString("Random string %1").arg(i); |
| 94 | QTest::newRow(testName.toStdString().c_str()) << randomNeedle.c_str() << randomString.c_str(); |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | void FastHashTest::testStringsShouldMatch() |
| 99 | { |
nothing calls this directly
no test coverage detected