Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1576)

Unified Diff: tools/lexer_generator/transition_key_test.py

Issue 158823002: Experimental parser: refactor TransitionKey to use Term (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/lexer_generator/regex_parser.py ('k') | tools/lexer_generator/transition_keys.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/transition_key_test.py
diff --git a/tools/lexer_generator/transition_key_test.py b/tools/lexer_generator/transition_key_test.py
index f64e0d02d2289917c5e7e5923c5be2632b70ba61..0b627c9306b3ccbb65618db1c75ee8cdddba8f47 100644
--- a/tools/lexer_generator/transition_key_test.py
+++ b/tools/lexer_generator/transition_key_test.py
@@ -48,6 +48,69 @@ class TransitionKeyTestCase(unittest.TestCase):
for (left, right) in self.__equal_pairs:
self.assertEqual(hash(left), hash(right))
+ def test_compare(self):
+ key = lambda x : TransitionKey.range(self.__encoding, x[0], x[1])
+ t_key = lambda x : TransitionKey.unique(x)
+ def check(a, b, expected):
+ self.assertEqual(expected, TransitionKey.compare(key(a), key(b)))
+ self.assertEqual(-expected, TransitionKey.compare(key(b), key(a)))
+ check([1,1], [1,1], 0)
+ check([1,3], [1,3], 0)
+ check([1,3], [4,5], -2)
+ check([1,4], [2,3], -3)
+ check([1,4], [2,4], -3)
+ check([1,3], [1,4], -4)
+ check([1,3], [2,4], -5)
+ check([1,3], [3,4], -5)
+ check([1,3], [3,4], -5)
+
+ def test_superset(self):
+ r_key = lambda a, b : TransitionKey.range(self.__encoding, a, b)
+ t_key = lambda x : TransitionKey.unique(x)
+ def merge(*keys):
+ return TransitionKey.merged_key(self.__encoding, keys)
+ def check(a, b, expected1, expected_none = None):
+ if expected1 == None:
+ expected2 = expected_none
+ elif expected1 == True:
+ expected2 = True if a == b else None
+ else:
+ expected2 = False # disjoint sets remain disjoint
+ for expected in [expected1, expected2]:
+ try:
+ result = a.is_superset_of_key(b)
+ except Exception:
+ self.assertTrue(expected == None)
+ return
+ self.assertTrue(expected != None)
+ self.assertEqual(expected, result)
+ (a, b) = (b, a)
+ # subset cases
+ check(merge(r_key(1, 2), r_key(4, 5)), merge(r_key(1, 2)), True)
+ check(merge(r_key(1, 7), r_key(9, 10)), merge(r_key(3, 4)), True)
+ check(merge(r_key(1, 7), r_key(9, 10)),
+ merge(r_key(1, 7), r_key(9, 10)), True)
+ check(merge(r_key(1, 4)), merge(r_key(2, 3)), True)
+ # disjoint cases
+ check(merge(r_key(1, 4)), merge(r_key(5, 6)), False)
+ check(merge(t_key('t1')), merge(t_key('t2')), False)
+ check(merge(r_key(1, 4), t_key('t1')),
+ merge(r_key(5, 6), t_key('t2')), False)
+ check(merge(r_key(5, 6), t_key('t1')),
+ merge(r_key(1, 4), t_key('t2')), False)
+ # exception cases
+ check(merge(t_key('t1')), merge(t_key('t1'), t_key('t2')), None, True)
+ check(merge(t_key('t1'), t_key('t3')),
+ merge(t_key('t1'), t_key('t2')), None)
+ check(merge(t_key('t2'), t_key('t1')),
+ merge(t_key('t2'), t_key('t3')), None)
+ check(merge(r_key(1, 7), r_key(9, 10)),
+ merge(r_key(2, 8)), None)
+ check(merge(r_key(1, 7), r_key(9, 10)),
+ merge(r_key(10, 11)), None)
+ check(merge(r_key(1, 7), r_key(9, 10)),
+ merge(r_key(8, 9)), None)
+
def test_classes(self):
# class regex, should match, should not match
data = [
@@ -85,9 +148,9 @@ class TransitionKeyTestCase(unittest.TestCase):
def test_disjoint_keys(self):
encoding = self.__encoding
- key1 = TransitionKey(encoding, [(1, 10)])
- key2 = TransitionKey(encoding, [(5, 15)])
- disjoint_set = TransitionKey.disjoint_keys(encoding, set([key1, key2]))
- self.assertTrue(TransitionKey(encoding, [(1, 4)]) in disjoint_set)
- self.assertTrue(TransitionKey(encoding, [(5, 10)]) in disjoint_set)
- self.assertTrue(TransitionKey(encoding, [(11, 15)]) in disjoint_set)
+ key = lambda x, y: TransitionKey.range(encoding, x , y)
+ disjoint_set = TransitionKey.disjoint_keys(encoding,
+ [key(1, 10), key(5, 15)])
+ self.assertTrue(key(1, 4) in disjoint_set)
+ self.assertTrue(key(5, 10) in disjoint_set)
+ self.assertTrue(key(11, 15) in disjoint_set)
« no previous file with comments | « tools/lexer_generator/regex_parser.py ('k') | tools/lexer_generator/transition_keys.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698