aboutsummaryrefslogtreecommitdiff
path: root/testes/pm.lua
diff options
context:
space:
mode:
Diffstat (limited to 'testes/pm.lua')
-rw-r--r--testes/pm.lua56
1 files changed, 36 insertions, 20 deletions
diff --git a/testes/pm.lua b/testes/pm.lua
index 795596d4..44454dff 100644
--- a/testes/pm.lua
+++ b/testes/pm.lua
@@ -1,6 +1,9 @@
1-- $Id: testes/pm.lua $ 1-- $Id: testes/pm.lua $
2-- See Copyright Notice in file all.lua 2-- See Copyright Notice in file all.lua
3 3
4-- UTF-8 file
5
6
4print('testing pattern matching') 7print('testing pattern matching')
5 8
6local function checkerror (msg, f, ...) 9local function checkerror (msg, f, ...)
@@ -50,6 +53,19 @@ assert(f('aLo_ALO', '%a*') == 'aLo')
50 53
51assert(f(" \n\r*&\n\r xuxu \n\n", "%g%g%g+") == "xuxu") 54assert(f(" \n\r*&\n\r xuxu \n\n", "%g%g%g+") == "xuxu")
52 55
56
57-- Adapt a pattern to UTF-8
58local function PU (p)
59 -- break '?' into each individual byte of a character
60 p = string.gsub(p, "(" .. utf8.charpattern .. ")%?", function (c)
61 return string.gsub(c, ".", "%0?")
62 end)
63 -- change '.' to utf-8 character patterns
64 p = string.gsub(p, "%.", utf8.charpattern)
65 return p
66end
67
68
53assert(f('aaab', 'a*') == 'aaa'); 69assert(f('aaab', 'a*') == 'aaa');
54assert(f('aaa', '^.*$') == 'aaa'); 70assert(f('aaa', '^.*$') == 'aaa');
55assert(f('aaa', 'b*') == ''); 71assert(f('aaa', 'b*') == '');
@@ -73,16 +89,16 @@ assert(f('aaa', '^.-$') == 'aaa')
73assert(f('aabaaabaaabaaaba', 'b.*b') == 'baaabaaabaaab') 89assert(f('aabaaabaaabaaaba', 'b.*b') == 'baaabaaabaaab')
74assert(f('aabaaabaaabaaaba', 'b.-b') == 'baaab') 90assert(f('aabaaabaaabaaaba', 'b.-b') == 'baaab')
75assert(f('alo xo', '.o$') == 'xo') 91assert(f('alo xo', '.o$') == 'xo')
76assert(f(' \n isto é assim', '%S%S*') == 'isto') 92assert(f(' \n isto é assim', '%S%S*') == 'isto')
77assert(f(' \n isto é assim', '%S*$') == 'assim') 93assert(f(' \n isto é assim', '%S*$') == 'assim')
78assert(f(' \n isto é assim', '[a-z]*$') == 'assim') 94assert(f(' \n isto é assim', '[a-z]*$') == 'assim')
79assert(f('um caracter ? extra', '[^%sa-z]') == '?') 95assert(f('um caracter ? extra', '[^%sa-z]') == '?')
80assert(f('', 'a?') == '') 96assert(f('', 'a?') == '')
81assert(f('á', 'á?') == 'á') 97assert(f('á', PU'á?') == 'á')
82assert(f('ábl', 'á?b?l?') == 'ábl') 98assert(f('ábl', PU'á?b?l?') == 'ábl')
83assert(f(' ábl', 'á?b?l?') == '') 99assert(f(' ábl', PU'á?b?l?') == '')
84assert(f('aa', '^aa?a?a') == 'aa') 100assert(f('aa', '^aa?a?a') == 'aa')
85assert(f(']]]áb', '[^]]') == 'á') 101assert(f(']]]áb', '[^]]+') == 'áb')
86assert(f("0alo alo", "%x*") == "0a") 102assert(f("0alo alo", "%x*") == "0a")
87assert(f("alo alo", "%C+") == "alo alo") 103assert(f("alo alo", "%C+") == "alo alo")
88print('+') 104print('+')
@@ -136,28 +152,28 @@ assert(string.match("alo xyzK", "(%w+)K") == "xyz")
136assert(string.match("254 K", "(%d*)K") == "") 152assert(string.match("254 K", "(%d*)K") == "")
137assert(string.match("alo ", "(%w*)$") == "") 153assert(string.match("alo ", "(%w*)$") == "")
138assert(not string.match("alo ", "(%w+)$")) 154assert(not string.match("alo ", "(%w+)$"))
139assert(string.find("(álo)", "%(á") == 1) 155assert(string.find("(álo)", "%(á") == 1)
140local a, b, c, d, e = string.match("âlo alo", "^(((.).).* (%w*))$") 156local a, b, c, d, e = string.match("âlo alo", PU"^(((.).). (%w*))$")
141assert(a == 'âlo alo' and b == 'âl' and c == 'â' and d == 'alo' and e == nil) 157assert(a == 'âlo alo' and b == 'âl' and c == 'â' and d == 'alo' and e == nil)
142a, b, c, d = string.match('0123456789', '(.+(.?)())') 158a, b, c, d = string.match('0123456789', '(.+(.?)())')
143assert(a == '0123456789' and b == '' and c == 11 and d == nil) 159assert(a == '0123456789' and b == '' and c == 11 and d == nil)
144print('+') 160print('+')
145 161
146assert(string.gsub('ülo ülo', 'ü', 'x') == 'xlo xlo') 162assert(string.gsub('ülo ülo', 'ü', 'x') == 'xlo xlo')
147assert(string.gsub('alo úlo ', ' +$', '') == 'alo úlo') -- trim 163assert(string.gsub('alo úlo ', ' +$', '') == 'alo úlo') -- trim
148assert(string.gsub(' alo alo ', '^%s*(.-)%s*$', '%1') == 'alo alo') -- double trim 164assert(string.gsub(' alo alo ', '^%s*(.-)%s*$', '%1') == 'alo alo') -- double trim
149assert(string.gsub('alo alo \n 123\n ', '%s+', ' ') == 'alo alo 123 ') 165assert(string.gsub('alo alo \n 123\n ', '%s+', ' ') == 'alo alo 123 ')
150local t = "abç d" 166local t = "abç d"
151a, b = string.gsub(t, '(.)', '%1@') 167a, b = string.gsub(t, PU'(.)', '%1@')
152assert('@'..a == string.gsub(t, '', '@') and b == 5) 168assert(a == "a@b@ç@ @d@" and b == 5)
153a, b = string.gsub('abçd', '(.)', '%0@', 2) 169a, b = string.gsub('abçd', PU'(.)', '%0@', 2)
154assert(a == 'a@b@çd' and b == 2) 170assert(a == 'a@b@çd' and b == 2)
155assert(string.gsub('alo alo', '()[al]', '%1') == '12o 56o') 171assert(string.gsub('alo alo', '()[al]', '%1') == '12o 56o')
156assert(string.gsub("abc=xyz", "(%w*)(%p)(%w+)", "%3%2%1-%0") == 172assert(string.gsub("abc=xyz", "(%w*)(%p)(%w+)", "%3%2%1-%0") ==
157 "xyz=abc-abc=xyz") 173 "xyz=abc-abc=xyz")
158assert(string.gsub("abc", "%w", "%1%0") == "aabbcc") 174assert(string.gsub("abc", "%w", "%1%0") == "aabbcc")
159assert(string.gsub("abc", "%w+", "%0%1") == "abcabc") 175assert(string.gsub("abc", "%w+", "%0%1") == "abcabc")
160assert(string.gsub('áéí', '$', '\0óú') == 'áéí\0óú') 176assert(string.gsub('áéí', '$', '\0óú') == 'áéí\0óú')
161assert(string.gsub('', '^', 'r') == 'r') 177assert(string.gsub('', '^', 'r') == 'r')
162assert(string.gsub('', '$', 'r') == 'r') 178assert(string.gsub('', '$', 'r') == 'r')
163print('+') 179print('+')
@@ -188,8 +204,8 @@ do
188end 204end
189 205
190function f(a,b) return string.gsub(a,'.',b) end 206function f(a,b) return string.gsub(a,'.',b) end
191assert(string.gsub("trocar tudo em |teste|b| é |beleza|al|", "|([^|]*)|([^|]*)|", f) == 207assert(string.gsub("trocar tudo em |teste|b| é |beleza|al|", "|([^|]*)|([^|]*)|", f) ==
192 "trocar tudo em bbbbb é alalalalalal") 208 "trocar tudo em bbbbb é alalalalalal")
193 209
194local function dostring (s) return load(s, "")() or "" end 210local function dostring (s) return load(s, "")() or "" end
195assert(string.gsub("alo $a='x'$ novamente $return a$", 211assert(string.gsub("alo $a='x'$ novamente $return a$",