diff options
author | Sérgio Queiroz <sqmedeiros@gmail.com> | 2017-12-28 15:45:29 -0300 |
---|---|---|
committer | Sérgio Queiroz <sqmedeiros@gmail.com> | 2017-12-28 15:45:29 -0300 |
commit | 261e41117c2ec8d50b9aff1ecaaa701d2af5c211 (patch) | |
tree | 834bdb33f8bad3692c392d96daca15218420dd0d /testlabel.lua | |
parent | 59da25ff241a83d8139e41199ef7a23f6e17fa65 (diff) | |
download | lpeglabel-261e41117c2ec8d50b9aff1ecaaa701d2af5c211.tar.gz lpeglabel-261e41117c2ec8d50b9aff1ecaaa701d2af5c211.tar.bz2 lpeglabel-261e41117c2ec8d50b9aff1ecaaa701d2af5c211.zip |
When matching a predicate, the position of the farthest failure may not be the subject position where the predicate started to match
Diffstat (limited to 'testlabel.lua')
-rw-r--r-- | testlabel.lua | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/testlabel.lua b/testlabel.lua index 7461206..d60bb54 100644 --- a/testlabel.lua +++ b/testlabel.lua | |||
@@ -237,12 +237,39 @@ assert(r == nil and l == 'fail' and poserr == 1) | |||
237 | 237 | ||
238 | p = #(m.P"a" * m.T(1)) | 238 | p = #(m.P"a" * m.T(1)) |
239 | r, l, poserr = p:match("abc") | 239 | r, l, poserr = p:match("abc") |
240 | assert(r == nil and l == 'fail' and poserr == 1) | 240 | assert(r == nil and l == 'fail' and poserr == 2) |
241 | 241 | ||
242 | p = #(m.P"a" * m.P'a') | 242 | p = #(m.P"a" * m.P'a') |
243 | r, l, poserr = p:match("abc") | 243 | r, l, poserr = p:match("abc") |
244 | assert(r == nil and l == 'fail' and poserr == 1) | 244 | assert(r == nil and l == 'fail' and poserr == 2) |
245 | 245 | ||
246 | p = m.P'a' * #m.P('a') | ||
247 | r, l, poserr = p:match("abc") | ||
248 | assert(r == nil and l == 'fail' and poserr == 2) | ||
249 | |||
250 | p = m.P'a' * #m.P('ba') | ||
251 | r, l, poserr = p:match("abc") | ||
252 | assert(r == nil and l == 'fail' and poserr == 3) | ||
253 | |||
254 | p = m.P'a' * -m.P('b') | ||
255 | r, l, poserr = p:match("abc") | ||
256 | assert(r == nil and l == 'fail' and poserr == 2) | ||
257 | |||
258 | p = m.P'a' * -m.P('bc') | ||
259 | r, l, poserr = p:match("abc") | ||
260 | assert(r == nil and l == 'fail' and poserr == 4) | ||
261 | |||
262 | p = m.P'a' * #m.T('a') | ||
263 | r, l, poserr = p:match("abc") | ||
264 | assert(r == nil and l == 'fail' and poserr == 2) | ||
265 | |||
266 | p = m.P'a' * #(m.P'b' * m.T('a')) | ||
267 | r, l, poserr = p:match("abc") | ||
268 | assert(r == nil and l == 'fail' and poserr == 3) | ||
269 | |||
270 | p = m.P'a' * (m.P'b' * m.T('a')) | ||
271 | r, l, poserr = p:match("abc") | ||
272 | assert(r == nil and l == 'a' and poserr == 3) | ||
246 | 273 | ||
247 | p = -(-m.T(1)) | 274 | p = -(-m.T(1)) |
248 | r, l, poserr = p:match("bbc") | 275 | r, l, poserr = p:match("bbc") |
@@ -295,7 +322,7 @@ p = m.P{ | |||
295 | ["22"] = m.T(15) | 322 | ["22"] = m.T(15) |
296 | } | 323 | } |
297 | r, l, poserr = p:match("abc") | 324 | r, l, poserr = p:match("abc") |
298 | assert(r == nil and l == 'fail' and poserr == 1) | 325 | assert(r == nil and l == 'fail' and poserr == 2) |
299 | 326 | ||
300 | 327 | ||
301 | -- tests related to repetition | 328 | -- tests related to repetition |