diff options
author | Sergio Medeiros <sqmedeiros@gmail.com> | 2014-10-30 16:28:26 -0300 |
---|---|---|
committer | Sergio Medeiros <sqmedeiros@gmail.com> | 2014-10-30 16:28:26 -0300 |
commit | 4ad8fea6fed78219990819daa18934c577d8bd8a (patch) | |
tree | c5dabace21c613d5909521cdf23aa0df151db393 | |
parent | 8d30a0ff8a8584e225c03d878a9add439ea193a3 (diff) | |
download | lpeglabel-4ad8fea6fed78219990819daa18934c577d8bd8a.tar.gz lpeglabel-4ad8fea6fed78219990819daa18934c577d8bd8a.tar.bz2 lpeglabel-4ad8fea6fed78219990819daa18934c577d8bd8a.zip |
Adding tests related to predicates and repetition
-rw-r--r-- | testlabel.lua | 87 |
1 files changed, 65 insertions, 22 deletions
diff --git a/testlabel.lua b/testlabel.lua index 100c0d0..ea18bf5 100644 --- a/testlabel.lua +++ b/testlabel.lua | |||
@@ -5,8 +5,7 @@ assert(p:match("abc") == nil) | |||
5 | 5 | ||
6 | -- throws a label that is not caught by ordinary choice | 6 | -- throws a label that is not caught by ordinary choice |
7 | p = m.T(1) + m.P"a" | 7 | p = m.T(1) + m.P"a" |
8 | local r = p:match("abc") | 8 | assert(p:match("abc") == nil) |
9 | assert(r == nil) | ||
10 | 9 | ||
11 | -- again throws a label that is not caught by ordinary choice | 10 | -- again throws a label that is not caught by ordinary choice |
12 | local g = m.P{ | 11 | local g = m.P{ |
@@ -15,46 +14,94 @@ local g = m.P{ | |||
15 | A = m.T(1), | 14 | A = m.T(1), |
16 | B = m.P"a" | 15 | B = m.P"a" |
17 | } | 16 | } |
18 | r = g:match("abc") | 17 | assert(g:match("abc") == nil) |
19 | assert(r == nil) | ||
20 | 18 | ||
21 | -- throws a label that is not caught by labeled choice | 19 | -- throws a label that is not caught by labeled choice |
22 | p = m.Lc(m.T(2), m.P"a", 1, 3) | 20 | p = m.Lc(m.T(2), m.P"a", 1, 3) |
23 | r = p:match("abc") | 21 | assert(p:match("abc") == nil) |
24 | assert(r == nil) | ||
25 | 22 | ||
26 | -- modifies previous pattern | 23 | -- modifies previous pattern |
27 | -- adds another labeled choice to catch label "2" | 24 | -- adds another labeled choice to catch label "2" |
28 | p = m.Lc(p, m.P"a", 2) | 25 | p = m.Lc(p, m.P"a", 2) |
29 | r = p:match("abc") | 26 | assert(p:match("abc") == 2) |
30 | assert(r == 2) | ||
31 | 27 | ||
32 | -- throws a label that is caught by labeled choice | 28 | -- throws a label that is caught by labeled choice |
33 | p = m.Lc(m.T(25), m.P"a", 25) | 29 | p = m.Lc(m.T(25), m.P"a", 25) |
34 | r = p:match("abc") | 30 | assert(p:match("abc") == 2) |
35 | assert(r == 2) | ||
36 | assert(p:match("bola") == nil) | 31 | assert(p:match("bola") == nil) |
37 | 32 | ||
38 | -- labeled choice did not catch "fail" by default | 33 | -- labeled choice does not catch "fail" by default |
39 | p = m.Lc(m.P"b", m.P"a", 1) | 34 | p = m.Lc(m.P"b", m.P"a", 1) |
40 | r = p:match("abc") | 35 | assert(p:match("abc") == nil) |
41 | assert(r == nil, r) | ||
42 | assert(p:match("bola") == 2) | 36 | assert(p:match("bola") == 2) |
43 | 37 | ||
44 | -- "fail" is label "0" | 38 | -- "fail" is label "0" |
45 | -- labeled choice can catch "fail" | 39 | -- labeled choice can catch "fail" |
46 | p = m.Lc(m.P"b", m.P"a", 0) | 40 | p = m.Lc(m.P"b", m.P"a", 0) |
47 | r = p:match("abc") | 41 | assert(p:match("abc") == 2) |
48 | assert(r == 2, r) | ||
49 | assert(p:match("bola") == 2) | 42 | assert(p:match("bola") == 2) |
50 | 43 | ||
51 | -- "fail" is label "0" | 44 | -- "fail" is label "0" |
52 | -- labeled choice can catch "fail" or "3" | 45 | -- labeled choice catches "fail" or "3" |
53 | p = m.Lc(m.P"a" * m.T(3), (m.P"a" + m.P"b"), 0, 3) | 46 | p = m.Lc(m.P"a" * m.T(3), (m.P"a" + m.P"b"), 0, 3) |
54 | assert(p:match("abc") == 2) | 47 | assert(p:match("abc") == 2) |
55 | assert(p:match("bac") == 2) | 48 | assert(p:match("bac") == 2) |
56 | assert(p:match("cab") == nil) | 49 | assert(p:match("cab") == nil) |
57 | 50 | ||
51 | -- tests related to predicates | ||
52 | p = #m.T(1) + m.P"a" | ||
53 | assert(p:match("abc") == nil) | ||
54 | |||
55 | p = ##m.T(1) + m.P"a" | ||
56 | assert(p:match("abc") == nil) | ||
57 | |||
58 | p = #m.T(0) * m.P"a" | ||
59 | assert(p:match("abc") == fail) | ||
60 | |||
61 | p = #m.T(0) + m.P"a" | ||
62 | assert(p:match("abc") == 2) | ||
63 | |||
64 | p = -m.T(1) * m.P"a" | ||
65 | assert(p:match("abc") == nil) | ||
66 | |||
67 | p = -(-m.T(1)) * m.P"a" | ||
68 | assert(p:match("abc") == nil) | ||
69 | |||
70 | p = -m.T(0) * m.P"a" | ||
71 | assert(p:match("abc") == 2) | ||
72 | |||
73 | p = -m.T(0) + m.P"a" | ||
74 | assert(p:match("abc") == 1) | ||
75 | |||
76 | p = -(-m.T(0)) + m.P"a" | ||
77 | assert(p:match("abc") == 2) | ||
78 | |||
79 | p = m.Lc(-m.T(22), m.P"a", 22) | ||
80 | assert(p:match("abc") == 2) | ||
81 | |||
82 | p = m.Lc(-m.T(0), m.P"a", 0) | ||
83 | assert(p:match("abc") == 1) | ||
84 | |||
85 | p = m.Lc(#m.T(22), m.P"a", 22) | ||
86 | assert(p:match("abc") == 2) | ||
87 | |||
88 | p = m.Lc(#m.T(0), m.P"a", 0) | ||
89 | assert(p:match("abc") == 2) | ||
90 | |||
91 | -- tests related to repetition | ||
92 | p = m.T(1)^0 | ||
93 | assert(p:match("ab") == nil) | ||
94 | |||
95 | p = m.T(0)^0 | ||
96 | assert(p:match("ab") == 1) | ||
97 | |||
98 | p = (m.P"a" + m.T(1))^0 | ||
99 | assert(p:match("aa") == nil) | ||
100 | |||
101 | p = (m.P"a" + m.T(0))^0 | ||
102 | assert(p:match("aa") == 3) | ||
103 | |||
104 | |||
58 | --[[ | 105 | --[[ |
59 | S -> A /{1} 'a' | 106 | S -> A /{1} 'a' |
60 | A -> B | 107 | A -> B |
@@ -85,16 +132,13 @@ assert(g:match("a;a;") == 5) | |||
85 | assert(g:match("a;a") == nil) | 132 | assert(g:match("a;a") == nil) |
86 | 133 | ||
87 | 134 | ||
88 | |||
89 | -- %1 /{1,3} %2 /{2} 'a' | 135 | -- %1 /{1,3} %2 /{2} 'a' |
90 | p = m.Lc(m.Lc(m.T(1), m.T(2), 1, 3), m.P"a", 2) | 136 | p = m.Lc(m.Lc(m.T(1), m.T(2), 1, 3), m.P"a", 2) |
91 | r = p:match("abc") | 137 | assert(p:match("abc") == 2) |
92 | assert(r == 2) | ||
93 | assert(p:match("") == nil) | 138 | assert(p:match("") == nil) |
94 | 139 | ||
95 | p = m.Lc(m.T(1), m.Lc(m.T(2), m.P"a", 2), 1, 3) | 140 | p = m.Lc(m.T(1), m.Lc(m.T(2), m.P"a", 2), 1, 3) |
96 | r = p:match("abc") | 141 | assert(p:match("abc") == 2) |
97 | assert(r == 2) | ||
98 | assert(p:match("") == nil) | 142 | assert(p:match("") == nil) |
99 | 143 | ||
100 | print("+") | 144 | print("+") |
@@ -129,7 +173,6 @@ g = m.P{ | |||
129 | I = sp * m.P"int", | 173 | I = sp * m.P"int", |
130 | Exp = sp * m.P"E", | 174 | Exp = sp * m.P"E", |
131 | } | 175 | } |
132 | --g:pcode() | ||
133 | 176 | ||
134 | local s = "a" | 177 | local s = "a" |
135 | assert(g:match(s) == #s + 1) --1 | 178 | assert(g:match(s) == #s + 1) --1 |