Example #1
0
    def test_or_star(self):
        r = NFSM("(RR|HHH)*.?", 10, string.ascii_uppercase)
        self.assert_no_references(r)

        self.assertTrue(r.match("RRRRRRRRRR"))
        self.assertTrue(r.match("RRRRRRHHHA"))
        self.assertTrue(r.match("RRRRRRHHHR"))
        self.assertTrue(r.match("RRRRRRHHHH"))
        self.assertTrue(r.match("HHHHHHRRRR"))
        self.assertTrue(r.match("RRHHHRRHHH"))
        self.assertTrue(r.match("HHHRRRRRRZ"))

        self.assertFalse(r.match("RHHHHHHHHH"))
        self.assertFalse(r.match("HHHRRRRRR"))
        self.assertFalse(r.match("HHHHHHHHHRR"))
        self.assertFalse(r.match("HHRRRRRRRR"))
        self.assertFalse(r.match("RRRRRRRRRRZ"))
        self.assertFalse(r.match("RRRRRRRRRRH"))

        r.constrain_slot(2, set("H"))

        self.assertTrue(r.match("RRHHHHHHRR"))
        self.assertTrue(r.match("HHHRRRRHHH"))
        self.assertTrue(r.match("HHHHHHHHHZ"))
        self.assertFalse(r.match("RRRRHHHHHH"))
        self.assertFalse(r.match("RRRRRRHHHZ"))

        r.constrain_slot(2, set("R"))

        self.assertFalse(r.match("HHHHHHHHHZ"))
        self.assertFalse(r.match("RRRRHHHHHH"))
        self.assertFalse(r.match("RRRRRRHHHH"))
        self.assertFalse(r.match("HHHHHHRRRR"))
Example #2
0
    def test_complex(self):
        r = NFSM("F.*[AO].*[AO].*", 9, string.ascii_uppercase)
        self.assert_no_references(r)
        # A few positive matches
        self.assertTrue(r.match("FBCODEAFG"))
        self.assertTrue(r.match("FBOCDEAFG"))
        self.assertTrue(r.match("FBCADEAFG"))
        self.assertTrue(r.match("FBCADEFOG"))
        self.assertTrue(r.match("FODEFOGHI"))
        self.assertTrue(r.match("FBCAAEFOG"))
        self.assertTrue(r.match("FBCAOEFHG"))

        # A few negative matches
        self.assertFalse(r.match("ABCODEAFG"))
        self.assertFalse(r.match("FBZCDEAFG"))
        self.assertFalse(r.match("FBCABEZFG"))
        self.assertFalse(r.match("FZZZZZZZZ"))

        r.constrain_slot(1, set("AO"))
        
        self.assertFalse(r.match("FBCODEAFG"))
        self.assertFalse(r.match("FBOCDEAFG"))
        self.assertFalse(r.match("FBCADEAFG"))
        self.assertFalse(r.match("FBCADEFOG"))
        self.assertTrue(r.match("FODEFOGHI"))
        self.assertFalse(r.match("FBCAAEFOG"))
        self.assertFalse(r.match("FBCAOEFHG"))

        self.assertFalse(r.match("ABCODEAFG"))
        self.assertFalse(r.match("FBZCDEAFG"))
        self.assertFalse(r.match("FBCAOEZFG"))
        self.assertFalse(r.match("FZZZZZZZZ"))
Example #3
0
    def test_or_peek_and_constraint(self):
        r = NFSM("AB|BC", 2, "ABC")
        self.assert_no_references(r)

        self.assertEqual(set("AB"), r.peek_slot(0))
        self.assertEqual(set("BC"), r.peek_slot(1))

        r.constrain_slot(0, set("AC"))

        self.assertEqual(set("A"), r.peek_slot(0))
        self.assertEqual(set("B"), r.peek_slot(1))
Example #4
0
    def test_simple_constraints(self):
        r = NFSM("...", 3, "ABC")
        self.assert_no_references(r)

        self.assertTrue(r.match("AAA"))
        self.assertTrue(r.match("ABC"))

        r.constrain_slot(1, set("AB"))
        self.assertTrue(r.match("AAA"))
        self.assertTrue(r.match("CBC"))
        self.assertFalse(r.match("ACA"))
        self.assertFalse(r.match("BCA"))

        r.constrain_slot(0, set("C"))
        self.assertTrue(r.match("CAB"))
        self.assertFalse(r.match("BAB"))
Example #5
0
    def test_backref_simple(self):
        r = NFSM("(.)\\1", 2, "ABC")
        self.assertTrue(r.match("AA"))
        self.assertTrue(r.match("CC"))
        self.assertFalse(r.match("AB"))

        r.constrain_slot(0, set("AB"))

        self.assertTrue(r.match("AA"))
        self.assertTrue(r.match("BB"))
        self.assertFalse(r.match("CC"))

        r.constrain_slot(1, set("BC"))

        self.assertTrue(r.match("BB"))
        self.assertFalse(r.match("AA"))
        self.assertFalse(r.match("CC"))
Example #6
0
    def test_multi_or(self):
        r = NFSM("(DI|NS|TH|OM)*", 8, string.ascii_uppercase)
        self.assert_no_references(r)

        self.assertTrue(r.match("DIDIDIDI"))
        self.assertTrue(r.match("DINSTHOM"))
        self.assertTrue(r.match("OMTHNSDI"))

        self.assertFalse(r.match("ADINSTHOZ"))
        self.assertFalse(r.match("ZZZZZZZZ"))

        r.constrain_slot(0, set("DZ"))

        self.assertTrue(r.match("DIDIDIDI"))
        self.assertTrue(r.match("DINSTHOM"))
        self.assertFalse(r.match("OMTHNSDI"))
        self.assertFalse(r.match("ZINSTHOM"))