| OLD | NEW |
| 1 # Copyright 2013 the V8 project authors. All rights reserved. | 1 # Copyright 2013 the V8 project authors. All rights reserved. |
| 2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
| 3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
| 4 # met: | 4 # met: |
| 5 # | 5 # |
| 6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
| 7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
| 8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
| 9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
| 10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 ("a+b", ["ab", "aab", "aaab"], ["a", "b", ""]), | 47 ("a+b", ["ab", "aab", "aaab"], ["a", "b", ""]), |
| 48 ("a?b", ["ab", "b"], ["a", "c", ""]), | 48 ("a?b", ["ab", "b"], ["a", "c", ""]), |
| 49 ("a*b", ["ab", "aaab", "b"], ["a", "c", ""]), | 49 ("a*b", ["ab", "aaab", "b"], ["a", "c", ""]), |
| 50 ("a|b", ["a", "b"], ["ab", "c", ""]), | 50 ("a|b", ["a", "b"], ["ab", "c", ""]), |
| 51 (".", ["a", "b"], ["", "aa"]), | 51 (".", ["a", "b"], ["", "aa"]), |
| 52 (".*", ["", "a", "abcaabbcc"], []), | 52 (".*", ["", "a", "abcaabbcc"], []), |
| 53 ("a.b", ["aab", "abb", "acb"], ["ab", ""]), | 53 ("a.b", ["aab", "abb", "acb"], ["ab", ""]), |
| 54 ("a.?b", ["aab", "abb", "acb", "ab"], ["aaab", ""]), | 54 ("a.?b", ["aab", "abb", "acb", "ab"], ["aaab", ""]), |
| 55 ("a.+b", ["aab", "abb", "acb"], ["aaac", "ab", ""]), | 55 ("a.+b", ["aab", "abb", "acb"], ["aaac", "ab", ""]), |
| 56 (".|.", ["a", "b"], ["aa", ""]), | 56 (".|.", ["a", "b"], ["aa", ""]), |
| 57 ("//.", ["//a"], ["aa", ""]), |
| 57 ] | 58 ] |
| 58 | 59 |
| 59 def test_matches(self): | 60 def test_matches(self): |
| 60 for (regex, matches, not_matches) in self.__test_data: | 61 for (regex, matches, not_matches) in self.__test_data: |
| 61 (nfa, dfa) = build_automata(regex) | 62 (nfa, dfa) = build_automata(regex) |
| 62 for string in matches: | 63 for string in matches: |
| 63 self.assertTrue(nfa.matches(string)) | 64 self.assertTrue(nfa.matches(string)) |
| 64 self.assertTrue(dfa.matches(string)) | 65 self.assertTrue(dfa.matches(string)) |
| 65 for string in not_matches: | 66 for string in not_matches: |
| 66 self.assertFalse(nfa.matches(string)) | 67 self.assertFalse(nfa.matches(string)) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 77 right_action = ("RIGHT_ACTION",) | 78 right_action = ("RIGHT_ACTION",) |
| 78 left = RegexParser.parse("left") | 79 left = RegexParser.parse("left") |
| 79 right = RegexParser.parse("right") | 80 right = RegexParser.parse("right") |
| 80 left = NfaBuilder.add_action(left, left_action) | 81 left = NfaBuilder.add_action(left, left_action) |
| 81 right = NfaBuilder.add_action(right, right_action) | 82 right = NfaBuilder.add_action(right, right_action) |
| 82 composite = ('ONE_OR_MORE', NfaBuilder.or_graphs([left, right])) | 83 composite = ('ONE_OR_MORE', NfaBuilder.or_graphs([left, right])) |
| 83 nfa = NfaBuilder().nfa(composite) | 84 nfa = NfaBuilder().nfa(composite) |
| 84 dfa = dfa_from_nfa(nfa) | 85 dfa = dfa_from_nfa(nfa) |
| 85 def verify(string, expected): | 86 def verify(string, expected): |
| 86 actions = list(dfa.collect_actions(string)) | 87 actions = list(dfa.collect_actions(string)) |
| 87 assertEqual(len(expected), len(actions)) | 88 self.assertEqual(len(expected), len(actions)) |
| 88 for i, action in enumerate(actions): | 89 for i, action in enumerate(actions): |
| 89 assertEqual(action[i], expected[i]) | 90 self.assertEqual(action[i], expected[i]) |
| 90 def verify_miss(string, expected): | 91 def verify_miss(string, expected): |
| 91 verify(string, expected + [('MISS',)]) | 92 verify(string, expected + [('MISS',)]) |
| 92 def verify_hit(string, expected): | 93 def verify_hit(string, expected): |
| 93 verify(string, expected + [('TERMINATE',)]) | 94 verify(string, expected + [('TERMINATE',)]) |
| 94 (l, r) = left_action, right_action | 95 (l, r) = left_action, right_action |
| 95 verify_hit("left", [l]) | 96 verify_hit("left", [l]) |
| 96 verify_miss("lefta", [l]) | 97 verify_miss("lefta", [l]) |
| 97 verify_hit("leftrightleftright", [l, r, l, r]) | 98 verify_hit("leftrightleftright", [l, r, l, r]) |
| 98 verify_miss("leftrightleftrightx", [l, r, l, r]) | 99 verify_miss("leftrightleftrightx", [l, r, l, r]) |
| 99 | 100 |
| 100 if __name__ == '__main__': | 101 if __name__ == '__main__': |
| 101 unittest.main() | 102 unittest.main() |
| OLD | NEW |