20GTEST_TEST(testCaseInsensitiveStrings, only_a_to_z_charsAreConvertedToUpperCase)
22 for (
char ch = 0; ch < 127; ++ch)
24 if (ch >=
'a' && ch <=
'z')
25 ASSERT_TRUE((ch -
'a' +
'A') == DryChem::ci_char_traits::ct_toupper(ch));
27 ASSERT_TRUE(ch == DryChem::ci_char_traits::ct_toupper(ch));
30 static_assert(
'A' == DryChem::ci_char_traits::ct_toupper(
'a'),
"'a' wasn't converted to 'A'.");
33GTEST_TEST(testCaseInsensitiveStrings, ci_char_traits_compare_ConvertsBothArgsToUpperCaseBeforeComparison)
35 static_assert(DryChem::ci_char_traits::compare(
"hello",
"hElLoWorld", 11) == -1,
"s2 should be greater than s1.");
36 static_assert(DryChem::ci_char_traits::compare(
"hello",
"hElLo", 6) == 0,
"The two strings should be equal.");
37 static_assert(DryChem::ci_char_traits::compare(
"helloworld",
"hElLo", 6) == 1,
"s1 should be greater than s2.");
40GTEST_TEST(testCaseInsensitiveStrings, ci_char_traits_find_ConvertsBothArgsToUpperCaseBeforeSearching)
42 const char word[12] {
"Hello World"};
44 const char* actualResult = DryChem::ci_char_traits::find(word, std::size(word),
'w');
45 const char* expectedResult = std::char_traits<char>::find(word, std::size(word),
'W');
46 ASSERT_EQ(*actualResult, *expectedResult);
48 actualResult = DryChem::ci_char_traits::find(word, std::size(word),
's');
49 ASSERT_FALSE(actualResult);
51 actualResult = DryChem::ci_char_traits::find(word, 0,
's');
52 ASSERT_FALSE(actualResult);
67GTEST_TEST(testCaseInsensitiveStrings, allComparisonOperatorsAreSupportedForA_ci_string)
69 DryChem::ci_string lower =
"test";
70 DryChem::ci_string upper =
"TEST";
71 DryChem::ci_string longer =
"THis_iS_A_tEsT";
73 ASSERT_TRUE(lower == upper);
74 ASSERT_TRUE(longer != upper);
75 ASSERT_TRUE(lower < longer);
76 ASSERT_TRUE(longer > upper);
77 ASSERT_TRUE(lower <= upper);
78 ASSERT_TRUE(longer >= lower);
81GTEST_TEST(testCaseInsensitiveStrings, char_traitsCanBeCastIntoOtherchar_traits)
83 std::string lower =
"test";
84 std::string upper =
"TEST";
86 DryChem::ci_string ci_lower = DryChem::traits_cast<DryChem::ci_char_traits>(lower);
87 DryChem::ci_string ci_upper = DryChem::traits_cast<DryChem::ci_char_traits>(upper);
89 ASSERT_TRUE(lower > upper);
90 ASSERT_TRUE(ci_lower == ci_upper);
91 ASSERT_FALSE(DryChem::traits_cast<std::char_traits<char>>(ci_lower) == upper);
94GTEST_TEST(testCaseInsensitiveStrings, a_ci_stringCanUseAllNormalStringMemberFunctions)
96 DryChem::ci_string ci_lower =
"SomE LOng StRInG";
98 ASSERT_EQ(DryChem::ci_string::npos, ci_lower.find(
"x"));
99 ASSERT_EQ(1ul, ci_lower.find_first_not_of(
"s"));
100 ASSERT_EQ(2ul, ci_lower.find_first_of(
"m"));
101 ASSERT_EQ(15ul, ci_lower.find_last_not_of(
"x"));
102 ASSERT_EQ(12ul, ci_lower.find_last_of(
"r"));
103 ASSERT_EQ(16ul, ci_lower.length());
106GTEST_TEST(testCaseInsensitiveStrings, ci_stringsCanBePrintedJustLikeNormalStrings)
109 testing::internal::CaptureStdout();
111 ci_string str =
"THIS is A casE-InsensiTivE StrinG.";
113 std::cout << str << std::endl;
115 ci_string actualOutput = traits_cast<ci_char_traits>(testing::internal::GetCapturedStdout());
116 ASSERT_EQ(actualOutput,
"this is a case-insensitive string.\n");
GTEST_TEST(testCaseInsensitiveStrings, only_a_to_z_charsAreConvertedToUpperCase)
Definition testCaseInsensitiveStrings.hpp:20