-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest-converter.py
74 lines (59 loc) · 2.65 KB
/
test-converter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import unittest
from src.convert import RegexpToSmtLibConvertor
class TestRegexConvertor(unittest.TestCase):
def setUp(self):
self.convertor = RegexpToSmtLibConvertor()
def test_basic_str(self):
regex = '2'
smtlib = '(str.to_re "2")'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_paren_str(self):
regex = '(2)'
smtlib = '(str.to_re "2")'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_basic_char_star(self):
regex = '2*'
smtlib = '(re.* (str.to_re "2"))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_basic_char_plus(self):
regex = '2+'
smtlib = '(re.+ (str.to_re "2"))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_basic_concat(self):
regex = '231*'
smtlib = '(re.++ (str.to_re "23") (re.* (str.to_re "1")))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_basic_union(self):
regex = '23|1*'
smtlib = '(re.union (str.to_re "23") (re.* (str.to_re "1")))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_adv_union(self):
regex = '1|2*3|3'
smtlib = '(re.union (str.to_re "1") (re.++ (re.* (str.to_re "2")) (str.to_re "3")) (str.to_re "3"))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_paren_union(self):
regex = '2(3|a*)'
smtlib = '(re.++ (str.to_re "2") (re.union (str.to_re "3") (re.* (str.to_re "a"))))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_allchar_star(self):
regex = '.*'
smtlib = '(re.* re.allchar)'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_char_ranges(self):
regex = '[a-zY-Z3]+'
smtlib = '(re.+ (re.union (str.to_re "3") (re.range "Y" "Z") (re.range "a" "z")))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_char_seq_merge_optimization(self):
regex = 'ab|a|22*3a'
smtlib = '(re.union (str.to_re "ab") (str.to_re "a") (re.++ (str.to_re "2") (re.* (str.to_re "2")) (str.to_re "3a")))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_optional_1(self):
regex = '123?'
smtlib = '(re.++ (str.to_re "12") (re.opt (str.to_re "3")))'
self.assertEqual(self.convertor.convert(regex), smtlib)
def test_optional_2(self):
regex = '1(23)?'
smtlib = '(re.++ (str.to_re "1") (re.opt (str.to_re "23")))'
self.assertEqual(self.convertor.convert(regex), smtlib)
if __name__ == '__main__':
unittest.main()