def test_is_match__abc_amanydot(self):
     """
     Example 5:
     Input: s = "mississippi", p = "mis*is*p*."
     Output: false
     """
     self.assertFalse(Solution().isMatch("abc", p="a*."))
 def test_is_match__example1(self):
     """
     Example 1:
     Input: s = "aa", p = "a"
     Output: false
     Explanation: "a" does not match the entire string "aa".
     """
     self.assertFalse(Solution().isMatch(s="aa", p="a"))
 def test_is_match__example4(self):
     """
     Example 4:
     Input: s = "aab", p = "c*a*b"
     Output: true
     Explanation: c can be repeated 0 times, a can be repeated 1 time. Therefore, it matches "aab".
     """
     self.assertTrue(Solution().isMatch(s="aab", p="c*a*b"))
 def test_is_match__example3(self):
     """
     Example 3:
     Input: s = "ab", p = ".*"
     Output: true
     Explanation: ".*" means "zero or more (*) of any character (.)".
     """
     self.assertTrue(Solution().isMatch(s="ab", p=".*"))
 def test_is_match__example2(self):
     """
     Example 2:
     Input: s = "aa", p = "a*"
     Output: true
     Explanation: '*' means zero or more of the preceding element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
     """
     self.assertTrue(Solution().isMatch(s="aa", p="a*"))
 def test_is_match_a_abmany(self):
     self.assertTrue(Solution().isMatch("a", p="ab*"))
 def test_is_match__ab_amanydot(self):
     self.assertTrue(Solution().isMatch("a", p=".*."))
 def test_is_match__a_dotmanydotmany(self):
     self.assertTrue(Solution().isMatch("a", p=".*.*"))
 def test_is_match__acb_dotmanybmany(self):
     self.assertTrue(Solution().isMatch("accb", p=".*b*"))
 def test_is_match__abc_dotmanyd(self):
     self.assertFalse(Solution().isMatch("abc", p=".*d"))
 def test_is_match__abc_dotmanyc(self):
     self.assertTrue(Solution().isMatch("abc", p=".*c"))