| 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)
|
|
|