aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Medeiros <sqmedeiros@gmail.com>2014-10-30 16:28:26 -0300
committerSergio Medeiros <sqmedeiros@gmail.com>2014-10-30 16:28:26 -0300
commit4ad8fea6fed78219990819daa18934c577d8bd8a (patch)
treec5dabace21c613d5909521cdf23aa0df151db393
parent8d30a0ff8a8584e225c03d878a9add439ea193a3 (diff)
downloadlpeglabel-4ad8fea6fed78219990819daa18934c577d8bd8a.tar.gz
lpeglabel-4ad8fea6fed78219990819daa18934c577d8bd8a.tar.bz2
lpeglabel-4ad8fea6fed78219990819daa18934c577d8bd8a.zip
Adding tests related to predicates and repetition
-rw-r--r--testlabel.lua87
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
7p = m.T(1) + m.P"a" 7p = m.T(1) + m.P"a"
8local r = p:match("abc") 8assert(p:match("abc") == nil)
9assert(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
12local g = m.P{ 11local 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}
18r = g:match("abc") 17assert(g:match("abc") == nil)
19assert(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
22p = m.Lc(m.T(2), m.P"a", 1, 3) 20p = m.Lc(m.T(2), m.P"a", 1, 3)
23r = p:match("abc") 21assert(p:match("abc") == nil)
24assert(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"
28p = m.Lc(p, m.P"a", 2) 25p = m.Lc(p, m.P"a", 2)
29r = p:match("abc") 26assert(p:match("abc") == 2)
30assert(r == 2)
31 27
32-- throws a label that is caught by labeled choice 28-- throws a label that is caught by labeled choice
33p = m.Lc(m.T(25), m.P"a", 25) 29p = m.Lc(m.T(25), m.P"a", 25)
34r = p:match("abc") 30assert(p:match("abc") == 2)
35assert(r == 2)
36assert(p:match("bola") == nil) 31assert(p:match("bola") == nil)
37 32
38-- labeled choice did not catch "fail" by default 33-- labeled choice does not catch "fail" by default
39p = m.Lc(m.P"b", m.P"a", 1) 34p = m.Lc(m.P"b", m.P"a", 1)
40r = p:match("abc") 35assert(p:match("abc") == nil)
41assert(r == nil, r)
42assert(p:match("bola") == 2) 36assert(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"
46p = m.Lc(m.P"b", m.P"a", 0) 40p = m.Lc(m.P"b", m.P"a", 0)
47r = p:match("abc") 41assert(p:match("abc") == 2)
48assert(r == 2, r)
49assert(p:match("bola") == 2) 42assert(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"
53p = m.Lc(m.P"a" * m.T(3), (m.P"a" + m.P"b"), 0, 3) 46p = m.Lc(m.P"a" * m.T(3), (m.P"a" + m.P"b"), 0, 3)
54assert(p:match("abc") == 2) 47assert(p:match("abc") == 2)
55assert(p:match("bac") == 2) 48assert(p:match("bac") == 2)
56assert(p:match("cab") == nil) 49assert(p:match("cab") == nil)
57 50
51-- tests related to predicates
52p = #m.T(1) + m.P"a"
53assert(p:match("abc") == nil)
54
55p = ##m.T(1) + m.P"a"
56assert(p:match("abc") == nil)
57
58p = #m.T(0) * m.P"a"
59assert(p:match("abc") == fail)
60
61p = #m.T(0) + m.P"a"
62assert(p:match("abc") == 2)
63
64p = -m.T(1) * m.P"a"
65assert(p:match("abc") == nil)
66
67p = -(-m.T(1)) * m.P"a"
68assert(p:match("abc") == nil)
69
70p = -m.T(0) * m.P"a"
71assert(p:match("abc") == 2)
72
73p = -m.T(0) + m.P"a"
74assert(p:match("abc") == 1)
75
76p = -(-m.T(0)) + m.P"a"
77assert(p:match("abc") == 2)
78
79p = m.Lc(-m.T(22), m.P"a", 22)
80assert(p:match("abc") == 2)
81
82p = m.Lc(-m.T(0), m.P"a", 0)
83assert(p:match("abc") == 1)
84
85p = m.Lc(#m.T(22), m.P"a", 22)
86assert(p:match("abc") == 2)
87
88p = m.Lc(#m.T(0), m.P"a", 0)
89assert(p:match("abc") == 2)
90
91-- tests related to repetition
92p = m.T(1)^0
93assert(p:match("ab") == nil)
94
95p = m.T(0)^0
96assert(p:match("ab") == 1)
97
98p = (m.P"a" + m.T(1))^0
99assert(p:match("aa") == nil)
100
101p = (m.P"a" + m.T(0))^0
102assert(p:match("aa") == 3)
103
104
58--[[ 105--[[
59S -> A /{1} 'a' 106S -> A /{1} 'a'
60A -> B 107A -> B
@@ -85,16 +132,13 @@ assert(g:match("a;a;") == 5)
85assert(g:match("a;a") == nil) 132assert(g:match("a;a") == nil)
86 133
87 134
88
89-- %1 /{1,3} %2 /{2} 'a' 135-- %1 /{1,3} %2 /{2} 'a'
90p = m.Lc(m.Lc(m.T(1), m.T(2), 1, 3), m.P"a", 2) 136p = m.Lc(m.Lc(m.T(1), m.T(2), 1, 3), m.P"a", 2)
91r = p:match("abc") 137assert(p:match("abc") == 2)
92assert(r == 2)
93assert(p:match("") == nil) 138assert(p:match("") == nil)
94 139
95p = m.Lc(m.T(1), m.Lc(m.T(2), m.P"a", 2), 1, 3) 140p = m.Lc(m.T(1), m.Lc(m.T(2), m.P"a", 2), 1, 3)
96r = p:match("abc") 141assert(p:match("abc") == 2)
97assert(r == 2)
98assert(p:match("") == nil) 142assert(p:match("") == nil)
99 143
100print("+") 144print("+")
@@ -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
134local s = "a" 177local s = "a"
135assert(g:match(s) == #s + 1) --1 178assert(g:match(s) == #s + 1) --1