summaryrefslogtreecommitdiff
path: root/tests/extmod/ure_sub.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/extmod/ure_sub.py')
-rw-r--r--tests/extmod/ure_sub.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/extmod/ure_sub.py b/tests/extmod/ure_sub.py
new file mode 100644
index 000000000..4aeb8650a
--- /dev/null
+++ b/tests/extmod/ure_sub.py
@@ -0,0 +1,61 @@
+try:
+ import ure as re
+except ImportError:
+ try:
+ import re
+ except ImportError:
+ print('SKIP')
+ raise SystemExit
+
+try:
+ re.sub
+except AttributeError:
+ print('SKIP')
+ raise SystemExit
+
+
+def multiply(m):
+ return str(int(m.group(0)) * 2)
+
+print(re.sub("\d+", multiply, "10 20 30 40 50"))
+
+print(re.sub("\d+", lambda m: str(int(m.group(0)) // 2), "10 20 30 40 50"))
+
+def A():
+ return "A"
+print(re.sub('a', A(), 'aBCBABCDabcda.'))
+
+print(
+ re.sub(
+ r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
+ 'static PyObject*\npy_\\1(void){\n return;\n}\n',
+ '\n\ndef myfunc():\n\ndef myfunc1():\n\ndef myfunc2():'
+ )
+)
+
+print(
+ re.compile(
+ '(calzino) (blu|bianco|verde) e (scarpa) (blu|bianco|verde)'
+ ).sub(
+ r'\g<1> colore \2 con \g<3> colore \4? ...',
+ 'calzino blu e scarpa verde'
+ )
+)
+
+# no matches at all
+print(re.sub('a', 'b', 'c'))
+
+# with maximum substitution count specified
+print(re.sub('a', 'b', '1a2a3a', 2))
+
+# invalid group
+try:
+ re.sub('(a)', 'b\\2', 'a')
+except:
+ print('invalid group')
+
+# invalid group with very large number (to test overflow in uPy)
+try:
+ re.sub('(a)', 'b\\199999999999999999999999999999999999999', 'a')
+except:
+ print('invalid group')