@@ -1622,6 +1622,33 @@ namespace cppstringstests
16221622 Assert::AreEqual (pcs::to_lower (wch), ws[i]);
16231623 Assert::AreEqual (wchar_t (std::tolower (wch)), pcs::CppWString::lower (wch));
16241624 }
1625+
1626+ CppString s (255 , ' \0 ' );
1627+ for (int i : std::views::iota (0 , 256 ))
1628+ s[i] = CppString::value_type (i);
1629+ CppString res{ s.lower () };
1630+ for (auto const [cs, cr] : std::views::zip (s, res)) {
1631+ if (std::islower (cs))
1632+ Assert::IsTrue (std::islower (cr));
1633+ else if (std::isupper (cs))
1634+ Assert::IsTrue (std::islower (cr));
1635+ else
1636+ Assert::AreEqual (cs, cr);
1637+ }
1638+
1639+ CppWString ws (0xffff , ' \0 ' );
1640+ for (int i : std::views::iota (0 , 0x1'0000 ))
1641+ ws[i] = CppWString::value_type (i);
1642+ CppWString wres{ ws.lower () };
1643+ for (auto const [wcs, wcr] : std::views::zip (ws, wres)) {
1644+ if (std::islower (wcs))
1645+ Assert::IsTrue (std::islower (wcr));
1646+ else if (std::isupper (wcs))
1647+ Assert::IsTrue (std::islower (wcr));
1648+ else
1649+ Assert::AreEqual (wcs, wcr);
1650+ }
1651+
16251652 }
16261653
16271654 TEST_METHOD (lstrip)
@@ -3900,5 +3927,55 @@ namespace cppstringstests
39003927 Assert::AreEqual (wexpected.c_str (), wtext.translate (wtrans_table).c_str ());
39013928 }
39023929
3930+ TEST_METHOD (upper)
3931+ {
3932+ for (int c = 0 ; c <= 255 ; ++c) {
3933+ const char ch{ char (c) };
3934+ constexpr int N{ 5 };
3935+ pcs::CppString s (N, ch);
3936+ s.upper ();
3937+ for (int i = 0 ; i < N; ++i)
3938+ Assert::AreEqual (pcs::to_upper (ch), s[i]);
3939+ Assert::AreEqual (char (std::toupper (ch)), pcs::CppString::upper (ch));
3940+ }
3941+
3942+ for (int c = 0 ; c <= 0xffff ; ++c) {
3943+ const wchar_t wch{ wchar_t (c) };
3944+ constexpr int N{ 5 };
3945+ pcs::CppWString ws (N, wch);
3946+ ws.upper ();
3947+ for (int i = 0 ; i < N; ++i)
3948+ Assert::AreEqual (pcs::to_upper (wch), ws[i]);
3949+ Assert::AreEqual (wchar_t (std::toupper (wch)), pcs::CppWString::upper (wch));
3950+ }
3951+
3952+ CppString s (255 , ' \0 ' );
3953+ for (int i : std::views::iota (0 , 256 ))
3954+ s[i] = CppString::value_type (i);
3955+ CppString res{ s.upper () };
3956+ for (auto const [cs, cr] : std::views::zip (s, res)) {
3957+ if (std::islower (cs))
3958+ Assert::IsTrue (std::isupper (cr));
3959+ else if (std::isupper (cs))
3960+ Assert::IsTrue (std::isupper (cr));
3961+ else
3962+ Assert::AreEqual (cs, cr);
3963+ }
3964+
3965+ CppWString ws (0xffff , ' \0 ' );
3966+ for (int i : std::views::iota (0 , 0x1'0000 ))
3967+ ws[i] = CppWString::value_type (i);
3968+ CppWString wres{ ws.upper () };
3969+ for (auto const [wcs, wcr] : std::views::zip (ws, wres)) {
3970+ if (std::islower (wcs))
3971+ Assert::IsTrue (std::isupper (wcr));
3972+ else if (std::isupper (wcs))
3973+ Assert::IsTrue (std::isupper (wcr));
3974+ else
3975+ Assert::AreEqual (wcs, wcr);
3976+ }
3977+
3978+ }
3979+
39033980 };
39043981}
0 commit comments