Exemple #1
0
 def test_parser_fmap(self):
     """
     fmap should propagate the lambda to innder functor.
     """
     p = Parser(lambda s: Right(("a", "bcde"))).fmap(lambda x: x[0] + "x")
     res: Right[str] = p("abc")
     self.assertEqual(res, Right(("ax", "bcde")))
Exemple #2
0
 def test_pcomb_anyof(self):
     c1 = char("a")
     c2 = char("b")
     c3 = char("c")
     c = anyof([c1, c2, c3])
     self.assertEqual(c("abc"), Right(("a", "bc")))
     self.assertEqual(c("bbc"), Right(("b", "bc")))
     self.assertEqual(c("cbc"), Right(("c", "bc")))
Exemple #3
0
 def test_pcomb_string(self):
     c = strg("good")
     self.assertEqual(c("good morning"), Right(("good", "morning")))
Exemple #4
0
 def test_pcomb_inchars(self):
     c = inchars(["a", "b", "c"])
     self.assertEqual(c("abc"), Right(("a", "bc")))
     self.assertEqual(c("bbc"), Right(("b", "bc")))
     self.assertEqual(c("cbc"), Right(("c", "bc")))
Exemple #5
0
 def test_pcomb_ntimes(self):
     c1 = char("a")
     c = c1 * 3
     self.assertEqual(c("aaaab"), Right(("aaa", "ab")))
Exemple #6
0
 def test_adjective(self):
     res = E.adjective("ideal")
     self.assertEqual(res, Right(("ideal", "")))
Exemple #7
0
 def test_pcomb_sep_by(self):
     c = sep_by(char(",").discard(), many(char("a") | char("b")))
     self.assertTrue(c("ababx"), Right((["a", "b", "a", "b"], "x")))
Exemple #8
0
 def test_pcomb_many(self):
     """ should return Right for 0 to many matches"""
     c = many(char("a"))
     self.assertEqual(c("aaaaaaaaaabbbb"), Right(("aaaaaaaaaa", "bbbb")))
     self.assertEqual(c("bb"), Right(("", "bb")))
Exemple #9
0
 def test_pcomb_option(self):
     """ return None if there is no match """
     c = optional(char("a"))
     self.assertEqual(c("bc"), Right((None, "")))
Exemple #10
0
 def test_words(self):
     res = E.words("bread is good")
     self.assertEqual(res, Right((["bread", "is", "good"], "")))
Exemple #11
0
 def test_clause(self):
     res = E.clause("i am fine, thx.")
     self.assertEqual(res, Right((["i", "am", "fine"], "thx")))
Exemple #12
0
 def test_word(self):
     res = E.word("bread")
     self.assertEqual(res, Right(("bread", "")))
Exemple #13
0
 def test_noun(self):
     res = E.adjective("sea")
     self.assertEqual(res, Right(("sea", "")))
Exemple #14
0
 def test_verb(self):
     res = E.adjective("think")
     self.assertEqual(res, Right(("think", "")))
Exemple #15
0
 def test_pcomb_until_seq(self):
     c = until_seq("xx")
     self.assertEqual(c("xxabc"), Right(("", "xxabc")))
Exemple #16
0
 def test_pcomb_char(self):
     """ test the basic parse combination """
     c = char("a")
     self.assertEqual(c("abcd"), Right(("a", "bcd")))
Exemple #17
0
 def test_pcomb_until(self):
     c = until(char("x"))
     self.assertEqual(c("xxabc"), Right(("", "xxabc")))
Exemple #18
0
 def test_pcomb_then(self):
     c1 = char("a")
     c2 = char("b")
     c3 = char("c")
     c = c1 >> c2 >> c3
     self.assertEqual(c("abcde"), Right((["abc"], "de")))
Exemple #19
0
 def test_pcomb_many1(self):
     """ should return Left if there is no match"""
     c = many1(char("a"))
     self.assertEqual(c("aaaaaaaaaabbbb"), Right(("aaaaaaaaaa", "bbbb")))
     self.assertTrue(isinstance(c("bb"), Left))
Exemple #20
0
 def test_pcomb_otherwise(self):
     c1 = char("a")
     c2 = char("b")
     c = c1 | c2
     self.assertEqual(c("abc"), Right(("a", "bc")))
     self.assertEqual(c("bbc"), Right(("b", "bc")))
Exemple #21
0
 def test_pcomb_sep_by_digits(self):
     c = sep_by(char("|").discard(), many(digits))
     self.assertTrue(c("123|78|23x"), Right((["123", "78", "23"], "x")))
Exemple #22
0
 def test_adverb(self):
     res = E.adverb("well")
     self.assertEqual(res, Right(("well", "")))