diff options
Diffstat (limited to 'src/test/modules/test_regex')
-rw-r--r-- | src/test/modules/test_regex/expected/test_regex.out | 120 | ||||
-rw-r--r-- | src/test/modules/test_regex/expected/test_regex_utf8.out | 106 | ||||
-rw-r--r-- | src/test/modules/test_regex/sql/test_regex.sql | 32 | ||||
-rw-r--r-- | src/test/modules/test_regex/sql/test_regex_utf8.sql | 18 |
4 files changed, 276 insertions, 0 deletions
diff --git a/src/test/modules/test_regex/expected/test_regex.out b/src/test/modules/test_regex/expected/test_regex.out index 5a6cdf47c2f..6242d0baa9a 100644 --- a/src/test/modules/test_regex/expected/test_regex.out +++ b/src/test/modules/test_regex/expected/test_regex.out @@ -937,6 +937,34 @@ select * from test_regex('a[[=x=]]', 'az', '+Lb'); {0,REG_ULOCALE} (1 row) +-- expectMatch 9.9b &iL {a[[=Y=]]} ay ay +select * from test_regex('a[[=Y=]]', 'ay', 'iL'); + test_regex +----------------- + {0,REG_ULOCALE} + {ay} +(2 rows) + +select * from test_regex('a[[=Y=]]', 'ay', 'iLb'); + test_regex +----------------- + {0,REG_ULOCALE} + {ay} +(2 rows) + +-- expectNomatch 9.9c &L {a[[=Y=]]} ay +select * from test_regex('a[[=Y=]]', 'ay', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} +(1 row) + +select * from test_regex('a[[=Y=]]', 'ay', 'Lb'); + test_regex +----------------- + {0,REG_ULOCALE} +(1 row) + -- expectError 9.10 & {a[0-[=x=]]} ERANGE select * from test_regex('a[0-[=x=]]', '', ''); ERROR: invalid regular expression: invalid character range @@ -2932,6 +2960,34 @@ select * from test_regex('a[^b-d]', 'aC', 'iMb'); {0,REG_UUNPORT} (1 row) +-- expectMatch 19.6 &iM {a[B-Z]} aC aC +select * from test_regex('a[B-Z]', 'aC', 'iM'); + test_regex +----------------- + {0,REG_UUNPORT} + {aC} +(2 rows) + +select * from test_regex('a[B-Z]', 'aC', 'iMb'); + test_regex +----------------- + {0,REG_UUNPORT} + {aC} +(2 rows) + +-- expectNomatch 19.7 &iM {a[^B-Z]} aC +select * from test_regex('a[^B-Z]', 'aC', 'iM'); + test_regex +----------------- + {0,REG_UUNPORT} +(1 row) + +select * from test_regex('a[^B-Z]', 'aC', 'iMb'); + test_regex +----------------- + {0,REG_UUNPORT} +(1 row) + -- doing 20 "directors and embedded options" -- expectError 20.1 & ***? BADPAT select * from test_regex('***?', '', ''); @@ -3850,6 +3906,14 @@ select * from test_regex('^([^/]+?)(?:/([^/]+?))(?:/([^/]+?))?$', 'foo/bar/baz', {foo/bar/baz,foo,bar,baz} (2 rows) +-- expectMatch 24.14 PRT {^(.+?)(?:/(.+?))(?:/(.+?)\3)?$} {foo/bar/baz/quux} {foo/bar/baz/quux} {foo} {bar/baz/quux} {} +select * from test_regex('^(.+?)(?:/(.+?))(?:/(.+?)\3)?$', 'foo/bar/baz/quux', 'PRT'); + test_regex +---------------------------------------------- + {3,REG_UBACKREF,REG_UNONPOSIX,REG_USHORTEST} + {foo/bar/baz/quux,foo,bar/baz/quux,NULL} +(2 rows) + -- doing 25 "mixed quantifiers" -- # this is very incomplete as yet -- # should include | @@ -4926,3 +4990,59 @@ select * from test_regex('(\Y)+', 'foo', 'LNP'); {"",""} (2 rows) +-- and now, tests not from either Spencer or the Tcl project +-- These cases exercise additional code paths in pushfwd()/push()/combine() +select * from test_regex('a\Y(?=45)', 'a45', 'HLP'); + test_regex +----------------------------------------------- + {0,REG_ULOOKAROUND,REG_UNONPOSIX,REG_ULOCALE} + {a} +(2 rows) + +select * from test_regex('a(?=.)c', 'ac', 'HP'); + test_regex +----------------------------------- + {0,REG_ULOOKAROUND,REG_UNONPOSIX} + {ac} +(2 rows) + +select * from test_regex('a(?=.).*(?=3)3*', 'azz33', 'HP'); + test_regex +----------------------------------- + {0,REG_ULOOKAROUND,REG_UNONPOSIX} + {azz33} +(2 rows) + +select * from test_regex('a(?=\w)\w*(?=.).*', 'az3%', 'HLP'); + test_regex +----------------------------------------------- + {0,REG_ULOOKAROUND,REG_UNONPOSIX,REG_ULOCALE} + {az3%} +(2 rows) + +-- These exercise the bulk-arc-movement paths in moveins() and moveouts(); +-- you may need to make them longer if you change BULK_ARC_OP_USE_SORT() +select * from test_regex('ABCDEFGHIJKLMNOPQRSTUVWXYZ(?:\w|a|b|c|d|e|f|0|1|2|3|4|5|6|Q)', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ3', 'LP'); + test_regex +------------------------------- + {0,REG_UNONPOSIX,REG_ULOCALE} + {ABCDEFGHIJKLMNOPQRSTUVWXYZ3} +(2 rows) + +select * from test_regex('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(\Y\Y)+', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789Z', 'LP'); + test_regex +------------------------------------------- + {1,REG_UNONPOSIX,REG_ULOCALE} + {ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,""} +(2 rows) + +select * from test_regex('((x|xabcdefghijklmnopqrstuvwxyz0123456789)x*|[^y]z)$', + 'az', ''); + test_regex +-------------- + {2} + {az,az,NULL} +(2 rows) + diff --git a/src/test/modules/test_regex/expected/test_regex_utf8.out b/src/test/modules/test_regex/expected/test_regex_utf8.out index 112698ac618..3b56f36c071 100644 --- a/src/test/modules/test_regex/expected/test_regex_utf8.out +++ b/src/test/modules/test_regex/expected/test_regex_utf8.out @@ -98,3 +98,109 @@ select * from test_regex('[[:alnum:]]*[[:upper:]]*[\u1000-\u2000]*\u1237', {0,REG_UBBS,REG_UNONPOSIX,REG_UUNPORT,REG_ULOCALE} (1 row) +select * from test_regex('[[:alnum:]]*[[:upper:]]*[\u1000-\u2000]*\u1237', + E'\u1500\u1237', 'iELMP'); + test_regex +---------------------------------------------------- + {0,REG_UBBS,REG_UNONPOSIX,REG_UUNPORT,REG_ULOCALE} + {ᔀሷ} +(2 rows) + +-- systematically test char classes +select * from test_regex('[[:alnum:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {xᔀሷ} +(2 rows) + +select * from test_regex('[[:alpha:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {xᔀሷ} +(2 rows) + +select * from test_regex('[[:ascii:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {x} +(2 rows) + +select * from test_regex('[[:blank:]]+', E'x \t\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {" "} +(2 rows) + +select * from test_regex('[[:cntrl:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} +(1 row) + +select * from test_regex('[[:digit:]]+', E'x9\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {9} +(2 rows) + +select * from test_regex('[[:graph:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {xᔀሷ} +(2 rows) + +select * from test_regex('[[:lower:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {x} +(2 rows) + +select * from test_regex('[[:print:]]+', E'x\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {xᔀሷ} +(2 rows) + +select * from test_regex('[[:punct:]]+', E'x.\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {.} +(2 rows) + +select * from test_regex('[[:space:]]+', E'x \t\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {" "} +(2 rows) + +select * from test_regex('[[:upper:]]+', E'xX\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {X} +(2 rows) + +select * from test_regex('[[:xdigit:]]+', E'xa9\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {a9} +(2 rows) + +select * from test_regex('[[:word:]]+', E'x_\u1500\u1237', 'L'); + test_regex +----------------- + {0,REG_ULOCALE} + {x_ᔀሷ} +(2 rows) + diff --git a/src/test/modules/test_regex/sql/test_regex.sql b/src/test/modules/test_regex/sql/test_regex.sql index 3419564203a..389b8b61b3b 100644 --- a/src/test/modules/test_regex/sql/test_regex.sql +++ b/src/test/modules/test_regex/sql/test_regex.sql @@ -304,6 +304,12 @@ select * from test_regex('a[[=x=]]', 'ay', '+Lb'); -- expectNomatch 9.9 &+L {a[[=x=]]} az select * from test_regex('a[[=x=]]', 'az', '+L'); select * from test_regex('a[[=x=]]', 'az', '+Lb'); +-- expectMatch 9.9b &iL {a[[=Y=]]} ay ay +select * from test_regex('a[[=Y=]]', 'ay', 'iL'); +select * from test_regex('a[[=Y=]]', 'ay', 'iLb'); +-- expectNomatch 9.9c &L {a[[=Y=]]} ay +select * from test_regex('a[[=Y=]]', 'ay', 'L'); +select * from test_regex('a[[=Y=]]', 'ay', 'Lb'); -- expectError 9.10 & {a[0-[=x=]]} ERANGE select * from test_regex('a[0-[=x=]]', '', ''); select * from test_regex('a[0-[=x=]]', '', 'b'); @@ -864,6 +870,12 @@ select * from test_regex('a[b-d]', 'aC', 'iMb'); -- expectNomatch 19.5 &iM {a[^b-d]} aC select * from test_regex('a[^b-d]', 'aC', 'iM'); select * from test_regex('a[^b-d]', 'aC', 'iMb'); +-- expectMatch 19.6 &iM {a[B-Z]} aC aC +select * from test_regex('a[B-Z]', 'aC', 'iM'); +select * from test_regex('a[B-Z]', 'aC', 'iMb'); +-- expectNomatch 19.7 &iM {a[^B-Z]} aC +select * from test_regex('a[^B-Z]', 'aC', 'iM'); +select * from test_regex('a[^B-Z]', 'aC', 'iMb'); -- doing 20 "directors and embedded options" @@ -1171,6 +1183,8 @@ select * from test_regex('z*4', '123zzzz456', '-'); select * from test_regex('z*?4', '123zzzz456', 'PT'); -- expectMatch 24.13 PT {^([^/]+?)(?:/([^/]+?))(?:/([^/]+?))?$} {foo/bar/baz} {foo/bar/baz} {foo} {bar} {baz} select * from test_regex('^([^/]+?)(?:/([^/]+?))(?:/([^/]+?))?$', 'foo/bar/baz', 'PT'); +-- expectMatch 24.14 PRT {^(.+?)(?:/(.+?))(?:/(.+?)\3)?$} {foo/bar/baz/quux} {foo/bar/baz/quux} {foo} {bar/baz/quux} {} +select * from test_regex('^(.+?)(?:/(.+?))(?:/(.+?)\3)?$', 'foo/bar/baz/quux', 'PRT'); -- doing 25 "mixed quantifiers" -- # this is very incomplete as yet @@ -1741,3 +1755,21 @@ select * from test_regex(repeat('x*y*z*', 200), 'x', 'N'); -- regexp {(\Y)+} foo -- } 1 select * from test_regex('(\Y)+', 'foo', 'LNP'); + + +-- and now, tests not from either Spencer or the Tcl project + +-- These cases exercise additional code paths in pushfwd()/push()/combine() +select * from test_regex('a\Y(?=45)', 'a45', 'HLP'); +select * from test_regex('a(?=.)c', 'ac', 'HP'); +select * from test_regex('a(?=.).*(?=3)3*', 'azz33', 'HP'); +select * from test_regex('a(?=\w)\w*(?=.).*', 'az3%', 'HLP'); + +-- These exercise the bulk-arc-movement paths in moveins() and moveouts(); +-- you may need to make them longer if you change BULK_ARC_OP_USE_SORT() +select * from test_regex('ABCDEFGHIJKLMNOPQRSTUVWXYZ(?:\w|a|b|c|d|e|f|0|1|2|3|4|5|6|Q)', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ3', 'LP'); +select * from test_regex('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(\Y\Y)+', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789Z', 'LP'); +select * from test_regex('((x|xabcdefghijklmnopqrstuvwxyz0123456789)x*|[^y]z)$', + 'az', ''); diff --git a/src/test/modules/test_regex/sql/test_regex_utf8.sql b/src/test/modules/test_regex/sql/test_regex_utf8.sql index cfd9396194f..f23907162e4 100644 --- a/src/test/modules/test_regex/sql/test_regex_utf8.sql +++ b/src/test/modules/test_regex/sql/test_regex_utf8.sql @@ -58,3 +58,21 @@ select * from test_regex('[[:alnum:]]*[[:upper:]]*[\u1000-\u2000]*\u1237', E'\u1500\u1237', 'ELMP'); select * from test_regex('[[:alnum:]]*[[:upper:]]*[\u1000-\u2000]*\u1237', E'A\u1239', 'ELMP'); +select * from test_regex('[[:alnum:]]*[[:upper:]]*[\u1000-\u2000]*\u1237', + E'\u1500\u1237', 'iELMP'); + +-- systematically test char classes +select * from test_regex('[[:alnum:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:alpha:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:ascii:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:blank:]]+', E'x \t\u1500\u1237', 'L'); +select * from test_regex('[[:cntrl:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:digit:]]+', E'x9\u1500\u1237', 'L'); +select * from test_regex('[[:graph:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:lower:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:print:]]+', E'x\u1500\u1237', 'L'); +select * from test_regex('[[:punct:]]+', E'x.\u1500\u1237', 'L'); +select * from test_regex('[[:space:]]+', E'x \t\u1500\u1237', 'L'); +select * from test_regex('[[:upper:]]+', E'xX\u1500\u1237', 'L'); +select * from test_regex('[[:xdigit:]]+', E'xa9\u1500\u1237', 'L'); +select * from test_regex('[[:word:]]+', E'x_\u1500\u1237', 'L'); |