1+ #include  " valid_palindrome.h" 
2+ 
3+ #include  < gtest/gtest.h> 
4+ #include  < string> 
5+ 
6+ using  std::string;
7+ 
8+ struct  ValidPalindromeCase  {
9+   const  std::string test_name;
10+   const  string s;
11+   const  bool  expected;
12+ };
13+ 
14+ using  ValidPalindromeTest = ::testing::TestWithParam<ValidPalindromeCase>;
15+ 
16+ TEST_P (ValidPalindromeTest, TestCases) {
17+   const  ValidPalindromeCase &test_case = GetParam ();
18+   const  bool  result = isPalindrome (test_case.s );
19+   EXPECT_EQ (result, test_case.expected );
20+ }
21+ 
22+ INSTANTIATE_TEST_SUITE_P (
23+     ValidPalindromeTestCases, ValidPalindromeTest,
24+     ::testing::Values (
25+         ValidPalindromeCase{.test_name  = " ClassicPanama" 
26+                             .s  = " A man, a plan, a canal: Panama" 
27+                             .expected  = true },
28+         ValidPalindromeCase{
29+             .test_name  = " RaceCarFalse" s  = " race a car" expected  = false },
30+         ValidPalindromeCase{
31+             .test_name  = " EmptyString" s  = " " expected  = true },
32+         ValidPalindromeCase{
33+             .test_name  = " SingleChar" s  = " a" expected  = true },
34+         ValidPalindromeCase{
35+             .test_name  = " CaseInsensitive" s  = " Aa" expected  = true },
36+         ValidPalindromeCase{
37+             .test_name  = " TwoCharFalse" s  = " ab" expected  = false },
38+         ValidPalindromeCase{
39+             .test_name  = " TwoCharTrue" s  = " aa" expected  = true },
40+         ValidPalindromeCase{
41+             .test_name  = " SimplePalindrome" s  = " racecar" expected  = true },
42+         ValidPalindromeCase{
43+             .test_name  = " SimpleFalse" s  = " hello" expected  = false },
44+         ValidPalindromeCase{
45+             .test_name  = " SantaNasa" s  = " A Santa at NASA" expected  = true },
46+         ValidPalindromeCase{.test_name  = " CarCatQuestion" 
47+                             .s  = " Was it a car or a cat I saw?" 
48+                             .expected  = true },
49+         ValidPalindromeCase{.test_name  = " NixonApostrophe" 
50+                             .s  = " No 'x' in Nixon" 
51+                             .expected  = true },
52+         ValidPalindromeCase{
53+             .test_name  = " MadamAdam" s  = " Madam, I'm Adam" expected  = true },
54+         ValidPalindromeCase{.test_name  = " NeverOddEven" 
55+                             .s  = " never odd or even" 
56+                             .expected  = true },
57+         ValidPalindromeCase{
58+             .test_name  = " NopeFalse" s  = " nope" expected  = false },
59+         ValidPalindromeCase{
60+             .test_name  = " MixedAlphanumFalse" s  = " 0P" expected  = false },
61+         ValidPalindromeCase{.test_name  = " PanamaExclamation" 
62+                             .s  = " A man, a plan, a canal: Panama!" 
63+                             .expected  = true },
64+         ValidPalindromeCase{.test_name  = " RaceEcarHyphen" 
65+                             .s  = " race a E-car" 
66+                             .expected  = true },
67+         ValidPalindromeCase{.test_name  = " AbleElba" 
68+                             .s  = " Able was I ere I saw Elba" 
69+                             .expected  = true },
70+         ValidPalindromeCase{
71+             .test_name  = " NumericPalindrome" s  = " 12321" expected  = true },
72+         ValidPalindromeCase{
73+             .test_name  = " NumericFalse" s  = " 12345" expected  = false },
74+         ValidPalindromeCase{.test_name  = " AlphanumPalindrome" 
75+                             .s  = " a1b2c3c2b1a" 
76+                             .expected  = true },
77+         ValidPalindromeCase{.test_name  = " AlphanumFalse" 
78+                             .s  = " 1a2b3c3c2b1a" 
79+                             .expected  = false },
80+         ValidPalindromeCase{.test_name  = " OnlySpecialChars" 
81+                             .s  = " .,!@#$%^&*()" 
82+                             .expected  = true },
83+         ValidPalindromeCase{.test_name  = " SpecialCharsMiddle" 
84+                             .s  = " a.,!@#$%^&*()a" 
85+                             .expected  = true },
86+         ValidPalindromeCase{.test_name  = " DammitMad" 
87+                             .s  = " Dammit, I'm mad!" 
88+                             .expected  = true },
89+         ValidPalindromeCase{
90+             .test_name  = " StepPets" s  = " Step on no pets" expected  = true },
91+         ValidPalindromeCase{.test_name  = " RatQuestion" 
92+                             .s  = " Was it a rat I saw?" 
93+                             .expected  = true },
94+         ValidPalindromeCase{.test_name  = " OwlWorm" 
95+                             .s  = " Mr. Owl ate my metal worm" 
96+                             .expected  = true }),
97+     [](const  ::testing::TestParamInfo<ValidPalindromeCase> &info) {
98+       return  info.param .test_name ;
99+     });
0 commit comments