@@ -354,6 +354,8 @@ TEST_F(StringsFindTest, AllEmpty)
354354 CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected8);
355355 results = cudf::strings::ends_with (strings_view, targets_view);
356356 CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected8);
357+ results = cudf::strings::find_instance (strings_view, cudf::string_scalar (" e" ), 0 );
358+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected32);
357359}
358360
359361TEST_F (StringsFindTest, AllNull)
@@ -394,6 +396,8 @@ TEST_F(StringsFindTest, AllNull)
394396 CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected8);
395397 results = cudf::strings::ends_with (strings_view, targets_view);
396398 CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected8);
399+ results = cudf::strings::find_instance (strings_view, cudf::string_scalar (" e" ), 0 );
400+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected32);
397401}
398402
399403TEST_F (StringsFindTest, ErrorCheck)
@@ -412,6 +416,11 @@ TEST_F(StringsFindTest, ErrorCheck)
412416 cudf::logic_error);
413417 EXPECT_THROW (cudf::strings::find (strings_view, targets_view), cudf::logic_error);
414418 EXPECT_THROW (cudf::strings::find (strings_view, strings_view, -1 ), cudf::logic_error);
419+
420+ auto invalid_str = cudf::string_scalar (" " , false );
421+ auto valid_str = cudf::string_scalar (" 1" );
422+ EXPECT_THROW (cudf::strings::find_instance (strings_view, invalid_str, 0 ), std::invalid_argument);
423+ EXPECT_THROW (cudf::strings::find_instance (strings_view, valid_str, -1 ), std::invalid_argument);
415424}
416425
417426class FindParmsTest : public StringsFindTest ,
@@ -469,3 +478,82 @@ TEST_P(FindParmsTest, Find)
469478INSTANTIATE_TEST_CASE_P (StringsFindTest,
470479 FindParmsTest,
471480 testing::ValuesIn (std::array<cudf::size_type, 4 >{0 , 1 , 2 , 3 }));
481+
482+ TEST_F (StringsFindTest, FindInstance)
483+ {
484+ auto validity = cudf::test::iterators::null_at (4 );
485+ auto input = cudf::test::strings_column_wrapper (
486+ {" thésé" , " yellellellellellellellellellellellellellello" , " eeeee" , " " , " " , " ééééé" }, validity);
487+ auto sv = cudf::strings_column_view (input);
488+
489+ using find_col = cudf::test::fixed_width_column_wrapper<cudf::size_type>;
490+ auto none = find_col ({-1 , -1 , -1 , -1 , -1 , -1 }, validity);
491+
492+ auto just_e = cudf::string_scalar (" e" );
493+ auto expect_col = cudf::strings::find (sv, just_e);
494+ auto results = cudf::strings::find_instance (sv, just_e, 0 );
495+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, *expect_col);
496+ auto expected = find_col ({-1 , 4 , 1 , -1 , -1 , -1 }, validity);
497+ results = cudf::strings::find_instance (sv, just_e, 1 );
498+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
499+ expected = find_col ({-1 , 7 , 2 , -1 , -1 , -1 }, validity);
500+ results = cudf::strings::find_instance (sv, just_e, 2 );
501+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
502+ expected = find_col ({-1 , 10 , 3 , -1 , -1 , -1 }, validity);
503+ results = cudf::strings::find_instance (sv, just_e, 3 );
504+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
505+ expected = find_col ({-1 , 13 , 4 , -1 , -1 , -1 }, validity);
506+ results = cudf::strings::find_instance (sv, just_e, 4 );
507+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
508+
509+ auto fancy_e = cudf::string_scalar (" é" );
510+ expect_col = cudf::strings::find (sv, fancy_e);
511+ results = cudf::strings::find_instance (sv, fancy_e, 0 );
512+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, *expect_col);
513+ expected = find_col ({4 , -1 , -1 , -1 , -1 , 1 }, validity);
514+ results = cudf::strings::find_instance (sv, fancy_e, 1 );
515+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
516+ expected = find_col ({-1 , -1 , -1 , -1 , -1 , 2 }, validity);
517+ results = cudf::strings::find_instance (sv, fancy_e, 2 );
518+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
519+ expected = find_col ({-1 , -1 , -1 , -1 , -1 , 4 }, validity);
520+ results = cudf::strings::find_instance (sv, fancy_e, 4 );
521+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
522+ results = cudf::strings::find_instance (sv, fancy_e, 5 );
523+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, none);
524+
525+ auto target = cudf::string_scalar (" elle" );
526+ expect_col = cudf::strings::find (sv, target);
527+ results = cudf::strings::find_instance (sv, target, 0 );
528+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, *expect_col);
529+ expected = find_col ({-1 , 4 , -1 , -1 , -1 , -1 }, validity);
530+ results = cudf::strings::find_instance (sv, target, 1 );
531+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
532+ expected = find_col ({-1 , 7 , -1 , -1 , -1 , -1 }, validity);
533+ results = cudf::strings::find_instance (sv, target, 2 );
534+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
535+ expected = find_col ({-1 , 31 , -1 , -1 , -1 , -1 }, validity);
536+ results = cudf::strings::find_instance (sv, target, 10 );
537+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
538+ expected = find_col ({-1 , 34 , -1 , -1 , -1 , -1 }, validity);
539+ results = cudf::strings::find_instance (sv, target, 11 );
540+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
541+ results = cudf::strings::find_instance (sv, target, 14 );
542+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, none);
543+
544+ auto fancy_es = cudf::string_scalar (" éé" );
545+ expect_col = cudf::strings::find (sv, fancy_es);
546+ results = cudf::strings::find_instance (sv, fancy_es, 0 );
547+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, *expect_col);
548+ expected = find_col ({-1 , -1 , -1 , -1 , -1 , 1 }, validity);
549+ results = cudf::strings::find_instance (sv, fancy_es, 1 );
550+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
551+ expected = find_col ({-1 , -1 , -1 , -1 , -1 , 2 }, validity);
552+ results = cudf::strings::find_instance (sv, fancy_es, 2 );
553+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
554+ expected = find_col ({-1 , -1 , -1 , -1 , -1 , 3 }, validity);
555+ results = cudf::strings::find_instance (sv, fancy_es, 3 );
556+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, expected);
557+ results = cudf::strings::find_instance (sv, fancy_es, 4 );
558+ CUDF_TEST_EXPECT_COLUMNS_EQUAL (*results, none);
559+ }
0 commit comments