@@ -1218,12 +1218,31 @@ void test_bitset(mt19937_64& gen) {
12181218 test_randomized_bitset_base_count<512 - 5 , 32 + 10 >(gen);
12191219}
12201220
1221+ template <class T >
1222+ void test_case_string_find (const basic_string<T>& input_haystack, const T ch) {
1223+ const auto expected_iter = last_known_good_find (input_haystack.begin (), input_haystack.end (), ch);
1224+ const auto expected =
1225+ (expected_iter != input_haystack.end ()) ? expected_iter - input_haystack.begin () : ptrdiff_t {-1 };
1226+ const auto actual = static_cast <ptrdiff_t >(input_haystack.find (ch));
1227+ assert (expected == actual);
1228+ }
1229+
1230+ template <class T >
1231+ void test_case_string_rfind (const basic_string<T>& input_haystack, const T ch) {
1232+ const auto expected_iter = last_known_good_find_last (input_haystack.begin (), input_haystack.end (), ch);
1233+ const auto expected =
1234+ (expected_iter != input_haystack.end ()) ? expected_iter - input_haystack.begin () : ptrdiff_t {-1 };
1235+ const auto actual = static_cast <ptrdiff_t >(input_haystack.rfind (ch));
1236+ assert (expected == actual);
1237+ }
1238+
12211239template <class T >
12221240void test_case_string_find_first_of (const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {
1223- auto expected_iter = last_known_good_find_first_of (
1241+ const auto expected_iter = last_known_good_find_first_of (
12241242 input_haystack.begin (), input_haystack.end (), input_needle.begin (), input_needle.end ());
1225- auto expected = (expected_iter != input_haystack.end ()) ? expected_iter - input_haystack.begin () : ptrdiff_t {-1 };
1226- auto actual = static_cast <ptrdiff_t >(input_haystack.find_first_of (input_needle));
1243+ const auto expected =
1244+ (expected_iter != input_haystack.end ()) ? expected_iter - input_haystack.begin () : ptrdiff_t {-1 };
1245+ const auto actual = static_cast <ptrdiff_t >(input_haystack.find_first_of (input_needle));
12271246 assert (expected == actual);
12281247}
12291248
@@ -1242,8 +1261,8 @@ size_t last_known_good_find_last_of(const basic_string<T>& h, const basic_string
12421261
12431262template <class T >
12441263void test_case_string_find_last_of (const basic_string<T>& input_haystack, const basic_string<T>& input_needle) {
1245- size_t expected = last_known_good_find_last_of (input_haystack, input_needle);
1246- size_t actual = input_haystack.find_last_of (input_needle);
1264+ const size_t expected = last_known_good_find_last_of (input_haystack, input_needle);
1265+ const size_t actual = input_haystack.find_last_of (input_needle);
12471266 assert (expected == actual);
12481267}
12491268
@@ -1255,6 +1274,10 @@ void test_basic_string_dis(mt19937_64& gen, D& dis) {
12551274 input_needle.reserve (needleDataCount);
12561275
12571276 for (;;) {
1277+ const T ch = static_cast <T>(dis (gen));
1278+ test_case_string_find (input_haystack, ch);
1279+ test_case_string_rfind (input_haystack, ch);
1280+
12581281 input_needle.clear ();
12591282
12601283 test_case_string_find_first_of (input_haystack, input_needle);
0 commit comments