@@ -771,6 +771,87 @@ namespace cppstringstests
771771 Assert::IsFalse (wtext.contains (L' a' ));
772772 }
773773
774+ TEST_METHOD (contains_n)
775+ {
776+ pcs::CppString text (" Abcd. Efgh ij!" );
777+ for (std::size_t index = 0 ; index < text.size (); ++index) {
778+ Assert::IsTrue (text.contains_n (text.substr (index), index));
779+ for (std::size_t count = 0 ; count < text.size () - index; ++count) {
780+ Assert::IsTrue (text.contains_n (text.substr (index, count), index, count));
781+ Assert::IsTrue (text.contains_n (text.substr (index, count), index, count + 1 ));
782+ if (count > 0 )
783+ Assert::IsFalse (text.contains_n (text.substr (index, count), index, count - 1 ));
784+ }
785+ }
786+ Assert::IsFalse (text.contains_n (" zzz" cs, 0 ));
787+ Assert::IsFalse (text.contains_n (" abc" cs, 0 ));
788+ Assert::IsFalse (text.contains_n (" Abcd. Efgh ij!!" cs, 0 ));
789+ Assert::IsTrue (text.contains_n (" " cs, 6 ));
790+ Assert::IsFalse (text.contains_n (" . Ef" cs, 10 , 4 ));
791+ Assert::IsFalse (text.contains_n (" . Ef" cs, 4 , 3 ));
792+
793+ pcs::CppWString wtext (L" Abcd. Efgh ij!" );
794+ for (std::size_t index = 0 ; index < wtext.size (); ++index) {
795+ Assert::IsTrue (wtext.contains_n (wtext.substr (index), index));
796+ for (std::size_t count = 0 ; count < text.size () - index; ++count) {
797+ Assert::IsTrue (wtext.contains_n (wtext.substr (index, count), index, count));
798+ Assert::IsTrue (wtext.contains_n (wtext.substr (index, count), index, count + 1 ));
799+ if (count > 0 )
800+ Assert::IsFalse (wtext.contains_n (wtext.substr (index, count), index, count - 1 ));
801+ }
802+ }
803+ Assert::IsFalse (wtext.contains_n (L" zzz" cs, 0 ));
804+ Assert::IsFalse (wtext.contains_n (L" abc" cs, 0 ));
805+ Assert::IsFalse (wtext.contains_n (L" Abcd. Efgh ij!!" cs, 0 ));
806+ Assert::IsTrue (wtext.contains_n (L" " cs, 6 ));
807+ Assert::IsFalse (wtext.contains_n (L" . Ef" cs, 10 , 4 ));
808+ Assert::IsFalse (wtext.contains_n (L" . Ef" cs, 4 , 3 ));
809+
810+ for (std::size_t index = 0 ; index < text.size (); ++index) {
811+ Assert::IsTrue (text.contains_n (text.substr (index), index));
812+ for (std::size_t count = 0 ; count < text.size () - index; ++count) {
813+ Assert::IsTrue (text.contains_n (text.substr (index, count).c_str (), index, count));
814+ Assert::IsTrue (text.contains_n (text.substr (index, count).c_str (), index, count + 1 ));
815+ if (count > 0 )
816+ Assert::IsFalse (text.contains_n (text.substr (index, count).c_str (), index, count - 1 ));
817+ }
818+ }
819+ Assert::IsFalse (text.contains_n (" z" , 0 ));
820+ Assert::IsFalse (text.contains_n (" a" , 0 ));
821+ Assert::IsFalse (text.contains_n (" Abcd. Efgh ij!!" , 0 ));
822+ Assert::IsTrue (text.contains_n (" " , 6 ));
823+ Assert::IsTrue (text.contains_n (nullptr , 5 ));
824+ Assert::IsFalse (text.contains_n (" . Ef" , 10 , 4 ));
825+ Assert::IsFalse (text.contains_n (" . Ef" , 4 , 3 ));
826+
827+ for (std::size_t index = 0 ; index < text.size (); ++index) {
828+ Assert::IsTrue (wtext.contains_n (wtext.substr (index), index));
829+ for (std::size_t count = 0 ; count < wtext.size () - index; ++count) {
830+ Assert::IsTrue (wtext.contains_n (wtext.substr (index, count).c_str (), index, count));
831+ Assert::IsTrue (wtext.contains_n (wtext.substr (index, count).c_str (), index, count + 1 ));
832+ if (count > 0 )
833+ Assert::IsFalse (wtext.contains_n (wtext.substr (index, count).c_str (), index, count - 1 ));
834+ }
835+ }
836+ Assert::IsFalse (wtext.contains_n (L" z" , 0 ));
837+ Assert::IsFalse (wtext.contains_n (L" a" , 0 ));
838+ Assert::IsFalse (wtext.contains_n (L" Abcd. Efgh ij!!" , 0 ));
839+ Assert::IsTrue (wtext.contains_n (L" " , 6 ));
840+ Assert::IsTrue (wtext.contains_n (nullptr , 3 ));
841+ Assert::IsFalse (wtext.contains_n (L" . Ef" , 10 , 4 ));
842+ Assert::IsFalse (wtext.contains_n (L" . Ef" , 4 , 3 ));
843+
844+ for (auto const ch : text)
845+ Assert::IsTrue (text.contains_n (ch, 0 ));
846+ Assert::IsFalse (text.contains_n (' z' , 0 , 21 ));
847+ Assert::IsFalse (text.contains_n (' a' , 0 ));
848+
849+ for (auto const wch : wtext)
850+ Assert::IsTrue (wtext.contains_n (wch, 0 ));
851+ Assert::IsFalse (wtext.contains_n (L' z' , 0 ));
852+ Assert::IsFalse (wtext.contains_n (L' a' , 0 , 21 ));
853+ }
854+
774855 TEST_METHOD (count)
775856 {
776857 pcs::CppString s (" abcabcabcdefabca bca bcabca" );
0 commit comments