diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h index 7e47ab0272a..434285e4907 100644 --- a/src/corelib/tools/qduplicatetracker_p.h +++ b/src/corelib/tools/qduplicatetracker_p.h @@ -94,6 +94,11 @@ public: { return !set.insert(std::move(s)).second; } + // For when you want to know, but aren't *yet* sure you'll add it: + [[nodiscard]] bool contains(const T &s) const + { + return set.find(s) != set.end(); // TODO C++20: can use set.contains() + } template void appendTo(C &c) const & diff --git a/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp b/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp index ad0b6abbc70..f370fcf6814 100644 --- a/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp +++ b/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp @@ -24,12 +24,17 @@ void tst_QDuplicateTracker::hasSeen() { { QDuplicateTracker tracker; + QVERIFY(!tracker.contains(0)); + QVERIFY(!tracker.contains(0)); QVERIFY(!tracker.hasSeen(0)); QVERIFY(tracker.hasSeen(0)); + QVERIFY(tracker.contains(0)); QVERIFY(!tracker.hasSeen(1)); QVERIFY(tracker.hasSeen(1)); // past the prealloc amount + QVERIFY(!tracker.contains(2)); QVERIFY(!tracker.hasSeen(2)); + QVERIFY(tracker.contains(2)); QVERIFY(tracker.hasSeen(2)); } @@ -41,12 +46,16 @@ void tst_QDuplicateTracker::hasSeen() QString string3("string3"); // Move when seen + QVERIFY(!tracker.contains(string1)); QVERIFY(!tracker.hasSeen(string1)); + QVERIFY(tracker.contains(string1)); QVERIFY(tracker.hasSeen(std::move(string1))); // Move when unseen + QVERIFY(!tracker.contains(string2)); QVERIFY(!tracker.hasSeen(std::move(string2))); QVERIFY(tracker.hasSeen(string2_2)); + QVERIFY(tracker.contains(string2_2)); // Past the prealloc amount QVERIFY(!tracker.hasSeen(string3)); @@ -62,17 +71,19 @@ void tst_QDuplicateTracker::hasSeen() // Move when seen QVERIFY(!tracker.hasSeen(string1)); + QVERIFY(tracker.contains(string1)); QVERIFY(tracker.hasSeen(std::move(string1))); // Move when unseen QVERIFY(!tracker.hasSeen(std::move(string2))); QVERIFY(tracker.hasSeen(string2_2)); + QVERIFY(tracker.contains(string2_2)); // Past the prealloc amount + QVERIFY(!tracker.contains(string3)); QVERIFY(!tracker.hasSeen(string3)); QVERIFY(tracker.hasSeen(string3)); } - } void tst_QDuplicateTracker::clear() @@ -80,14 +91,18 @@ void tst_QDuplicateTracker::clear() QDuplicateTracker tracker; QVERIFY(!tracker.hasSeen(0)); QVERIFY(tracker.hasSeen(0)); + QVERIFY(tracker.contains(0)); + QVERIFY(!tracker.contains(1)); QVERIFY(!tracker.hasSeen(1)); QVERIFY(tracker.hasSeen(1)); tracker.clear(); + QVERIFY(!tracker.contains(0)); QVERIFY(!tracker.hasSeen(0)); QVERIFY(tracker.hasSeen(0)); QVERIFY(!tracker.hasSeen(1)); QVERIFY(tracker.hasSeen(1)); + QVERIFY(tracker.contains(1)); } void tst_QDuplicateTracker::appendTo()