1package regexp2
2
3import (
4	"fmt"
5	"testing"
6)
7
8// Permission is hereby granted, free of charge, to any person obtaining
9// a copy of this software and associated documentation files (the
10// "Software"), to deal in the Software without restriction, including
11// without limitation the rights to use, copy, modify, merge, publish,
12// distribute, sublicense, and/or sell copies of the Software, and to
13// permit persons to whom the Software is furnished to do so, subject to
14// the following conditions:
15//
16// The above copyright notice and this permission notice shall be
17// included in all copies or substantial portions of the Software.
18//
19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
27// https://github.com/mono/mono/blob/master/mcs/class/System/Test/System.Text.RegularExpressions/PerlTrials.cs
28// ported from perl-5.6.1/t/op/re_tests
29
30func TestMono_Basics(t *testing.T) {
31	runRegexTrial(t, `abc`, 0, "abc", "Pass. Group[0]=(0,3)")
32	runRegexTrial(t, `abc`, 0, "xbc", "Fail.")
33	runRegexTrial(t, `abc`, 0, "axc", "Fail.")
34	runRegexTrial(t, `abc`, 0, "abx", "Fail.")
35	runRegexTrial(t, `abc`, 0, "xabcy", "Pass. Group[0]=(1,3)")
36	runRegexTrial(t, `abc`, 0, "ababc", "Pass. Group[0]=(2,3)")
37	runRegexTrial(t, `ab*c`, 0, "abc", "Pass. Group[0]=(0,3)")
38	runRegexTrial(t, `ab*bc`, 0, "abc", "Pass. Group[0]=(0,3)")
39	runRegexTrial(t, `ab*bc`, 0, "abbc", "Pass. Group[0]=(0,4)")
40	runRegexTrial(t, `ab*bc`, 0, "abbbbc", "Pass. Group[0]=(0,6)")
41	runRegexTrial(t, `.{1}`, 0, "abbbbc", "Pass. Group[0]=(0,1)")
42	runRegexTrial(t, `.{3,4}`, 0, "abbbbc", "Pass. Group[0]=(0,4)")
43	runRegexTrial(t, `ab{0,}bc`, 0, "abbbbc", "Pass. Group[0]=(0,6)")
44	runRegexTrial(t, `ab+bc`, 0, "abbc", "Pass. Group[0]=(0,4)")
45	runRegexTrial(t, `ab+bc`, 0, "abc", "Fail.")
46	runRegexTrial(t, `ab+bc`, 0, "abq", "Fail.")
47	runRegexTrial(t, `ab{1,}bc`, 0, "abq", "Fail.")
48	runRegexTrial(t, `ab+bc`, 0, "abbbbc", "Pass. Group[0]=(0,6)")
49	runRegexTrial(t, `ab{1,}bc`, 0, "abbbbc", "Pass. Group[0]=(0,6)")
50	runRegexTrial(t, `ab{1,3}bc`, 0, "abbbbc", "Pass. Group[0]=(0,6)")
51	runRegexTrial(t, `ab{3,4}bc`, 0, "abbbbc", "Pass. Group[0]=(0,6)")
52	runRegexTrial(t, `ab{4,5}bc`, 0, "abbbbc", "Fail.")
53	runRegexTrial(t, `ab?bc`, 0, "abbc", "Pass. Group[0]=(0,4)")
54	runRegexTrial(t, `ab?bc`, 0, "abc", "Pass. Group[0]=(0,3)")
55	runRegexTrial(t, `ab{0,1}bc`, 0, "abc", "Pass. Group[0]=(0,3)")
56	runRegexTrial(t, `ab?bc`, 0, "abbbbc", "Fail.")
57	runRegexTrial(t, `ab?c`, 0, "abc", "Pass. Group[0]=(0,3)")
58	runRegexTrial(t, `ab{0,1}c`, 0, "abc", "Pass. Group[0]=(0,3)")
59	runRegexTrial(t, `^abc$`, 0, "abc", "Pass. Group[0]=(0,3)")
60	runRegexTrial(t, `^abc$`, 0, "abcc", "Fail.")
61	runRegexTrial(t, `^abc`, 0, "abcc", "Pass. Group[0]=(0,3)")
62	runRegexTrial(t, `^abc$`, 0, "aabc", "Fail.")
63	runRegexTrial(t, `abc$`, 0, "aabc", "Pass. Group[0]=(1,3)")
64	runRegexTrial(t, `abc$`, 0, "aabcd", "Fail.")
65	runRegexTrial(t, `^`, 0, "abc", "Pass. Group[0]=(0,0)")
66	runRegexTrial(t, `$`, 0, "abc", "Pass. Group[0]=(3,0)")
67	runRegexTrial(t, `a.c`, 0, "abc", "Pass. Group[0]=(0,3)")
68	runRegexTrial(t, `a.c`, 0, "axc", "Pass. Group[0]=(0,3)")
69	runRegexTrial(t, `a.*c`, 0, "axyzc", "Pass. Group[0]=(0,5)")
70	runRegexTrial(t, `a.*c`, 0, "axyzd", "Fail.")
71	runRegexTrial(t, `a[bc]d`, 0, "abc", "Fail.")
72	runRegexTrial(t, `a[bc]d`, 0, "abd", "Pass. Group[0]=(0,3)")
73	runRegexTrial(t, `a[b-d]e`, 0, "abd", "Fail.")
74	runRegexTrial(t, `a[b-d]e`, 0, "ace", "Pass. Group[0]=(0,3)")
75	runRegexTrial(t, `a[b-d]`, 0, "aac", "Pass. Group[0]=(1,2)")
76	runRegexTrial(t, `a[-b]`, 0, "a-", "Pass. Group[0]=(0,2)")
77	runRegexTrial(t, `a[b-]`, 0, "a-", "Pass. Group[0]=(0,2)")
78	runRegexTrial(t, `a[b-a]`, 0, "-", "Error.")
79	runRegexTrial(t, `a[]b`, 0, "-", "Error.")
80	runRegexTrial(t, `a[`, 0, "-", "Error.")
81	runRegexTrial(t, `a]`, 0, "a]", "Pass. Group[0]=(0,2)")
82	runRegexTrial(t, `a[]]b`, 0, "a]b", "Pass. Group[0]=(0,3)")
83	runRegexTrial(t, `a[^bc]d`, 0, "aed", "Pass. Group[0]=(0,3)")
84	runRegexTrial(t, `a[^bc]d`, 0, "abd", "Fail.")
85	runRegexTrial(t, `a[^-b]c`, 0, "adc", "Pass. Group[0]=(0,3)")
86	runRegexTrial(t, `a[^-b]c`, 0, "a-c", "Fail.")
87	runRegexTrial(t, `a[^]b]c`, 0, "a]c", "Fail.")
88	runRegexTrial(t, `a[^]b]c`, 0, "adc", "Pass. Group[0]=(0,3)")
89	runRegexTrial(t, `\ba\b`, 0, "a-", "Pass. Group[0]=(0,1)")
90	runRegexTrial(t, `\ba\b`, 0, "-a", "Pass. Group[0]=(1,1)")
91	runRegexTrial(t, `\ba\b`, 0, "-a-", "Pass. Group[0]=(1,1)")
92	runRegexTrial(t, `\by\b`, 0, "xy", "Fail.")
93	runRegexTrial(t, `\by\b`, 0, "yz", "Fail.")
94	runRegexTrial(t, `\by\b`, 0, "xyz", "Fail.")
95	runRegexTrial(t, `\Ba\B`, 0, "a-", "Fail.")
96	runRegexTrial(t, `\Ba\B`, 0, "-a", "Fail.")
97	runRegexTrial(t, `\Ba\B`, 0, "-a-", "Fail.")
98	runRegexTrial(t, `\By\b`, 0, "xy", "Pass. Group[0]=(1,1)")
99	runRegexTrial(t, `\by\B`, 0, "yz", "Pass. Group[0]=(0,1)")
100	runRegexTrial(t, `\By\B`, 0, "xyz", "Pass. Group[0]=(1,1)")
101	runRegexTrial(t, `\w`, 0, "a", "Pass. Group[0]=(0,1)")
102	runRegexTrial(t, `\w`, 0, "-", "Fail.")
103	runRegexTrial(t, `\W`, 0, "a", "Fail.")
104	runRegexTrial(t, `\W`, 0, "-", "Pass. Group[0]=(0,1)")
105	runRegexTrial(t, `a\sb`, 0, "a b", "Pass. Group[0]=(0,3)")
106	runRegexTrial(t, `a\sb`, 0, "a-b", "Fail.")
107	runRegexTrial(t, `a\Sb`, 0, "a b", "Fail.")
108	runRegexTrial(t, `a\Sb`, 0, "a-b", "Pass. Group[0]=(0,3)")
109	runRegexTrial(t, `\d`, 0, "1", "Pass. Group[0]=(0,1)")
110	runRegexTrial(t, `\d`, 0, "-", "Fail.")
111	runRegexTrial(t, `\D`, 0, "1", "Fail.")
112	runRegexTrial(t, `\D`, 0, "-", "Pass. Group[0]=(0,1)")
113	runRegexTrial(t, `[\w]`, 0, "a", "Pass. Group[0]=(0,1)")
114	runRegexTrial(t, `[\w]`, 0, "-", "Fail.")
115	runRegexTrial(t, `[\W]`, 0, "a", "Fail.")
116	runRegexTrial(t, `[\W]`, 0, "-", "Pass. Group[0]=(0,1)")
117	runRegexTrial(t, `a[\s]b`, 0, "a b", "Pass. Group[0]=(0,3)")
118	runRegexTrial(t, `a[\s]b`, 0, "a-b", "Fail.")
119	runRegexTrial(t, `a[\S]b`, 0, "a b", "Fail.")
120	runRegexTrial(t, `a[\S]b`, 0, "a-b", "Pass. Group[0]=(0,3)")
121	runRegexTrial(t, `[\d]`, 0, "1", "Pass. Group[0]=(0,1)")
122	runRegexTrial(t, `[\d]`, 0, "-", "Fail.")
123	runRegexTrial(t, `[\D]`, 0, "1", "Fail.")
124	runRegexTrial(t, `[\D]`, 0, "-", "Pass. Group[0]=(0,1)")
125	runRegexTrial(t, `ab|cd`, 0, "abc", "Pass. Group[0]=(0,2)")
126	runRegexTrial(t, `ab|cd`, 0, "abcd", "Pass. Group[0]=(0,2)")
127	runRegexTrial(t, `()ef`, 0, "def", "Pass. Group[0]=(1,2) Group[1]=(1,0)")
128	runRegexTrial(t, `*a`, 0, "-", "Error.")
129	runRegexTrial(t, `(*)b`, 0, "-", "Error.")
130	runRegexTrial(t, `$b`, 0, "b", "Fail.")
131	runRegexTrial(t, `a\`, 0, "-", "Error.")
132	runRegexTrial(t, `a\(b`, 0, "a(b", "Pass. Group[0]=(0,3)")
133	runRegexTrial(t, `a\(*b`, 0, "ab", "Pass. Group[0]=(0,2)")
134	runRegexTrial(t, `a\(*b`, 0, "a((b", "Pass. Group[0]=(0,4)")
135	runRegexTrial(t, `a\\b`, 0, "a\\b", "Pass. Group[0]=(0,3)")
136	runRegexTrial(t, `abc)`, 0, "-", "Error.")
137	runRegexTrial(t, `(abc`, 0, "-", "Error.")
138	runRegexTrial(t, `((a))`, 0, "abc", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1)")
139	runRegexTrial(t, `(a)b(c)`, 0, "abc", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(2,1)")
140	runRegexTrial(t, `a+b+c`, 0, "aabbabc", "Pass. Group[0]=(4,3)")
141	runRegexTrial(t, `a{1,}b{1,}c`, 0, "aabbabc", "Pass. Group[0]=(4,3)")
142	runRegexTrial(t, `a**`, 0, "-", "Error.")
143	runRegexTrial(t, `a.+?c`, 0, "abcabc", "Pass. Group[0]=(0,3)")
144	runRegexTrial(t, `(a+|b)*`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
145	runRegexTrial(t, `(a+|b){0,}`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
146	runRegexTrial(t, `(a+|b)+`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
147	runRegexTrial(t, `(a+|b){1,}`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
148	runRegexTrial(t, `(a+|b)?`, 0, "ab", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
149	runRegexTrial(t, `(a+|b){0,1}`, 0, "ab", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
150	runRegexTrial(t, `)(`, 0, "-", "Error.")
151	runRegexTrial(t, `[^ab]*`, 0, "cde", "Pass. Group[0]=(0,3)")
152	runRegexTrial(t, `abc`, 0, "", "Fail.")
153	runRegexTrial(t, `a*`, 0, "", "Pass. Group[0]=(0,0)")
154	runRegexTrial(t, `([abc])*d`, 0, "abbbcd", "Pass. Group[0]=(0,6) Group[1]=(0,1)(1,1)(2,1)(3,1)(4,1)")
155	runRegexTrial(t, `([abc])*bcd`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]=(0,1)")
156	runRegexTrial(t, `a|b|c|d|e`, 0, "e", "Pass. Group[0]=(0,1)")
157	runRegexTrial(t, `(a|b|c|d|e)f`, 0, "ef", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
158	runRegexTrial(t, `abcd*efg`, 0, "abcdefg", "Pass. Group[0]=(0,7)")
159	runRegexTrial(t, `ab*`, 0, "xabyabbbz", "Pass. Group[0]=(1,2)")
160	runRegexTrial(t, `ab*`, 0, "xayabbbz", "Pass. Group[0]=(1,1)")
161	runRegexTrial(t, `(ab|cd)e`, 0, "abcde", "Pass. Group[0]=(2,3) Group[1]=(2,2)")
162	runRegexTrial(t, `[abhgefdc]ij`, 0, "hij", "Pass. Group[0]=(0,3)")
163	runRegexTrial(t, `^(ab|cd)e`, 0, "abcde", "Fail.")
164	runRegexTrial(t, `(abc|)ef`, 0, "abcdef", "Pass. Group[0]=(4,2) Group[1]=(4,0)")
165	runRegexTrial(t, `(a|b)c*d`, 0, "abcd", "Pass. Group[0]=(1,3) Group[1]=(1,1)")
166	runRegexTrial(t, `(ab|ab*)bc`, 0, "abc", "Pass. Group[0]=(0,3) Group[1]=(0,1)")
167	runRegexTrial(t, `a([bc]*)c*`, 0, "abc", "Pass. Group[0]=(0,3) Group[1]=(1,2)")
168	runRegexTrial(t, `a([bc]*)(c*d)`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,2) Group[2]=(3,1)")
169	runRegexTrial(t, `a([bc]+)(c*d)`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,2) Group[2]=(3,1)")
170	runRegexTrial(t, `a([bc]*)(c+d)`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,1) Group[2]=(2,2)")
171	runRegexTrial(t, `a[bcd]*dcdcde`, 0, "adcdcde", "Pass. Group[0]=(0,7)")
172	runRegexTrial(t, `a[bcd]+dcdcde`, 0, "adcdcde", "Fail.")
173	runRegexTrial(t, `(ab|a)b*c`, 0, "abc", "Pass. Group[0]=(0,3) Group[1]=(0,2)")
174	runRegexTrial(t, `((a)(b)c)(d)`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]=(0,3) Group[2]=(0,1) Group[3]=(1,1) Group[4]=(3,1)")
175	runRegexTrial(t, `[a-zA-Z_][a-zA-Z0-9_]*`, 0, "alpha", "Pass. Group[0]=(0,5)")
176	runRegexTrial(t, `^a(bc+|b[eh])g|.h$`, 0, "abh", "Pass. Group[0]=(1,2) Group[1]=")
177	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, 0, "effgz", "Pass. Group[0]=(0,5) Group[1]=(0,5) Group[2]=")
178	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, 0, "ij", "Pass. Group[0]=(0,2) Group[1]=(0,2) Group[2]=(1,1)")
179	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, 0, "effg", "Fail.")
180	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, 0, "bcdd", "Fail.")
181	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, 0, "reffgz", "Pass. Group[0]=(1,5) Group[1]=(1,5) Group[2]=")
182	runRegexTrial(t, `((((((((((a))))))))))`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
183	runRegexTrial(t, `((((((((((a))))))))))\10`, 0, "aa", "Pass. Group[0]=(0,2) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
184	runRegexTrial(t, `((((((((((a))))))))))!`, 0, "aa", "Fail.")
185	runRegexTrial(t, `((((((((((a))))))))))!`, 0, "a!", "Pass. Group[0]=(0,2) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
186	runRegexTrial(t, `(((((((((a)))))))))`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1)")
187	runRegexTrial(t, `multiple words of text`, 0, "uh-uh", "Fail.")
188	runRegexTrial(t, `multiple words`, 0, "multiple words, yeah", "Pass. Group[0]=(0,14)")
189	runRegexTrial(t, `(.*)c(.*)`, 0, "abcde", "Pass. Group[0]=(0,5) Group[1]=(0,2) Group[2]=(3,2)")
190	runRegexTrial(t, `\((.*), (.*)\)`, 0, "(a, b)", "Pass. Group[0]=(0,6) Group[1]=(1,1) Group[2]=(4,1)")
191	runRegexTrial(t, `[k]`, 0, "ab", "Fail.")
192	runRegexTrial(t, `abcd`, 0, "abcd", "Pass. Group[0]=(0,4)")
193	runRegexTrial(t, `a(bc)d`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,2)")
194	runRegexTrial(t, `a[-]?c`, 0, "ac", "Pass. Group[0]=(0,2)")
195	runRegexTrial(t, `(abc)\1`, 0, "abcabc", "Pass. Group[0]=(0,6) Group[1]=(0,3)")
196	runRegexTrial(t, `([a-c]*)\1`, 0, "abcabc", "Pass. Group[0]=(0,6) Group[1]=(0,3)")
197	runRegexTrial(t, `\1`, 0, "-", "Error.")
198	runRegexTrial(t, `\2`, 0, "-", "Error.")
199	runRegexTrial(t, `(a)|\1`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
200	runRegexTrial(t, `(a)|\1`, 0, "x", "Fail.")
201	runRegexTrial(t, `(a)|\2`, 0, "-", "Error.")
202	runRegexTrial(t, `(([a-c])b*?\2)*`, 0, "ababbbcbc", "Pass. Group[0]=(0,5) Group[1]=(0,3)(3,2) Group[2]=(0,1)(3,1)")
203	runRegexTrial(t, `(([a-c])b*?\2){3}`, 0, "ababbbcbc", "Pass. Group[0]=(0,9) Group[1]=(0,3)(3,3)(6,3) Group[2]=(0,1)(3,1)(6,1)")
204	runRegexTrial(t, `((\3|b)\2(a)x)+`, 0, "aaxabxbaxbbx", "Fail.")
205	runRegexTrial(t, `((\3|b)\2(a)x)+`, 0, "aaaxabaxbaaxbbax", "Pass. Group[0]=(12,4) Group[1]=(12,4) Group[2]=(12,1) Group[3]=(14,1)")
206	runRegexTrial(t, `((\3|b)\2(a)){2,}`, 0, "bbaababbabaaaaabbaaaabba", "Pass. Group[0]=(15,9) Group[1]=(15,3)(18,3)(21,3) Group[2]=(15,1)(18,1)(21,1) Group[3]=(17,1)(20,1)(23,1)")
207	runRegexTrial(t, `abc`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
208	runRegexTrial(t, `abc`, IgnoreCase, "XBC", "Fail.")
209	runRegexTrial(t, `abc`, IgnoreCase, "AXC", "Fail.")
210	runRegexTrial(t, `abc`, IgnoreCase, "ABX", "Fail.")
211	runRegexTrial(t, `abc`, IgnoreCase, "XABCY", "Pass. Group[0]=(1,3)")
212	runRegexTrial(t, `abc`, IgnoreCase, "ABABC", "Pass. Group[0]=(2,3)")
213	runRegexTrial(t, `ab*c`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
214	runRegexTrial(t, `ab*bc`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
215	runRegexTrial(t, `ab*bc`, IgnoreCase, "ABBC", "Pass. Group[0]=(0,4)")
216	runRegexTrial(t, `ab*?bc`, IgnoreCase, "ABBBBC", "Pass. Group[0]=(0,6)")
217	runRegexTrial(t, `ab{0,}?bc`, IgnoreCase, "ABBBBC", "Pass. Group[0]=(0,6)")
218	runRegexTrial(t, `ab+?bc`, IgnoreCase, "ABBC", "Pass. Group[0]=(0,4)")
219	runRegexTrial(t, `ab+bc`, IgnoreCase, "ABC", "Fail.")
220	runRegexTrial(t, `ab+bc`, IgnoreCase, "ABQ", "Fail.")
221	runRegexTrial(t, `ab{1,}bc`, IgnoreCase, "ABQ", "Fail.")
222	runRegexTrial(t, `ab+bc`, IgnoreCase, "ABBBBC", "Pass. Group[0]=(0,6)")
223	runRegexTrial(t, `ab{1,}?bc`, IgnoreCase, "ABBBBC", "Pass. Group[0]=(0,6)")
224	runRegexTrial(t, `ab{1,3}?bc`, IgnoreCase, "ABBBBC", "Pass. Group[0]=(0,6)")
225	runRegexTrial(t, `ab{3,4}?bc`, IgnoreCase, "ABBBBC", "Pass. Group[0]=(0,6)")
226	runRegexTrial(t, `ab{4,5}?bc`, IgnoreCase, "ABBBBC", "Fail.")
227	runRegexTrial(t, `ab??bc`, IgnoreCase, "ABBC", "Pass. Group[0]=(0,4)")
228	runRegexTrial(t, `ab??bc`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
229	runRegexTrial(t, `ab{0,1}?bc`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
230	runRegexTrial(t, `ab??bc`, IgnoreCase, "ABBBBC", "Fail.")
231	runRegexTrial(t, `ab??c`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
232	runRegexTrial(t, `ab{0,1}?c`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
233	runRegexTrial(t, `^abc$`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
234	runRegexTrial(t, `^abc$`, IgnoreCase, "ABCC", "Fail.")
235	runRegexTrial(t, `^abc`, IgnoreCase, "ABCC", "Pass. Group[0]=(0,3)")
236	runRegexTrial(t, `^abc$`, IgnoreCase, "AABC", "Fail.")
237	runRegexTrial(t, `abc$`, IgnoreCase, "AABC", "Pass. Group[0]=(1,3)")
238	runRegexTrial(t, `^`, IgnoreCase, "ABC", "Pass. Group[0]=(0,0)")
239	runRegexTrial(t, `$`, IgnoreCase, "ABC", "Pass. Group[0]=(3,0)")
240	runRegexTrial(t, `a.c`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3)")
241	runRegexTrial(t, `a.c`, IgnoreCase, "AXC", "Pass. Group[0]=(0,3)")
242	runRegexTrial(t, `a.*?c`, IgnoreCase, "AXYZC", "Pass. Group[0]=(0,5)")
243	runRegexTrial(t, `a.*c`, IgnoreCase, "AXYZD", "Fail.")
244	runRegexTrial(t, `a[bc]d`, IgnoreCase, "ABC", "Fail.")
245	runRegexTrial(t, `a[bc]d`, IgnoreCase, "ABD", "Pass. Group[0]=(0,3)")
246	runRegexTrial(t, `a[b-d]e`, IgnoreCase, "ABD", "Fail.")
247	runRegexTrial(t, `a[b-d]e`, IgnoreCase, "ACE", "Pass. Group[0]=(0,3)")
248	runRegexTrial(t, `a[b-d]`, IgnoreCase, "AAC", "Pass. Group[0]=(1,2)")
249	runRegexTrial(t, `a[-b]`, IgnoreCase, "A-", "Pass. Group[0]=(0,2)")
250	runRegexTrial(t, `a[b-]`, IgnoreCase, "A-", "Pass. Group[0]=(0,2)")
251	runRegexTrial(t, `a[b-a]`, IgnoreCase, "-", "Error.")
252	runRegexTrial(t, `a[]b`, IgnoreCase, "-", "Error.")
253	runRegexTrial(t, `a[`, IgnoreCase, "-", "Error.")
254	runRegexTrial(t, `a]`, IgnoreCase, "A]", "Pass. Group[0]=(0,2)")
255	runRegexTrial(t, `a[]]b`, IgnoreCase, "A]B", "Pass. Group[0]=(0,3)")
256	runRegexTrial(t, `a[^bc]d`, IgnoreCase, "AED", "Pass. Group[0]=(0,3)")
257	runRegexTrial(t, `a[^bc]d`, IgnoreCase, "ABD", "Fail.")
258	runRegexTrial(t, `a[^-b]c`, IgnoreCase, "ADC", "Pass. Group[0]=(0,3)")
259	runRegexTrial(t, `a[^-b]c`, IgnoreCase, "A-C", "Fail.")
260	runRegexTrial(t, `a[^]b]c`, IgnoreCase, "A]C", "Fail.")
261	runRegexTrial(t, `a[^]b]c`, IgnoreCase, "ADC", "Pass. Group[0]=(0,3)")
262	runRegexTrial(t, `ab|cd`, IgnoreCase, "ABC", "Pass. Group[0]=(0,2)")
263	runRegexTrial(t, `ab|cd`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,2)")
264	runRegexTrial(t, `()ef`, IgnoreCase, "DEF", "Pass. Group[0]=(1,2) Group[1]=(1,0)")
265	runRegexTrial(t, `*a`, IgnoreCase, "-", "Error.")
266	runRegexTrial(t, `(*)b`, IgnoreCase, "-", "Error.")
267	runRegexTrial(t, `$b`, IgnoreCase, "B", "Fail.")
268	runRegexTrial(t, `a\`, IgnoreCase, "-", "Error.")
269	runRegexTrial(t, `a\(b`, IgnoreCase, "A(B", "Pass. Group[0]=(0,3)")
270	runRegexTrial(t, `a\(*b`, IgnoreCase, "AB", "Pass. Group[0]=(0,2)")
271	runRegexTrial(t, `a\(*b`, IgnoreCase, "A((B", "Pass. Group[0]=(0,4)")
272	runRegexTrial(t, `a\\b`, IgnoreCase, "A\\B", "Pass. Group[0]=(0,3)")
273	runRegexTrial(t, `abc)`, IgnoreCase, "-", "Error.")
274	runRegexTrial(t, `(abc`, IgnoreCase, "-", "Error.")
275	runRegexTrial(t, `((a))`, IgnoreCase, "ABC", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1)")
276	runRegexTrial(t, `(a)b(c)`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(2,1)")
277	runRegexTrial(t, `a+b+c`, IgnoreCase, "AABBABC", "Pass. Group[0]=(4,3)")
278	runRegexTrial(t, `a{1,}b{1,}c`, IgnoreCase, "AABBABC", "Pass. Group[0]=(4,3)")
279	runRegexTrial(t, `a**`, IgnoreCase, "-", "Error.")
280	runRegexTrial(t, `a.+?c`, IgnoreCase, "ABCABC", "Pass. Group[0]=(0,3)")
281	runRegexTrial(t, `a.*?c`, IgnoreCase, "ABCABC", "Pass. Group[0]=(0,3)")
282	runRegexTrial(t, `a.{0,5}?c`, IgnoreCase, "ABCABC", "Pass. Group[0]=(0,3)")
283	runRegexTrial(t, `(a+|b)*`, IgnoreCase, "AB", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
284	runRegexTrial(t, `(a+|b){0,}`, IgnoreCase, "AB", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
285	runRegexTrial(t, `(a+|b)+`, IgnoreCase, "AB", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
286	runRegexTrial(t, `(a+|b){1,}`, IgnoreCase, "AB", "Pass. Group[0]=(0,2) Group[1]=(0,1)(1,1)")
287	runRegexTrial(t, `(a+|b)?`, IgnoreCase, "AB", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
288	runRegexTrial(t, `(a+|b){0,1}`, IgnoreCase, "AB", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
289	runRegexTrial(t, `(a+|b){0,1}?`, IgnoreCase, "AB", "Pass. Group[0]=(0,0) Group[1]=")
290	runRegexTrial(t, `)(`, IgnoreCase, "-", "Error.")
291	runRegexTrial(t, `[^ab]*`, IgnoreCase, "CDE", "Pass. Group[0]=(0,3)")
292	runRegexTrial(t, `abc`, IgnoreCase, "", "Fail.")
293	runRegexTrial(t, `a*`, IgnoreCase, "", "Pass. Group[0]=(0,0)")
294	runRegexTrial(t, `([abc])*d`, IgnoreCase, "ABBBCD", "Pass. Group[0]=(0,6) Group[1]=(0,1)(1,1)(2,1)(3,1)(4,1)")
295	runRegexTrial(t, `([abc])*bcd`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4) Group[1]=(0,1)")
296	runRegexTrial(t, `a|b|c|d|e`, IgnoreCase, "E", "Pass. Group[0]=(0,1)")
297	runRegexTrial(t, `(a|b|c|d|e)f`, IgnoreCase, "EF", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
298	runRegexTrial(t, `abcd*efg`, IgnoreCase, "ABCDEFG", "Pass. Group[0]=(0,7)")
299	runRegexTrial(t, `ab*`, IgnoreCase, "XABYABBBZ", "Pass. Group[0]=(1,2)")
300	runRegexTrial(t, `ab*`, IgnoreCase, "XAYABBBZ", "Pass. Group[0]=(1,1)")
301	runRegexTrial(t, `(ab|cd)e`, IgnoreCase, "ABCDE", "Pass. Group[0]=(2,3) Group[1]=(2,2)")
302	runRegexTrial(t, `[abhgefdc]ij`, IgnoreCase, "HIJ", "Pass. Group[0]=(0,3)")
303	runRegexTrial(t, `^(ab|cd)e`, IgnoreCase, "ABCDE", "Fail.")
304	runRegexTrial(t, `(abc|)ef`, IgnoreCase, "ABCDEF", "Pass. Group[0]=(4,2) Group[1]=(4,0)")
305	runRegexTrial(t, `(a|b)c*d`, IgnoreCase, "ABCD", "Pass. Group[0]=(1,3) Group[1]=(1,1)")
306	runRegexTrial(t, `(ab|ab*)bc`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3) Group[1]=(0,1)")
307	runRegexTrial(t, `a([bc]*)c*`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3) Group[1]=(1,2)")
308	runRegexTrial(t, `a([bc]*)(c*d)`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4) Group[1]=(1,2) Group[2]=(3,1)")
309	runRegexTrial(t, `a([bc]+)(c*d)`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4) Group[1]=(1,2) Group[2]=(3,1)")
310	runRegexTrial(t, `a([bc]*)(c+d)`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4) Group[1]=(1,1) Group[2]=(2,2)")
311	runRegexTrial(t, `a[bcd]*dcdcde`, IgnoreCase, "ADCDCDE", "Pass. Group[0]=(0,7)")
312	runRegexTrial(t, `a[bcd]+dcdcde`, IgnoreCase, "ADCDCDE", "Fail.")
313	runRegexTrial(t, `(ab|a)b*c`, IgnoreCase, "ABC", "Pass. Group[0]=(0,3) Group[1]=(0,2)")
314	runRegexTrial(t, `((a)(b)c)(d)`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4) Group[1]=(0,3) Group[2]=(0,1) Group[3]=(1,1) Group[4]=(3,1)")
315	runRegexTrial(t, `[a-zA-Z_][a-zA-Z0-9_]*`, IgnoreCase, "ALPHA", "Pass. Group[0]=(0,5)")
316	runRegexTrial(t, `^a(bc+|b[eh])g|.h$`, IgnoreCase, "ABH", "Pass. Group[0]=(1,2) Group[1]=")
317	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, IgnoreCase, "EFFGZ", "Pass. Group[0]=(0,5) Group[1]=(0,5) Group[2]=")
318	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, IgnoreCase, "IJ", "Pass. Group[0]=(0,2) Group[1]=(0,2) Group[2]=(1,1)")
319	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, IgnoreCase, "EFFG", "Fail.")
320	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, IgnoreCase, "BCDD", "Fail.")
321	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, IgnoreCase, "REFFGZ", "Pass. Group[0]=(1,5) Group[1]=(1,5) Group[2]=")
322	runRegexTrial(t, `((((((((((a))))))))))`, IgnoreCase, "A", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
323	runRegexTrial(t, `((((((((((a))))))))))\10`, IgnoreCase, "AA", "Pass. Group[0]=(0,2) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
324	runRegexTrial(t, `((((((((((a))))))))))!`, IgnoreCase, "AA", "Fail.")
325	runRegexTrial(t, `((((((((((a))))))))))!`, IgnoreCase, "A!", "Pass. Group[0]=(0,2) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
326	runRegexTrial(t, `(((((((((a)))))))))`, IgnoreCase, "A", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1)")
327	runRegexTrial(t, `(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))`, IgnoreCase, "A", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
328	runRegexTrial(t, `(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))`, IgnoreCase, "C", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
329	runRegexTrial(t, `multiple words of text`, IgnoreCase, "UH-UH", "Fail.")
330	runRegexTrial(t, `multiple words`, IgnoreCase, "MULTIPLE WORDS, YEAH", "Pass. Group[0]=(0,14)")
331	runRegexTrial(t, `(.*)c(.*)`, IgnoreCase, "ABCDE", "Pass. Group[0]=(0,5) Group[1]=(0,2) Group[2]=(3,2)")
332	runRegexTrial(t, `\((.*), (.*)\)`, IgnoreCase, "(A, B)", "Pass. Group[0]=(0,6) Group[1]=(1,1) Group[2]=(4,1)")
333	runRegexTrial(t, `[k]`, IgnoreCase, "AB", "Fail.")
334	runRegexTrial(t, `abcd`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4)")
335	runRegexTrial(t, `a(bc)d`, IgnoreCase, "ABCD", "Pass. Group[0]=(0,4) Group[1]=(1,2)")
336	runRegexTrial(t, `a[-]?c`, IgnoreCase, "AC", "Pass. Group[0]=(0,2)")
337	runRegexTrial(t, `(abc)\1`, IgnoreCase, "ABCABC", "Pass. Group[0]=(0,6) Group[1]=(0,3)")
338	runRegexTrial(t, `([a-c]*)\1`, IgnoreCase, "ABCABC", "Pass. Group[0]=(0,6) Group[1]=(0,3)")
339	runRegexTrial(t, `a(?!b).`, 0, "abad", "Pass. Group[0]=(2,2)")
340	runRegexTrial(t, `a(?=d).`, 0, "abad", "Pass. Group[0]=(2,2)")
341	runRegexTrial(t, `a(?=c|d).`, 0, "abad", "Pass. Group[0]=(2,2)")
342	runRegexTrial(t, `a(?:b|c|d)(.)`, 0, "ace", "Pass. Group[0]=(0,3) Group[1]=(2,1)")
343	runRegexTrial(t, `a(?:b|c|d)*(.)`, 0, "ace", "Pass. Group[0]=(0,3) Group[1]=(2,1)")
344	runRegexTrial(t, `a(?:b|c|d)+?(.)`, 0, "ace", "Pass. Group[0]=(0,3) Group[1]=(2,1)")
345	runRegexTrial(t, `a(?:b|c|d)+?(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,3) Group[1]=(2,1)")
346	runRegexTrial(t, `a(?:b|c|d)+(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,8) Group[1]=(7,1)")
347	runRegexTrial(t, `a(?:b|c|d){2}(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,4) Group[1]=(3,1)")
348	runRegexTrial(t, `a(?:b|c|d){4,5}(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,7) Group[1]=(6,1)")
349	runRegexTrial(t, `a(?:b|c|d){4,5}?(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,6) Group[1]=(5,1)")
350	runRegexTrial(t, `((foo)|(bar))*`, 0, "foobar", "Pass. Group[0]=(0,6) Group[1]=(0,3)(3,3) Group[2]=(0,3) Group[3]=(3,3)")
351	runRegexTrial(t, `:(?:`, 0, "-", "Error.")
352	runRegexTrial(t, `a(?:b|c|d){6,7}(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,8) Group[1]=(7,1)")
353	runRegexTrial(t, `a(?:b|c|d){6,7}?(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,8) Group[1]=(7,1)")
354	runRegexTrial(t, `a(?:b|c|d){5,6}(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,8) Group[1]=(7,1)")
355	runRegexTrial(t, `a(?:b|c|d){5,6}?(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,7) Group[1]=(6,1)")
356	runRegexTrial(t, `a(?:b|c|d){5,7}(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,8) Group[1]=(7,1)")
357	runRegexTrial(t, `a(?:b|c|d){5,7}?(.)`, 0, "acdbcdbe", "Pass. Group[0]=(0,7) Group[1]=(6,1)")
358	runRegexTrial(t, `a(?:b|(c|e){1,2}?|d)+?(.)`, 0, "ace", "Pass. Group[0]=(0,3) Group[1]=(1,1) Group[2]=(2,1)")
359	runRegexTrial(t, `^(.+)?B`, 0, "AB", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
360	runRegexTrial(t, `^([^a-z])|(\^)$`, 0, ".", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=")
361	runRegexTrial(t, `^[<>]&`, 0, "<&OUT", "Pass. Group[0]=(0,2)")
362	runRegexTrial(t, `^(a\1?){4}$`, 0, "aaaaaaaaaa", "Pass. Group[0]=(0,10) Group[1]=(0,1)(1,2)(3,3)(6,4)")
363	runRegexTrial(t, `^(a\1?){4}$`, 0, "aaaaaaaaa", "Fail.")
364	runRegexTrial(t, `^(a\1?){4}$`, 0, "aaaaaaaaaaa", "Fail.")
365	runRegexTrial(t, `^(a(?(1)\1)){4}$`, 0, "aaaaaaaaaa", "Pass. Group[0]=(0,10) Group[1]=(0,1)(1,2)(3,3)(6,4)")
366	runRegexTrial(t, `^(a(?(1)\1)){4}$`, 0, "aaaaaaaaa", "Fail.")
367	runRegexTrial(t, `^(a(?(1)\1)){4}$`, 0, "aaaaaaaaaaa", "Fail.")
368	runRegexTrial(t, `((a{4})+)`, 0, "aaaaaaaaa", "Pass. Group[0]=(0,8) Group[1]=(0,8) Group[2]=(0,4)(4,4)")
369	runRegexTrial(t, `(((aa){2})+)`, 0, "aaaaaaaaaa", "Pass. Group[0]=(0,8) Group[1]=(0,8) Group[2]=(0,4)(4,4) Group[3]=(0,2)(2,2)(4,2)(6,2)")
370	runRegexTrial(t, `(((a{2}){2})+)`, 0, "aaaaaaaaaa", "Pass. Group[0]=(0,8) Group[1]=(0,8) Group[2]=(0,4)(4,4) Group[3]=(0,2)(2,2)(4,2)(6,2)")
371	runRegexTrial(t, `(?:(f)(o)(o)|(b)(a)(r))*`, 0, "foobar", "Pass. Group[0]=(0,6) Group[1]=(0,1) Group[2]=(1,1) Group[3]=(2,1) Group[4]=(3,1) Group[5]=(4,1) Group[6]=(5,1)")
372	runRegexTrial(t, `(?<=a)b`, 0, "ab", "Pass. Group[0]=(1,1)")
373	runRegexTrial(t, `(?<=a)b`, 0, "cb", "Fail.")
374	runRegexTrial(t, `(?<=a)b`, 0, "b", "Fail.")
375	runRegexTrial(t, `(?<!c)b`, 0, "ab", "Pass. Group[0]=(1,1)")
376	runRegexTrial(t, `(?<!c)b`, 0, "cb", "Fail.")
377	runRegexTrial(t, `(?<!c)b`, 0, "b", "Pass. Group[0]=(0,1)")
378	runRegexTrial(t, `(?<!c)b`, 0, "b", "Pass. Group[0]=(0,1)")
379	runRegexTrial(t, `(?<%)b`, 0, "-", "Error.")
380	runRegexTrial(t, `(?:..)*a`, 0, "aba", "Pass. Group[0]=(0,3)")
381	runRegexTrial(t, `(?:..)*?a`, 0, "aba", "Pass. Group[0]=(0,1)")
382	runRegexTrial(t, `^(?:b|a(?=(.)))*\1`, 0, "abc", "Pass. Group[0]=(0,2) Group[1]=(1,1)")
383	runRegexTrial(t, `^(){3,5}`, 0, "abc", "Pass. Group[0]=(0,0) Group[1]=(0,0)(0,0)(0,0)")
384	runRegexTrial(t, `^(a+)*ax`, 0, "aax", "Pass. Group[0]=(0,3) Group[1]=(0,1)")
385	runRegexTrial(t, `^((a|b)+)*ax`, 0, "aax", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(0,1)")
386	runRegexTrial(t, `^((a|bc)+)*ax`, 0, "aax", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(0,1)")
387	runRegexTrial(t, `(a|x)*ab`, 0, "cab", "Pass. Group[0]=(1,2) Group[1]=")
388	runRegexTrial(t, `(a)*ab`, 0, "cab", "Pass. Group[0]=(1,2) Group[1]=")
389	runRegexTrial(t, `(?:(?i)a)b`, 0, "ab", "Pass. Group[0]=(0,2)")
390	runRegexTrial(t, `((?i)a)b`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
391	runRegexTrial(t, `(?:(?i)a)b`, 0, "Ab", "Pass. Group[0]=(0,2)")
392	runRegexTrial(t, `((?i)a)b`, 0, "Ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
393	runRegexTrial(t, `(?:(?i)a)b`, 0, "aB", "Fail.")
394	runRegexTrial(t, `((?i)a)b`, 0, "aB", "Fail.")
395	runRegexTrial(t, `(?i:a)b`, 0, "ab", "Pass. Group[0]=(0,2)")
396	runRegexTrial(t, `((?i:a))b`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
397	runRegexTrial(t, `(?i:a)b`, 0, "Ab", "Pass. Group[0]=(0,2)")
398	runRegexTrial(t, `((?i:a))b`, 0, "Ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
399	runRegexTrial(t, `(?i:a)b`, 0, "aB", "Fail.")
400	runRegexTrial(t, `((?i:a))b`, 0, "aB", "Fail.")
401	runRegexTrial(t, `(?:(?-i)a)b`, IgnoreCase, "ab", "Pass. Group[0]=(0,2)")
402	runRegexTrial(t, `((?-i)a)b`, IgnoreCase, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
403	runRegexTrial(t, `(?:(?-i)a)b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2)")
404	runRegexTrial(t, `((?-i)a)b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
405	runRegexTrial(t, `(?:(?-i)a)b`, IgnoreCase, "Ab", "Fail.")
406	runRegexTrial(t, `((?-i)a)b`, IgnoreCase, "Ab", "Fail.")
407	runRegexTrial(t, `(?:(?-i)a)b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2)")
408	runRegexTrial(t, `((?-i)a)b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
409	runRegexTrial(t, `(?:(?-i)a)b`, IgnoreCase, "AB", "Fail.")
410	runRegexTrial(t, `((?-i)a)b`, IgnoreCase, "AB", "Fail.")
411	runRegexTrial(t, `(?-i:a)b`, IgnoreCase, "ab", "Pass. Group[0]=(0,2)")
412	runRegexTrial(t, `((?-i:a))b`, IgnoreCase, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
413	runRegexTrial(t, `(?-i:a)b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2)")
414	runRegexTrial(t, `((?-i:a))b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
415	runRegexTrial(t, `(?-i:a)b`, IgnoreCase, "Ab", "Fail.")
416	runRegexTrial(t, `((?-i:a))b`, IgnoreCase, "Ab", "Fail.")
417	runRegexTrial(t, `(?-i:a)b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2)")
418	runRegexTrial(t, `((?-i:a))b`, IgnoreCase, "aB", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
419	runRegexTrial(t, `(?-i:a)b`, IgnoreCase, "AB", "Fail.")
420	runRegexTrial(t, `((?-i:a))b`, IgnoreCase, "AB", "Fail.")
421	runRegexTrial(t, `((?-i:a.))b`, IgnoreCase, "a\nB", "Fail.")
422	runRegexTrial(t, `((?s-i:a.))b`, IgnoreCase, "a\nB", "Pass. Group[0]=(0,3) Group[1]=(0,2)")
423	runRegexTrial(t, `((?s-i:a.))b`, IgnoreCase, "B\nB", "Fail.")
424	runRegexTrial(t, `(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))`, 0, "cabbbb", "Pass. Group[0]=(0,6)")
425	runRegexTrial(t, `(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))`, 0, "caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "Pass. Group[0]=(0,41)")
426	runRegexTrial(t, `(ab)\d\1`, IgnoreCase, "Ab4ab", "Pass. Group[0]=(0,5) Group[1]=(0,2)")
427	runRegexTrial(t, `(ab)\d\1`, IgnoreCase, "ab4Ab", "Pass. Group[0]=(0,5) Group[1]=(0,2)")
428	runRegexTrial(t, `foo\w*\d{4}baz`, 0, "foobar1234baz", "Pass. Group[0]=(0,13)")
429	runRegexTrial(t, `x(~~)*(?:(?:F)?)?`, 0, "x~~", "Pass. Group[0]=(0,3) Group[1]=(1,2)")
430	runRegexTrial(t, `^a(?#xxx){3}c`, 0, "aaac", "Pass. Group[0]=(0,4)")
431	runRegexTrial(t, `(?<![cd])b`, 0, "dbcb", "Fail.")
432	runRegexTrial(t, `(?<![cd])[ab]`, 0, "dbaacb", "Pass. Group[0]=(2,1)")
433	runRegexTrial(t, `(?<!(c|d))b`, 0, "dbcb", "Fail.")
434	runRegexTrial(t, `(?<!(c|d))[ab]`, 0, "dbaacb", "Pass. Group[0]=(2,1) Group[1]=")
435	runRegexTrial(t, `(?<!cd)[ab]`, 0, "cdaccb", "Pass. Group[0]=(5,1)")
436	runRegexTrial(t, `^(?:a?b?)*$`, 0, "a--", "Fail.")
437	runRegexTrial(t, `((?s)^a(.))((?m)^b$)`, 0, "a\nb\nc\n", "Pass. Group[0]=(0,3) Group[1]=(0,2) Group[2]=(1,1) Group[3]=(2,1)")
438	runRegexTrial(t, `((?m)^b$)`, 0, "a\nb\nc\n", "Pass. Group[0]=(2,1) Group[1]=(2,1)")
439	runRegexTrial(t, `(?m)^b`, 0, "a\nb\n", "Pass. Group[0]=(2,1)")
440	runRegexTrial(t, `(?m)^(b)`, 0, "a\nb\n", "Pass. Group[0]=(2,1) Group[1]=(2,1)")
441	runRegexTrial(t, `((?m)^b)`, 0, "a\nb\n", "Pass. Group[0]=(2,1) Group[1]=(2,1)")
442	runRegexTrial(t, `\n((?m)^b)`, 0, "a\nb\n", "Pass. Group[0]=(1,2) Group[1]=(2,1)")
443	runRegexTrial(t, `((?s).)c(?!.)`, 0, "a\nb\nc\n", "Pass. Group[0]=(3,2) Group[1]=(3,1)")
444	runRegexTrial(t, `((?s).)c(?!.)`, 0, "a\nb\nc\n", "Pass. Group[0]=(3,2) Group[1]=(3,1)")
445	runRegexTrial(t, `((?s)b.)c(?!.)`, 0, "a\nb\nc\n", "Pass. Group[0]=(2,3) Group[1]=(2,2)")
446	runRegexTrial(t, `((?s)b.)c(?!.)`, 0, "a\nb\nc\n", "Pass. Group[0]=(2,3) Group[1]=(2,2)")
447	runRegexTrial(t, `^b`, 0, "a\nb\nc\n", "Fail.")
448	runRegexTrial(t, `()^b`, 0, "a\nb\nc\n", "Fail.")
449	runRegexTrial(t, `((?m)^b)`, 0, "a\nb\nc\n", "Pass. Group[0]=(2,1) Group[1]=(2,1)")
450	runRegexTrial(t, `(x)?(?(1)a|b)`, 0, "a", "Fail.")
451	runRegexTrial(t, `(x)?(?(1)b|a)`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=")
452	runRegexTrial(t, `()?(?(1)b|a)`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=")
453	runRegexTrial(t, `()(?(1)b|a)`, 0, "a", "Fail.")
454	runRegexTrial(t, `()?(?(1)a|b)`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=(0,0)")
455	runRegexTrial(t, `^(\()?blah(?(1)(\)))$`, 0, "(blah)", "Pass. Group[0]=(0,6) Group[1]=(0,1) Group[2]=(5,1)")
456	runRegexTrial(t, `^(\()?blah(?(1)(\)))$`, 0, "blah", "Pass. Group[0]=(0,4) Group[1]= Group[2]=")
457	runRegexTrial(t, `^(\()?blah(?(1)(\)))$`, 0, "blah)", "Fail.")
458	runRegexTrial(t, `^(\()?blah(?(1)(\)))$`, 0, "(blah", "Fail.")
459	runRegexTrial(t, `^(\(+)?blah(?(1)(\)))$`, 0, "(blah)", "Pass. Group[0]=(0,6) Group[1]=(0,1) Group[2]=(5,1)")
460	runRegexTrial(t, `^(\(+)?blah(?(1)(\)))$`, 0, "blah", "Pass. Group[0]=(0,4) Group[1]= Group[2]=")
461	runRegexTrial(t, `^(\(+)?blah(?(1)(\)))$`, 0, "blah)", "Fail.")
462	runRegexTrial(t, `^(\(+)?blah(?(1)(\)))$`, 0, "(blah", "Fail.")
463	runRegexTrial(t, `(?(1)a|b|c)`, 0, "a", "Error.")
464	runRegexTrial(t, `(?(?!a)a|b)`, 0, "a", "Fail.")
465	runRegexTrial(t, `(?(?!a)b|a)`, 0, "a", "Pass. Group[0]=(0,1)")
466	runRegexTrial(t, `(?(?=a)b|a)`, 0, "a", "Fail.")
467	runRegexTrial(t, `(?(?=a)a|b)`, 0, "a", "Pass. Group[0]=(0,1)")
468	runRegexTrial(t, `(?=(a+?))(\1ab)`, 0, "aaab", "Pass. Group[0]=(1,3) Group[1]=(1,1) Group[2]=(1,3)")
469	runRegexTrial(t, `^(?=(a+?))\1ab`, 0, "aaab", "Fail.")
470	runRegexTrial(t, `(\w+:)+`, 0, "one:", "Pass. Group[0]=(0,4) Group[1]=(0,4)")
471	runRegexTrial(t, `$(?<=^(a))`, 0, "a", "Pass. Group[0]=(1,0) Group[1]=(0,1)")
472	runRegexTrial(t, `(?=(a+?))(\1ab)`, 0, "aaab", "Pass. Group[0]=(1,3) Group[1]=(1,1) Group[2]=(1,3)")
473	runRegexTrial(t, `^(?=(a+?))\1ab`, 0, "aaab", "Fail.")
474	runRegexTrial(t, `([\w:]+::)?(\w+)$`, 0, "abcd:", "Fail.")
475	runRegexTrial(t, `([\w:]+::)?(\w+)$`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]= Group[2]=(0,4)")
476	runRegexTrial(t, `([\w:]+::)?(\w+)$`, 0, "xy:z:::abcd", "Pass. Group[0]=(0,11) Group[1]=(0,7) Group[2]=(7,4)")
477	runRegexTrial(t, `^[^bcd]*(c+)`, 0, "aexycd", "Pass. Group[0]=(0,5) Group[1]=(4,1)")
478	runRegexTrial(t, `(a*)b+`, 0, "caab", "Pass. Group[0]=(1,3) Group[1]=(1,2)")
479	runRegexTrial(t, `([\w:]+::)?(\w+)$`, 0, "abcd:", "Fail.")
480	runRegexTrial(t, `([\w:]+::)?(\w+)$`, 0, "abcd", "Pass. Group[0]=(0,4) Group[1]= Group[2]=(0,4)")
481	runRegexTrial(t, `([\w:]+::)?(\w+)$`, 0, "xy:z:::abcd", "Pass. Group[0]=(0,11) Group[1]=(0,7) Group[2]=(7,4)")
482	runRegexTrial(t, `^[^bcd]*(c+)`, 0, "aexycd", "Pass. Group[0]=(0,5) Group[1]=(4,1)")
483	runRegexTrial(t, `(>a+)ab`, 0, "aaab", "Fail.")
484	runRegexTrial(t, `(?>a+)b`, 0, "aaab", "Pass. Group[0]=(0,4)")
485	runRegexTrial(t, `([[:]+)`, 0, "a:[b]:", "Pass. Group[0]=(1,2) Group[1]=(1,2)")
486	runRegexTrial(t, `([[=]+)`, 0, "a=[b]=", "Pass. Group[0]=(1,2) Group[1]=(1,2)")
487	runRegexTrial(t, `([[.]+)`, 0, "a.[b].", "Pass. Group[0]=(1,2) Group[1]=(1,2)")
488	runRegexTrial(t, `[a[:]b[:c]`, 0, "abc", "Pass. Group[0]=(0,3)")
489	runRegexTrial(t, `[a[:]b[:c]`, 0, "abc", "Pass. Group[0]=(0,3)")
490	runRegexTrial(t, `((?>a+)b)`, 0, "aaab", "Pass. Group[0]=(0,4) Group[1]=(0,4)")
491	runRegexTrial(t, `(?>(a+))b`, 0, "aaab", "Pass. Group[0]=(0,4) Group[1]=(0,3)")
492	runRegexTrial(t, `((?>[^()]+)|\([^()]*\))+`, 0, "((abc(ade)ufh()()x", "Pass. Group[0]=(2,16) Group[1]=(2,3)(5,5)(10,3)(13,2)(15,2)(17,1)")
493	runRegexTrial(t, `(?<=x+)`, 0, "xxxxy", "Pass. Group[0]=(1,0)")
494	runRegexTrial(t, `a{37,17}`, 0, "-", "Error.")
495	runRegexTrial(t, `\Z`, 0, "a\nb\n", "Pass. Group[0]=(3,0)")
496	runRegexTrial(t, `\z`, 0, "a\nb\n", "Pass. Group[0]=(4,0)")
497	runRegexTrial(t, `$`, 0, "a\nb\n", "Pass. Group[0]=(3,0)")
498	runRegexTrial(t, `\Z`, 0, "b\na\n", "Pass. Group[0]=(3,0)")
499	runRegexTrial(t, `\z`, 0, "b\na\n", "Pass. Group[0]=(4,0)")
500	runRegexTrial(t, `$`, 0, "b\na\n", "Pass. Group[0]=(3,0)")
501	runRegexTrial(t, `\Z`, 0, "b\na", "Pass. Group[0]=(3,0)")
502	runRegexTrial(t, `\z`, 0, "b\na", "Pass. Group[0]=(3,0)")
503	runRegexTrial(t, `$`, 0, "b\na", "Pass. Group[0]=(3,0)")
504	runRegexTrial(t, `\Z`, Multiline, "a\nb\n", "Pass. Group[0]=(3,0)")
505	runRegexTrial(t, `\z`, Multiline, "a\nb\n", "Pass. Group[0]=(4,0)")
506	runRegexTrial(t, `$`, Multiline, "a\nb\n", "Pass. Group[0]=(1,0)")
507	runRegexTrial(t, `\Z`, Multiline, "b\na\n", "Pass. Group[0]=(3,0)")
508	runRegexTrial(t, `\z`, Multiline, "b\na\n", "Pass. Group[0]=(4,0)")
509	runRegexTrial(t, `$`, Multiline, "b\na\n", "Pass. Group[0]=(1,0)")
510	runRegexTrial(t, `\Z`, Multiline, "b\na", "Pass. Group[0]=(3,0)")
511	runRegexTrial(t, `\z`, Multiline, "b\na", "Pass. Group[0]=(3,0)")
512	runRegexTrial(t, `$`, Multiline, "b\na", "Pass. Group[0]=(1,0)")
513	runRegexTrial(t, `a\Z`, 0, "a\nb\n", "Fail.")
514	runRegexTrial(t, `a\z`, 0, "a\nb\n", "Fail.")
515	runRegexTrial(t, `a$`, 0, "a\nb\n", "Fail.")
516	runRegexTrial(t, `a\Z`, 0, "b\na\n", "Pass. Group[0]=(2,1)")
517	runRegexTrial(t, `a\z`, 0, "b\na\n", "Fail.")
518	runRegexTrial(t, `a$`, 0, "b\na\n", "Pass. Group[0]=(2,1)")
519	runRegexTrial(t, `a\Z`, 0, "b\na", "Pass. Group[0]=(2,1)")
520	runRegexTrial(t, `a\z`, 0, "b\na", "Pass. Group[0]=(2,1)")
521	runRegexTrial(t, `a$`, 0, "b\na", "Pass. Group[0]=(2,1)")
522	runRegexTrial(t, `a\z`, Multiline, "a\nb\n", "Fail.")
523	runRegexTrial(t, `a$`, Multiline, "a\nb\n", "Pass. Group[0]=(0,1)")
524	runRegexTrial(t, `a\Z`, Multiline, "b\na\n", "Pass. Group[0]=(2,1)")
525	runRegexTrial(t, `a\z`, Multiline, "b\na\n", "Fail.")
526	runRegexTrial(t, `a$`, Multiline, "b\na\n", "Pass. Group[0]=(2,1)")
527	runRegexTrial(t, `a\Z`, Multiline, "b\na", "Pass. Group[0]=(2,1)")
528	runRegexTrial(t, `a\z`, Multiline, "b\na", "Pass. Group[0]=(2,1)")
529	runRegexTrial(t, `a$`, Multiline, "b\na", "Pass. Group[0]=(2,1)")
530	runRegexTrial(t, `aa\Z`, 0, "aa\nb\n", "Fail.")
531	runRegexTrial(t, `aa\z`, 0, "aa\nb\n", "Fail.")
532	runRegexTrial(t, `aa$`, 0, "aa\nb\n", "Fail.")
533	runRegexTrial(t, `aa\Z`, 0, "b\naa\n", "Pass. Group[0]=(2,2)")
534	runRegexTrial(t, `aa\z`, 0, "b\naa\n", "Fail.")
535	runRegexTrial(t, `aa$`, 0, "b\naa\n", "Pass. Group[0]=(2,2)")
536	runRegexTrial(t, `aa\Z`, 0, "b\naa", "Pass. Group[0]=(2,2)")
537	runRegexTrial(t, `aa\z`, 0, "b\naa", "Pass. Group[0]=(2,2)")
538	runRegexTrial(t, `aa$`, 0, "b\naa", "Pass. Group[0]=(2,2)")
539	runRegexTrial(t, `aa\z`, Multiline, "aa\nb\n", "Fail.")
540	runRegexTrial(t, `aa$`, Multiline, "aa\nb\n", "Pass. Group[0]=(0,2)")
541	runRegexTrial(t, `aa\Z`, Multiline, "b\naa\n", "Pass. Group[0]=(2,2)")
542	runRegexTrial(t, `aa\z`, Multiline, "b\naa\n", "Fail.")
543	runRegexTrial(t, `aa$`, Multiline, "b\naa\n", "Pass. Group[0]=(2,2)")
544	runRegexTrial(t, `aa\Z`, Multiline, "b\naa", "Pass. Group[0]=(2,2)")
545	runRegexTrial(t, `aa\z`, Multiline, "b\naa", "Pass. Group[0]=(2,2)")
546	runRegexTrial(t, `aa$`, Multiline, "b\naa", "Pass. Group[0]=(2,2)")
547	runRegexTrial(t, `aa\Z`, 0, "ac\nb\n", "Fail.")
548	runRegexTrial(t, `aa\z`, 0, "ac\nb\n", "Fail.")
549	runRegexTrial(t, `aa$`, 0, "ac\nb\n", "Fail.")
550	runRegexTrial(t, `aa\Z`, 0, "b\nac\n", "Fail.")
551	runRegexTrial(t, `aa\z`, 0, "b\nac\n", "Fail.")
552	runRegexTrial(t, `aa$`, 0, "b\nac\n", "Fail.")
553	runRegexTrial(t, `aa\Z`, 0, "b\nac", "Fail.")
554	runRegexTrial(t, `aa\z`, 0, "b\nac", "Fail.")
555	runRegexTrial(t, `aa$`, 0, "b\nac", "Fail.")
556	runRegexTrial(t, `aa\Z`, Multiline, "ac\nb\n", "Fail.")
557	runRegexTrial(t, `aa\z`, Multiline, "ac\nb\n", "Fail.")
558	runRegexTrial(t, `aa$`, Multiline, "ac\nb\n", "Fail.")
559	runRegexTrial(t, `aa\Z`, Multiline, "b\nac\n", "Fail.")
560	runRegexTrial(t, `aa\z`, Multiline, "b\nac\n", "Fail.")
561	runRegexTrial(t, `aa$`, Multiline, "b\nac\n", "Fail.")
562	runRegexTrial(t, `aa\Z`, Multiline, "b\nac", "Fail.")
563	runRegexTrial(t, `aa\z`, Multiline, "b\nac", "Fail.")
564	runRegexTrial(t, `aa$`, Multiline, "b\nac", "Fail.")
565	runRegexTrial(t, `aa\Z`, 0, "ca\nb\n", "Fail.")
566	runRegexTrial(t, `aa\z`, 0, "ca\nb\n", "Fail.")
567	runRegexTrial(t, `aa$`, 0, "ca\nb\n", "Fail.")
568	runRegexTrial(t, `aa\Z`, 0, "b\nca\n", "Fail.")
569	runRegexTrial(t, `aa\z`, 0, "b\nca\n", "Fail.")
570	runRegexTrial(t, `aa$`, 0, "b\nca\n", "Fail.")
571	runRegexTrial(t, `aa\Z`, 0, "b\nca", "Fail.")
572	runRegexTrial(t, `aa\z`, 0, "b\nca", "Fail.")
573	runRegexTrial(t, `aa$`, 0, "b\nca", "Fail.")
574	runRegexTrial(t, `aa\Z`, Multiline, "ca\nb\n", "Fail.")
575	runRegexTrial(t, `aa\z`, Multiline, "ca\nb\n", "Fail.")
576	runRegexTrial(t, `aa$`, Multiline, "ca\nb\n", "Fail.")
577	runRegexTrial(t, `aa\Z`, Multiline, "b\nca\n", "Fail.")
578	runRegexTrial(t, `aa\z`, Multiline, "b\nca\n", "Fail.")
579	runRegexTrial(t, `aa$`, Multiline, "b\nca\n", "Fail.")
580	runRegexTrial(t, `aa\Z`, Multiline, "b\nca", "Fail.")
581	runRegexTrial(t, `aa\z`, Multiline, "b\nca", "Fail.")
582	runRegexTrial(t, `aa$`, Multiline, "b\nca", "Fail.")
583	runRegexTrial(t, `ab\Z`, 0, "ab\nb\n", "Fail.")
584	runRegexTrial(t, `ab\z`, 0, "ab\nb\n", "Fail.")
585	runRegexTrial(t, `ab$`, 0, "ab\nb\n", "Fail.")
586	runRegexTrial(t, `ab\Z`, 0, "b\nab\n", "Pass. Group[0]=(2,2)")
587	runRegexTrial(t, `ab\z`, 0, "b\nab\n", "Fail.")
588	runRegexTrial(t, `ab$`, 0, "b\nab\n", "Pass. Group[0]=(2,2)")
589	runRegexTrial(t, `ab\Z`, 0, "b\nab", "Pass. Group[0]=(2,2)")
590	runRegexTrial(t, `ab\z`, 0, "b\nab", "Pass. Group[0]=(2,2)")
591	runRegexTrial(t, `ab$`, 0, "b\nab", "Pass. Group[0]=(2,2)")
592	runRegexTrial(t, `ab\z`, Multiline, "ab\nb\n", "Fail.")
593	runRegexTrial(t, `ab$`, Multiline, "ab\nb\n", "Pass. Group[0]=(0,2)")
594	runRegexTrial(t, `ab\Z`, Multiline, "b\nab\n", "Pass. Group[0]=(2,2)")
595	runRegexTrial(t, `ab\z`, Multiline, "b\nab\n", "Fail.")
596	runRegexTrial(t, `ab$`, Multiline, "b\nab\n", "Pass. Group[0]=(2,2)")
597	runRegexTrial(t, `ab\Z`, Multiline, "b\nab", "Pass. Group[0]=(2,2)")
598	runRegexTrial(t, `ab\z`, Multiline, "b\nab", "Pass. Group[0]=(2,2)")
599	runRegexTrial(t, `ab$`, Multiline, "b\nab", "Pass. Group[0]=(2,2)")
600	runRegexTrial(t, `ab\Z`, 0, "ac\nb\n", "Fail.")
601	runRegexTrial(t, `ab\z`, 0, "ac\nb\n", "Fail.")
602	runRegexTrial(t, `ab$`, 0, "ac\nb\n", "Fail.")
603	runRegexTrial(t, `ab\Z`, 0, "b\nac\n", "Fail.")
604	runRegexTrial(t, `ab\z`, 0, "b\nac\n", "Fail.")
605	runRegexTrial(t, `ab$`, 0, "b\nac\n", "Fail.")
606	runRegexTrial(t, `ab\Z`, 0, "b\nac", "Fail.")
607	runRegexTrial(t, `ab\z`, 0, "b\nac", "Fail.")
608	runRegexTrial(t, `ab$`, 0, "b\nac", "Fail.")
609	runRegexTrial(t, `ab\Z`, Multiline, "ac\nb\n", "Fail.")
610	runRegexTrial(t, `ab\z`, Multiline, "ac\nb\n", "Fail.")
611	runRegexTrial(t, `ab$`, Multiline, "ac\nb\n", "Fail.")
612	runRegexTrial(t, `ab\Z`, Multiline, "b\nac\n", "Fail.")
613	runRegexTrial(t, `ab\z`, Multiline, "b\nac\n", "Fail.")
614	runRegexTrial(t, `ab$`, Multiline, "b\nac\n", "Fail.")
615	runRegexTrial(t, `ab\Z`, Multiline, "b\nac", "Fail.")
616	runRegexTrial(t, `ab\z`, Multiline, "b\nac", "Fail.")
617	runRegexTrial(t, `ab$`, Multiline, "b\nac", "Fail.")
618	runRegexTrial(t, `ab\Z`, 0, "ca\nb\n", "Fail.")
619	runRegexTrial(t, `ab\z`, 0, "ca\nb\n", "Fail.")
620	runRegexTrial(t, `ab$`, 0, "ca\nb\n", "Fail.")
621	runRegexTrial(t, `ab\Z`, 0, "b\nca\n", "Fail.")
622	runRegexTrial(t, `ab\z`, 0, "b\nca\n", "Fail.")
623	runRegexTrial(t, `ab$`, 0, "b\nca\n", "Fail.")
624	runRegexTrial(t, `ab\Z`, 0, "b\nca", "Fail.")
625	runRegexTrial(t, `ab\z`, 0, "b\nca", "Fail.")
626	runRegexTrial(t, `ab$`, 0, "b\nca", "Fail.")
627	runRegexTrial(t, `ab\Z`, Multiline, "ca\nb\n", "Fail.")
628	runRegexTrial(t, `ab\z`, Multiline, "ca\nb\n", "Fail.")
629	runRegexTrial(t, `ab$`, Multiline, "ca\nb\n", "Fail.")
630	runRegexTrial(t, `ab\Z`, Multiline, "b\nca\n", "Fail.")
631	runRegexTrial(t, `ab\z`, Multiline, "b\nca\n", "Fail.")
632	runRegexTrial(t, `ab$`, Multiline, "b\nca\n", "Fail.")
633	runRegexTrial(t, `ab\Z`, Multiline, "b\nca", "Fail.")
634	runRegexTrial(t, `ab\z`, Multiline, "b\nca", "Fail.")
635	runRegexTrial(t, `ab$`, Multiline, "b\nca", "Fail.")
636	runRegexTrial(t, `abb\Z`, 0, "abb\nb\n", "Fail.")
637	runRegexTrial(t, `abb\z`, 0, "abb\nb\n", "Fail.")
638	runRegexTrial(t, `abb$`, 0, "abb\nb\n", "Fail.")
639	runRegexTrial(t, `abb\Z`, 0, "b\nabb\n", "Pass. Group[0]=(2,3)")
640	runRegexTrial(t, `abb\z`, 0, "b\nabb\n", "Fail.")
641	runRegexTrial(t, `abb$`, 0, "b\nabb\n", "Pass. Group[0]=(2,3)")
642	runRegexTrial(t, `abb\Z`, 0, "b\nabb", "Pass. Group[0]=(2,3)")
643	runRegexTrial(t, `abb\z`, 0, "b\nabb", "Pass. Group[0]=(2,3)")
644	runRegexTrial(t, `abb$`, 0, "b\nabb", "Pass. Group[0]=(2,3)")
645	runRegexTrial(t, `abb\z`, Multiline, "abb\nb\n", "Fail.")
646	runRegexTrial(t, `abb$`, Multiline, "abb\nb\n", "Pass. Group[0]=(0,3)")
647	runRegexTrial(t, `abb\Z`, Multiline, "b\nabb\n", "Pass. Group[0]=(2,3)")
648	runRegexTrial(t, `abb\z`, Multiline, "b\nabb\n", "Fail.")
649	runRegexTrial(t, `abb$`, Multiline, "b\nabb\n", "Pass. Group[0]=(2,3)")
650	runRegexTrial(t, `abb\Z`, Multiline, "b\nabb", "Pass. Group[0]=(2,3)")
651	runRegexTrial(t, `abb\z`, Multiline, "b\nabb", "Pass. Group[0]=(2,3)")
652	runRegexTrial(t, `abb$`, Multiline, "b\nabb", "Pass. Group[0]=(2,3)")
653	runRegexTrial(t, `abb\Z`, 0, "ac\nb\n", "Fail.")
654	runRegexTrial(t, `abb\z`, 0, "ac\nb\n", "Fail.")
655	runRegexTrial(t, `abb$`, 0, "ac\nb\n", "Fail.")
656	runRegexTrial(t, `abb\Z`, 0, "b\nac\n", "Fail.")
657	runRegexTrial(t, `abb\z`, 0, "b\nac\n", "Fail.")
658	runRegexTrial(t, `abb$`, 0, "b\nac\n", "Fail.")
659	runRegexTrial(t, `abb\Z`, 0, "b\nac", "Fail.")
660	runRegexTrial(t, `abb\z`, 0, "b\nac", "Fail.")
661	runRegexTrial(t, `abb$`, 0, "b\nac", "Fail.")
662	runRegexTrial(t, `abb\Z`, Multiline, "ac\nb\n", "Fail.")
663	runRegexTrial(t, `abb\z`, Multiline, "ac\nb\n", "Fail.")
664	runRegexTrial(t, `abb$`, Multiline, "ac\nb\n", "Fail.")
665	runRegexTrial(t, `abb\Z`, Multiline, "b\nac\n", "Fail.")
666	runRegexTrial(t, `abb\z`, Multiline, "b\nac\n", "Fail.")
667	runRegexTrial(t, `abb$`, Multiline, "b\nac\n", "Fail.")
668	runRegexTrial(t, `abb\Z`, Multiline, "b\nac", "Fail.")
669	runRegexTrial(t, `abb\z`, Multiline, "b\nac", "Fail.")
670	runRegexTrial(t, `abb$`, Multiline, "b\nac", "Fail.")
671	runRegexTrial(t, `abb\Z`, 0, "ca\nb\n", "Fail.")
672	runRegexTrial(t, `abb\z`, 0, "ca\nb\n", "Fail.")
673	runRegexTrial(t, `abb$`, 0, "ca\nb\n", "Fail.")
674	runRegexTrial(t, `abb\Z`, 0, "b\nca\n", "Fail.")
675	runRegexTrial(t, `abb\z`, 0, "b\nca\n", "Fail.")
676	runRegexTrial(t, `abb$`, 0, "b\nca\n", "Fail.")
677	runRegexTrial(t, `abb\Z`, 0, "b\nca", "Fail.")
678	runRegexTrial(t, `abb\z`, 0, "b\nca", "Fail.")
679	runRegexTrial(t, `abb$`, 0, "b\nca", "Fail.")
680	runRegexTrial(t, `abb\Z`, Multiline, "ca\nb\n", "Fail.")
681	runRegexTrial(t, `abb\z`, Multiline, "ca\nb\n", "Fail.")
682	runRegexTrial(t, `abb$`, Multiline, "ca\nb\n", "Fail.")
683	runRegexTrial(t, `abb\Z`, Multiline, "b\nca\n", "Fail.")
684	runRegexTrial(t, `abb\z`, Multiline, "b\nca\n", "Fail.")
685	runRegexTrial(t, `abb$`, Multiline, "b\nca\n", "Fail.")
686	runRegexTrial(t, `abb\Z`, Multiline, "b\nca", "Fail.")
687	runRegexTrial(t, `abb\z`, Multiline, "b\nca", "Fail.")
688	runRegexTrial(t, `abb$`, Multiline, "b\nca", "Fail.")
689	runRegexTrial(t, `(^|x)(c)`, 0, "ca", "Pass. Group[0]=(0,1) Group[1]=(0,0) Group[2]=(0,1)")
690	runRegexTrial(t, `a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz`, 0, "x", "Fail.")
691	runRegexTrial(t, `round\(((?>[^()]+))\)`, 0, "_I(round(xs * sz),1)", "Pass. Group[0]=(3,14) Group[1]=(9,7)")
692	runRegexTrial(t, `foo.bart`, 0, "foo.bart", "Pass. Group[0]=(0,8)")
693	runRegexTrial(t, `^d[x][x][x]`, Multiline, "abcd\ndxxx", "Pass. Group[0]=(5,4)")
694	runRegexTrial(t, `.X(.+)+X`, 0, "bbbbXcXaaaaaaaa", "Pass. Group[0]=(3,4) Group[1]=(5,1)")
695	runRegexTrial(t, `.X(.+)+XX`, 0, "bbbbXcXXaaaaaaaa", "Pass. Group[0]=(3,5) Group[1]=(5,1)")
696	runRegexTrial(t, `.XX(.+)+X`, 0, "bbbbXXcXaaaaaaaa", "Pass. Group[0]=(3,5) Group[1]=(6,1)")
697	runRegexTrial(t, `.X(.+)+X`, 0, "bbbbXXaaaaaaaaa", "Fail.")
698	runRegexTrial(t, `.X(.+)+XX`, 0, "bbbbXXXaaaaaaaaa", "Fail.")
699	runRegexTrial(t, `.XX(.+)+X`, 0, "bbbbXXXaaaaaaaaa", "Fail.")
700	runRegexTrial(t, `.X(.+)+[X]`, 0, "bbbbXcXaaaaaaaa", "Pass. Group[0]=(3,4) Group[1]=(5,1)")
701	runRegexTrial(t, `.X(.+)+[X][X]`, 0, "bbbbXcXXaaaaaaaa", "Pass. Group[0]=(3,5) Group[1]=(5,1)")
702	runRegexTrial(t, `.XX(.+)+[X]`, 0, "bbbbXXcXaaaaaaaa", "Pass. Group[0]=(3,5) Group[1]=(6,1)")
703	runRegexTrial(t, `.X(.+)+[X]`, 0, "bbbbXXaaaaaaaaa", "Fail.")
704	runRegexTrial(t, `.X(.+)+[X][X]`, 0, "bbbbXXXaaaaaaaaa", "Fail.")
705	runRegexTrial(t, `.XX(.+)+[X]`, 0, "bbbbXXXaaaaaaaaa", "Fail.")
706	runRegexTrial(t, `.[X](.+)+[X]`, 0, "bbbbXcXaaaaaaaa", "Pass. Group[0]=(3,4) Group[1]=(5,1)")
707	runRegexTrial(t, `.[X](.+)+[X][X]`, 0, "bbbbXcXXaaaaaaaa", "Pass. Group[0]=(3,5) Group[1]=(5,1)")
708	runRegexTrial(t, `.[X][X](.+)+[X]`, 0, "bbbbXXcXaaaaaaaa", "Pass. Group[0]=(3,5) Group[1]=(6,1)")
709	runRegexTrial(t, `.[X](.+)+[X]`, 0, "bbbbXXaaaaaaaaa", "Fail.")
710	runRegexTrial(t, `.[X](.+)+[X][X]`, 0, "bbbbXXXaaaaaaaaa", "Fail.")
711	runRegexTrial(t, `.[X][X](.+)+[X]`, 0, "bbbbXXXaaaaaaaaa", "Fail.")
712	runRegexTrial(t, `tt+$`, 0, "xxxtt", "Pass. Group[0]=(3,2)")
713	runRegexTrial(t, `([\d-z]+)`, 0, "a0-za", "Pass. Group[0]=(1,3) Group[1]=(1,3)")
714	runRegexTrial(t, `([\d-\s]+)`, 0, "a0- z", "Pass. Group[0]=(1,3) Group[1]=(1,3)")
715	runRegexTrial(t, `\GX.*X`, 0, "aaaXbX", "Fail.")
716	runRegexTrial(t, `(\d+\.\d+)`, 0, "3.1415926", "Pass. Group[0]=(0,9) Group[1]=(0,9)")
717	runRegexTrial(t, `(\ba.{0,10}br)`, 0, "have a web browser", "Pass. Group[0]=(5,8) Group[1]=(5,8)")
718	runRegexTrial(t, `\.c(pp|xx|c)?$`, IgnoreCase, "Changes", "Fail.")
719	runRegexTrial(t, `\.c(pp|xx|c)?$`, IgnoreCase, "IO.c", "Pass. Group[0]=(2,2) Group[1]=")
720	runRegexTrial(t, `(\.c(pp|xx|c)?$)`, IgnoreCase, "IO.c", "Pass. Group[0]=(2,2) Group[1]=(2,2) Group[2]=")
721	runRegexTrial(t, `^([a-z]:)`, 0, "C:/", "Fail.")
722	runRegexTrial(t, `^\S\s+aa$`, Multiline, "\nx aa", "Pass. Group[0]=(1,4)")
723	runRegexTrial(t, `(^|a)b`, 0, "ab", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
724	runRegexTrial(t, `^([ab]*?)(b)?(c)$`, 0, "abac", "Pass. Group[0]=(0,4) Group[1]=(0,3) Group[2]= Group[3]=(3,1)")
725	runRegexTrial(t, `(\w)?(abc)\1b`, 0, "abcab", "Fail.")
726	runRegexTrial(t, `^(?:.,){2}c`, 0, "a,b,c", "Pass. Group[0]=(0,5)")
727	runRegexTrial(t, `^(.,){2}c`, 0, "a,b,c", "Pass. Group[0]=(0,5) Group[1]=(0,2)(2,2)")
728	runRegexTrial(t, `^(?:[^,]*,){2}c`, 0, "a,b,c", "Pass. Group[0]=(0,5)")
729	runRegexTrial(t, `^([^,]*,){2}c`, 0, "a,b,c", "Pass. Group[0]=(0,5) Group[1]=(0,2)(2,2)")
730	runRegexTrial(t, `^([^,]*,){3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
731	runRegexTrial(t, `^([^,]*,){3,}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
732	runRegexTrial(t, `^([^,]*,){0,3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
733	runRegexTrial(t, `^([^,]{1,3},){3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
734	runRegexTrial(t, `^([^,]{1,3},){3,}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
735	runRegexTrial(t, `^([^,]{1,3},){0,3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
736	runRegexTrial(t, `^([^,]{1,},){3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
737	runRegexTrial(t, `^([^,]{1,},){3,}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
738	runRegexTrial(t, `^([^,]{1,},){0,3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
739	runRegexTrial(t, `^([^,]{0,3},){3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
740	runRegexTrial(t, `^([^,]{0,3},){3,}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
741	runRegexTrial(t, `^([^,]{0,3},){0,3}d`, 0, "aaa,b,c,d", "Pass. Group[0]=(0,9) Group[1]=(0,4)(4,2)(6,2)")
742	runRegexTrial(t, `(?i)`, 0, "", "Pass. Group[0]=(0,0)")
743	runRegexTrial(t, `(?!\A)x`, Multiline, "a\nxb\n", "Pass. Group[0]=(2,1)")
744	runRegexTrial(t, `^(a(b)?)+$`, 0, "aba", "Pass. Group[0]=(0,3) Group[1]=(0,2)(2,1) Group[2]=(1,1)")
745	runRegexTrial(t, `^(aa(bb)?)+$`, 0, "aabbaa", "Pass. Group[0]=(0,6) Group[1]=(0,4)(4,2) Group[2]=(2,2)")
746	runRegexTrial(t, `^.{9}abc.*\n`, Multiline, "123\nabcabcabcabc\n", "Pass. Group[0]=(4,13)")
747	runRegexTrial(t, `^(a)?a$`, 0, "a", "Pass. Group[0]=(0,1) Group[1]=")
748	runRegexTrial(t, `^(a)?(?(1)a|b)+$`, 0, "a", "Fail.")
749	runRegexTrial(t, `^(a\1?)(a\1?)(a\2?)(a\3?)$`, 0, "aaaaaa", "Pass. Group[0]=(0,6) Group[1]=(0,1) Group[2]=(1,2) Group[3]=(3,1) Group[4]=(4,2)")
750	runRegexTrial(t, `^(a\1?){4}$`, 0, "aaaaaa", "Pass. Group[0]=(0,6) Group[1]=(0,1)(1,2)(3,1)(4,2)")
751	runRegexTrial(t, `^(0+)?(?:x(1))?`, 0, "x1", "Pass. Group[0]=(0,2) Group[1]= Group[2]=(1,1)")
752	runRegexTrial(t, `^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?`, 0, "012cxx0190", "Pass. Group[0]=(0,10) Group[1]=(0,4) Group[2]= Group[3]=(6,4)")
753	runRegexTrial(t, `^(b+?|a){1,2}c`, 0, "bbbac", "Pass. Group[0]=(0,5) Group[1]=(0,3)(3,1)")
754	runRegexTrial(t, `^(b+?|a){1,2}c`, 0, "bbbbac", "Pass. Group[0]=(0,6) Group[1]=(0,4)(4,1)")
755	runRegexTrial(t, `\((\w\. \w+)\)`, 0, "cd. (A. Tw)", "Pass. Group[0]=(4,7) Group[1]=(5,5)")
756	runRegexTrial(t, `((?:aaaa|bbbb)cccc)?`, 0, "aaaacccc", "Pass. Group[0]=(0,8) Group[1]=(0,8)")
757	runRegexTrial(t, `((?:aaaa|bbbb)cccc)?`, 0, "bbbbcccc", "Pass. Group[0]=(0,8) Group[1]=(0,8)")
758
759	runRegexTrial(t, `^(foo)|(bar)$`, 0, "foobar", "Pass. Group[0]=(0,3) Group[1]=(0,3) Group[2]=")
760	runRegexTrial(t, `^(foo)|(bar)$`, RightToLeft, "foobar", "Pass. Group[0]=(3,3) Group[1]= Group[2]=(3,3)")
761
762	runRegexTrial(t, `b`, RightToLeft, "babaaa", "Pass. Group[0]=(2,1)")
763	runRegexTrial(t, `bab`, RightToLeft, "babababaa", "Pass. Group[0]=(4,3)")
764	runRegexTrial(t, `abb`, RightToLeft, "abb", "Pass. Group[0]=(0,3)")
765
766	runRegexTrial(t, `b$`, RightToLeft|Multiline, "aab\naab", "Pass. Group[0]=(6,1)")
767	runRegexTrial(t, `^a`, RightToLeft|Multiline, "aab\naab", "Pass. Group[0]=(4,1)")
768	runRegexTrial(t, `^aaab`, RightToLeft|Multiline, "aaab\naab", "Pass. Group[0]=(0,4)")
769	runRegexTrial(t, `abb{2}`, RightToLeft, "abbb", "Pass. Group[0]=(0,4)")
770	runRegexTrial(t, `abb{1,2}`, RightToLeft, "abbb", "Pass. Group[0]=(0,4)")
771
772	runRegexTrial(t, `abb{1,2}`, RightToLeft, "abbbbbaaaa", "Pass. Group[0]=(0,4)")
773	runRegexTrial(t, `\Ab`, RightToLeft, "bab\naaa", "Pass. Group[0]=(0,1)")
774	runRegexTrial(t, `\Abab$`, RightToLeft, "bab", "Pass. Group[0]=(0,3)")
775	runRegexTrial(t, `b\Z`, RightToLeft, "bab\naaa", "Fail.")
776	runRegexTrial(t, `b\Z`, RightToLeft, "babaaab", "Pass. Group[0]=(6,1)")
777	runRegexTrial(t, `b\z`, RightToLeft, "babaaa", "Fail.")
778	runRegexTrial(t, `b\z`, RightToLeft, "babaaab", "Pass. Group[0]=(6,1)")
779	runRegexTrial(t, `a\G`, RightToLeft, "babaaa", "Pass. Group[0]=(5,1)")
780	runRegexTrial(t, `\Abaaa\G`, RightToLeft, "baaa", "Pass. Group[0]=(0,4)")
781	//			runRegexTrial(t, `b`, RightToLeft, "babaaa", "Pass. Group[0]=(2,1)")
782	//			runRegexTrial(t, `b`, RightToLeft, "babaaa", "Pass. Group[0]=(2,1)")
783	//			runRegexTrial(t, `b`, RightToLeft, "babaaa", "Pass. Group[0]=(2,1)")
784	//			runRegexTrial(t, `b`, RightToLeft, "babaaa", "Pass. Group[0]=(2,1)")
785
786	runRegexTrial(t, `\bc`, RightToLeft, "aaa c aaa c a", "Pass. Group[0]=(10,1)")
787	runRegexTrial(t, `\bc`, RightToLeft, "c aaa c", "Pass. Group[0]=(6,1)")
788	runRegexTrial(t, `\bc`, RightToLeft, "aaa ac", "Fail.")
789	runRegexTrial(t, `\bc`, RightToLeft, "c aaa", "Pass. Group[0]=(0,1)")
790	runRegexTrial(t, `\bc`, RightToLeft, "aaacaaa", "Fail.")
791	runRegexTrial(t, `\bc`, RightToLeft, "aaac aaa", "Fail.")
792	runRegexTrial(t, `\bc`, RightToLeft, "aaa ca caaa", "Pass. Group[0]=(7,1)")
793
794	runRegexTrial(t, `\Bc`, RightToLeft, "ac aaa ac", "Pass. Group[0]=(8,1)")
795	runRegexTrial(t, `\Bc`, RightToLeft, "aaa c", "Fail.")
796	runRegexTrial(t, `\Bc`, RightToLeft, "ca aaa", "Fail.")
797	runRegexTrial(t, `\Bc`, RightToLeft, "aaa c aaa", "Fail.")
798	runRegexTrial(t, `\Bc`, RightToLeft, " acaca ", "Pass. Group[0]=(4,1)")
799	runRegexTrial(t, `\Bc`, RightToLeft, "aaac aaac", "Pass. Group[0]=(8,1)")
800	runRegexTrial(t, `\Bc`, RightToLeft, "aaa caaa", "Fail.")
801
802	runRegexTrial(t, `b(a?)b`, RightToLeft, "aabababbaaababa", "Pass. Group[0]=(11,3) Group[1]=(12,1)")
803	runRegexTrial(t, `b{4}`, RightToLeft, "abbbbaabbbbaabbb", "Pass. Group[0]=(7,4)")
804	runRegexTrial(t, `b\1aa(.)`, RightToLeft, "bBaaB", "Pass. Group[0]=(0,5) Group[1]=(4,1)")
805	runRegexTrial(t, `b(.)aa\1`, RightToLeft, "bBaaB", "Fail.")
806
807	runRegexTrial(t, `^(a\1?){4}$`, RightToLeft, "aaaaaa", "Pass. Group[0]=(0,6) Group[1]=(5,1)(3,2)(2,1)(0,2)")
808	runRegexTrial(t, `^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?`, RightToLeft, "012cxx0190", "Pass. Group[0]=(0,10) Group[1]=(0,4) Group[2]= Group[3]=(6,4)")
809	runRegexTrial(t, `^(b+?|a){1,2}c`, RightToLeft, "bbbac", "Pass. Group[0]=(0,5) Group[1]=(3,1)(0,3)")
810	runRegexTrial(t, `\((\w\. \w+)\)`, RightToLeft, "cd. (A. Tw)", "Pass. Group[0]=(4,7) Group[1]=(5,5)")
811	runRegexTrial(t, `((?:aaaa|bbbb)cccc)?`, RightToLeft, "aaaacccc", "Pass. Group[0]=(0,8) Group[1]=(0,8)")
812	runRegexTrial(t, `((?:aaaa|bbbb)cccc)?`, RightToLeft, "bbbbcccc", "Pass. Group[0]=(0,8) Group[1]=(0,8)")
813
814	runRegexTrial(t, `(?<=a)b`, RightToLeft, "ab", "Pass. Group[0]=(1,1)")
815	runRegexTrial(t, `(?<=a)b`, RightToLeft, "cb", "Fail.")
816	runRegexTrial(t, `(?<=a)b`, RightToLeft, "b", "Fail.")
817	runRegexTrial(t, `(?<!c)b`, RightToLeft, "ab", "Pass. Group[0]=(1,1)")
818	runRegexTrial(t, `(?<!c)b`, RightToLeft, "cb", "Fail.")
819	runRegexTrial(t, `(?<!c)b`, RightToLeft, "b", "Pass. Group[0]=(0,1)")
820	runRegexTrial(t, `(?<!c)b`, RightToLeft, "b", "Pass. Group[0]=(0,1)")
821	runRegexTrial(t, `a(?=d).`, RightToLeft, "adabad", "Pass. Group[0]=(4,2)")
822	runRegexTrial(t, `a(?=c|d).`, RightToLeft, "adabad", "Pass. Group[0]=(4,2)")
823
824	runRegexTrial(t, `ab*c`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
825	runRegexTrial(t, `ab*bc`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
826	runRegexTrial(t, `ab*bc`, RightToLeft, "abbc", "Pass. Group[0]=(0,4)")
827	runRegexTrial(t, `ab*bc`, RightToLeft, "abbbbc", "Pass. Group[0]=(0,6)")
828	runRegexTrial(t, `.{1}`, RightToLeft, "abbbbc", "Pass. Group[0]=(5,1)")
829	runRegexTrial(t, `.{3,4}`, RightToLeft, "abbbbc", "Pass. Group[0]=(2,4)")
830	runRegexTrial(t, `ab{0,}bc`, RightToLeft, "abbbbc", "Pass. Group[0]=(0,6)")
831	runRegexTrial(t, `ab+bc`, RightToLeft, "abbc", "Pass. Group[0]=(0,4)")
832	runRegexTrial(t, `ab+bc`, RightToLeft, "abc", "Fail.")
833	runRegexTrial(t, `ab+bc`, RightToLeft, "abq", "Fail.")
834	runRegexTrial(t, `ab{1,}bc`, RightToLeft, "abq", "Fail.")
835	runRegexTrial(t, `ab+bc`, RightToLeft, "abbbbc", "Pass. Group[0]=(0,6)")
836	runRegexTrial(t, `ab{1,}bc`, RightToLeft, "abbbbc", "Pass. Group[0]=(0,6)")
837	runRegexTrial(t, `ab{1,3}bc`, RightToLeft, "abbbbc", "Pass. Group[0]=(0,6)")
838	runRegexTrial(t, `ab{3,4}bc`, RightToLeft, "abbbbc", "Pass. Group[0]=(0,6)")
839	runRegexTrial(t, `ab{4,5}bc`, RightToLeft, "abbbbc", "Fail.")
840	runRegexTrial(t, `ab?bc`, RightToLeft, "abbc", "Pass. Group[0]=(0,4)")
841	runRegexTrial(t, `ab?bc`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
842	runRegexTrial(t, `ab{0,1}bc`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
843	runRegexTrial(t, `ab?bc`, RightToLeft, "abbbbc", "Fail.")
844	runRegexTrial(t, `ab?c`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
845	runRegexTrial(t, `ab{0,1}c`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
846	runRegexTrial(t, `^abc$`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
847	runRegexTrial(t, `^abc$`, RightToLeft, "abcc", "Fail.")
848	runRegexTrial(t, `^abc`, RightToLeft, "abcc", "Pass. Group[0]=(0,3)")
849	runRegexTrial(t, `^abc$`, RightToLeft, "aabc", "Fail.")
850	runRegexTrial(t, `abc$`, RightToLeft, "aabc", "Pass. Group[0]=(1,3)")
851	runRegexTrial(t, `abc$`, RightToLeft, "aabcd", "Fail.")
852	runRegexTrial(t, `^`, RightToLeft, "abc", "Pass. Group[0]=(0,0)")
853	runRegexTrial(t, `$`, RightToLeft, "abc", "Pass. Group[0]=(3,0)")
854	runRegexTrial(t, `a.c`, RightToLeft, "abc", "Pass. Group[0]=(0,3)")
855	runRegexTrial(t, `a.c`, RightToLeft, "axc", "Pass. Group[0]=(0,3)")
856	runRegexTrial(t, `a.*c`, RightToLeft, "axyzc", "Pass. Group[0]=(0,5)")
857	runRegexTrial(t, `a.*c`, RightToLeft, "axyzd", "Fail.")
858	runRegexTrial(t, `a[bc]d`, RightToLeft, "abc", "Fail.")
859	runRegexTrial(t, `a[bc]d`, RightToLeft, "abd", "Pass. Group[0]=(0,3)")
860	runRegexTrial(t, `a[b-d]e`, RightToLeft, "abd", "Fail.")
861	runRegexTrial(t, `a[b-d]e`, RightToLeft, "ace", "Pass. Group[0]=(0,3)")
862	runRegexTrial(t, `a[b-d]`, RightToLeft, "aac", "Pass. Group[0]=(1,2)")
863	runRegexTrial(t, `a[-b]`, RightToLeft, "a-", "Pass. Group[0]=(0,2)")
864	runRegexTrial(t, `a[b-]`, RightToLeft, "a-", "Pass. Group[0]=(0,2)")
865	runRegexTrial(t, `a[b-a]`, RightToLeft, "-", "Error.")
866	runRegexTrial(t, `a[]b`, RightToLeft, "-", "Error.")
867	runRegexTrial(t, `a[`, RightToLeft, "-", "Error.")
868	runRegexTrial(t, `a]`, RightToLeft, "a]", "Pass. Group[0]=(0,2)")
869	runRegexTrial(t, `a[]]b`, RightToLeft, "a]b", "Pass. Group[0]=(0,3)")
870	runRegexTrial(t, `a[^bc]d`, RightToLeft, "aed", "Pass. Group[0]=(0,3)")
871	runRegexTrial(t, `a[^bc]d`, RightToLeft, "abd", "Fail.")
872	runRegexTrial(t, `a[^-b]c`, RightToLeft, "adc", "Pass. Group[0]=(0,3)")
873	runRegexTrial(t, `a[^-b]c`, RightToLeft, "a-c", "Fail.")
874	runRegexTrial(t, `a[^]b]c`, RightToLeft, "a]c", "Fail.")
875	runRegexTrial(t, `a[^]b]c`, RightToLeft, "adc", "Pass. Group[0]=(0,3)")
876	runRegexTrial(t, `\ba\b`, RightToLeft, "a-", "Pass. Group[0]=(0,1)")
877	runRegexTrial(t, `\ba\b`, RightToLeft, "-a", "Pass. Group[0]=(1,1)")
878	runRegexTrial(t, `\ba\b`, RightToLeft, "-a-", "Pass. Group[0]=(1,1)")
879	runRegexTrial(t, `\by\b`, RightToLeft, "xy", "Fail.")
880	runRegexTrial(t, `\by\b`, RightToLeft, "yz", "Fail.")
881	runRegexTrial(t, `\by\b`, RightToLeft, "xyz", "Fail.")
882	runRegexTrial(t, `\Ba\B`, RightToLeft, "a-", "Fail.")
883	runRegexTrial(t, `\Ba\B`, RightToLeft, "-a", "Fail.")
884	runRegexTrial(t, `\Ba\B`, RightToLeft, "-a-", "Fail.")
885	runRegexTrial(t, `\By\b`, RightToLeft, "xy", "Pass. Group[0]=(1,1)")
886	runRegexTrial(t, `\by\B`, RightToLeft, "yz", "Pass. Group[0]=(0,1)")
887	runRegexTrial(t, `\By\B`, RightToLeft, "xyz", "Pass. Group[0]=(1,1)")
888	runRegexTrial(t, `\w`, RightToLeft, "a", "Pass. Group[0]=(0,1)")
889	runRegexTrial(t, `\w`, RightToLeft, "-", "Fail.")
890	runRegexTrial(t, `\W`, RightToLeft, "a", "Fail.")
891	runRegexTrial(t, `\W`, RightToLeft, "-", "Pass. Group[0]=(0,1)")
892	runRegexTrial(t, `a\sb`, RightToLeft, "a b", "Pass. Group[0]=(0,3)")
893	runRegexTrial(t, `a\sb`, RightToLeft, "a-b", "Fail.")
894	runRegexTrial(t, `a\Sb`, RightToLeft, "a b", "Fail.")
895	runRegexTrial(t, `a\Sb`, RightToLeft, "a-b", "Pass. Group[0]=(0,3)")
896	runRegexTrial(t, `\d`, RightToLeft, "1", "Pass. Group[0]=(0,1)")
897	runRegexTrial(t, `\d`, RightToLeft, "-", "Fail.")
898	runRegexTrial(t, `\D`, RightToLeft, "1", "Fail.")
899	runRegexTrial(t, `\D`, RightToLeft, "-", "Pass. Group[0]=(0,1)")
900	runRegexTrial(t, `[\w]`, RightToLeft, "a", "Pass. Group[0]=(0,1)")
901	runRegexTrial(t, `[\w]`, RightToLeft, "-", "Fail.")
902	runRegexTrial(t, `[\W]`, RightToLeft, "a", "Fail.")
903	runRegexTrial(t, `[\W]`, RightToLeft, "-", "Pass. Group[0]=(0,1)")
904	runRegexTrial(t, `a[\s]b`, RightToLeft, "a b", "Pass. Group[0]=(0,3)")
905	runRegexTrial(t, `a[\s]b`, RightToLeft, "a-b", "Fail.")
906	runRegexTrial(t, `a[\S]b`, RightToLeft, "a b", "Fail.")
907	runRegexTrial(t, `a[\S]b`, RightToLeft, "a-b", "Pass. Group[0]=(0,3)")
908	runRegexTrial(t, `[\d]`, RightToLeft, "1", "Pass. Group[0]=(0,1)")
909	runRegexTrial(t, `[\d]`, RightToLeft, "-", "Fail.")
910	runRegexTrial(t, `[\D]`, RightToLeft, "1", "Fail.")
911	runRegexTrial(t, `[\D]`, RightToLeft, "-", "Pass. Group[0]=(0,1)")
912	runRegexTrial(t, `ab|cd`, RightToLeft, "abc", "Pass. Group[0]=(0,2)")
913	runRegexTrial(t, `ab|cd`, RightToLeft, "abcd", "Pass. Group[0]=(2,2)")
914	runRegexTrial(t, `()ef`, RightToLeft, "def", "Pass. Group[0]=(1,2) Group[1]=(1,0)")
915	runRegexTrial(t, `*a`, RightToLeft, "-", "Error.")
916	runRegexTrial(t, `(*)b`, RightToLeft, "-", "Error.")
917	runRegexTrial(t, `$b`, RightToLeft, "b", "Fail.")
918	runRegexTrial(t, `a\`, RightToLeft, "-", "Error.")
919	runRegexTrial(t, `a\(b`, RightToLeft, "a(b", "Pass. Group[0]=(0,3)")
920	runRegexTrial(t, `a\(*b`, RightToLeft, "ab", "Pass. Group[0]=(0,2)")
921	runRegexTrial(t, `a\(*b`, RightToLeft, "a((b", "Pass. Group[0]=(0,4)")
922	runRegexTrial(t, `a\\b`, RightToLeft, "a\\b", "Pass. Group[0]=(0,3)")
923	runRegexTrial(t, `abc)`, RightToLeft, "-", "Error.")
924	runRegexTrial(t, `(abc`, RightToLeft, "-", "Error.")
925	runRegexTrial(t, `((a))`, RightToLeft, "abc", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1)")
926	runRegexTrial(t, `(a)b(c)`, RightToLeft, "abc", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(2,1)")
927	runRegexTrial(t, `a+b+c`, RightToLeft, "aabbabc", "Pass. Group[0]=(4,3)")
928	runRegexTrial(t, `a{1,}b{1,}c`, RightToLeft, "aabbabc", "Pass. Group[0]=(4,3)")
929	runRegexTrial(t, `a**`, RightToLeft, "-", "Error.")
930	runRegexTrial(t, `a.+?c`, RightToLeft, "abcabc", "Pass. Group[0]=(3,3)")
931	runRegexTrial(t, `(a+|b)*`, RightToLeft, "ab", "Pass. Group[0]=(0,2) Group[1]=(1,1)(0,1)")
932	runRegexTrial(t, `(a+|b){0,}`, RightToLeft, "ab", "Pass. Group[0]=(0,2) Group[1]=(1,1)(0,1)")
933	runRegexTrial(t, `(a+|b)+`, RightToLeft, "ab", "Pass. Group[0]=(0,2) Group[1]=(1,1)(0,1)")
934	runRegexTrial(t, `(a+|b){1,}`, RightToLeft, "ab", "Pass. Group[0]=(0,2) Group[1]=(1,1)(0,1)")
935	runRegexTrial(t, `(a+|b)?`, RightToLeft, "ab", "Pass. Group[0]=(1,1) Group[1]=(1,1)")
936	runRegexTrial(t, `(a+|b){0,1}`, RightToLeft, "ab", "Pass. Group[0]=(1,1) Group[1]=(1,1)")
937	runRegexTrial(t, `)(`, RightToLeft, "-", "Error.")
938	runRegexTrial(t, `[^ab]*`, RightToLeft, "cde", "Pass. Group[0]=(0,3)")
939	runRegexTrial(t, `abc`, RightToLeft, "", "Fail.")
940	runRegexTrial(t, `a*`, RightToLeft, "", "Pass. Group[0]=(0,0)")
941	runRegexTrial(t, `([abc])*d`, RightToLeft, "abbbcd", "Pass. Group[0]=(0,6) Group[1]=(4,1)(3,1)(2,1)(1,1)(0,1)")
942	runRegexTrial(t, `([abc])*bcd`, RightToLeft, "abcd", "Pass. Group[0]=(0,4) Group[1]=(0,1)")
943	runRegexTrial(t, `a|b|c|d|e`, RightToLeft, "e", "Pass. Group[0]=(0,1)")
944	runRegexTrial(t, `(a|b|c|d|e)f`, RightToLeft, "ef", "Pass. Group[0]=(0,2) Group[1]=(0,1)")
945	runRegexTrial(t, `abcd*efg`, RightToLeft, "abcdefg", "Pass. Group[0]=(0,7)")
946	runRegexTrial(t, `ab*`, RightToLeft, "xabyabbbz", "Pass. Group[0]=(4,4)")
947	runRegexTrial(t, `ab*`, RightToLeft, "xayabbbz", "Pass. Group[0]=(3,4)")
948	runRegexTrial(t, `(ab|cd)e`, RightToLeft, "abcde", "Pass. Group[0]=(2,3) Group[1]=(2,2)")
949	runRegexTrial(t, `[abhgefdc]ij`, RightToLeft, "hij", "Pass. Group[0]=(0,3)")
950	runRegexTrial(t, `^(ab|cd)e`, RightToLeft, "abcde", "Fail.")
951	runRegexTrial(t, `(abc|)ef`, RightToLeft, "abcdef", "Pass. Group[0]=(4,2) Group[1]=(4,0)")
952	runRegexTrial(t, `(a|b)c*d`, RightToLeft, "abcd", "Pass. Group[0]=(1,3) Group[1]=(1,1)")
953	runRegexTrial(t, `(ab|ab*)bc`, RightToLeft, "abc", "Pass. Group[0]=(0,3) Group[1]=(0,1)")
954	runRegexTrial(t, `a([bc]*)c*`, RightToLeft, "abc", "Pass. Group[0]=(0,3) Group[1]=(1,1)")
955	runRegexTrial(t, `a([bc]*)(c*d)`, RightToLeft, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,1) Group[2]=(2,2)")
956	runRegexTrial(t, `a([bc]+)(c*d)`, RightToLeft, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,1) Group[2]=(2,2)")
957	runRegexTrial(t, `a([bc]*)(c+d)`, RightToLeft, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,1) Group[2]=(2,2)")
958	runRegexTrial(t, `a[bcd]*dcdcde`, RightToLeft, "adcdcde", "Pass. Group[0]=(0,7)")
959	runRegexTrial(t, `a[bcd]+dcdcde`, RightToLeft, "adcdcde", "Fail.")
960	runRegexTrial(t, `(ab|a)b*c`, RightToLeft, "abc", "Pass. Group[0]=(0,3) Group[1]=(0,1)")
961	runRegexTrial(t, `((a)(b)c)(d)`, RightToLeft, "abcd", "Pass. Group[0]=(0,4) Group[1]=(0,3) Group[2]=(0,1) Group[3]=(1,1) Group[4]=(3,1)")
962	runRegexTrial(t, `[a-zA-Z_][a-zA-Z0-9_]*`, RightToLeft, "alpha", "Pass. Group[0]=(0,5)")
963	runRegexTrial(t, `^a(bc+|b[eh])g|.h$`, RightToLeft, "abh", "Pass. Group[0]=(1,2) Group[1]=")
964	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, RightToLeft, "effgz", "Pass. Group[0]=(0,5) Group[1]=(0,5) Group[2]=")
965	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, RightToLeft, "ij", "Pass. Group[0]=(0,2) Group[1]=(0,2) Group[2]=(1,1)")
966	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, RightToLeft, "effg", "Fail.")
967	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, RightToLeft, "bcdd", "Fail.")
968	runRegexTrial(t, `(bc+d$|ef*g.|h?i(j|k))`, RightToLeft, "reffgz", "Pass. Group[0]=(1,5) Group[1]=(1,5) Group[2]=")
969	runRegexTrial(t, `((((((((((a))))))))))`, RightToLeft, "a", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
970	runRegexTrial(t, `((((((((((a))))))))))\10`, RightToLeft, "aa", "Fail.")
971	runRegexTrial(t, `\10((((((((((a))))))))))`, RightToLeft, "aa", "Pass. Group[0]=(0,2) Group[1]=(1,1) Group[2]=(1,1) Group[3]=(1,1) Group[4]=(1,1) Group[5]=(1,1) Group[6]=(1,1) Group[7]=(1,1) Group[8]=(1,1) Group[9]=(1,1) Group[10]=(1,1)")
972	runRegexTrial(t, `((((((((((a))))))))))!`, RightToLeft, "aa", "Fail.")
973	runRegexTrial(t, `((((((((((a))))))))))!`, RightToLeft, "a!", "Pass. Group[0]=(0,2) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1) Group[10]=(0,1)")
974	runRegexTrial(t, `(((((((((a)))))))))`, RightToLeft, "a", "Pass. Group[0]=(0,1) Group[1]=(0,1) Group[2]=(0,1) Group[3]=(0,1) Group[4]=(0,1) Group[5]=(0,1) Group[6]=(0,1) Group[7]=(0,1) Group[8]=(0,1) Group[9]=(0,1)")
975	runRegexTrial(t, `multiple words of text`, RightToLeft, "uh-uh", "Fail.")
976	runRegexTrial(t, `multiple words`, RightToLeft, "multiple words, yeah", "Pass. Group[0]=(0,14)")
977	runRegexTrial(t, `(.*)c(.*)`, RightToLeft, "abcde", "Pass. Group[0]=(0,5) Group[1]=(0,2) Group[2]=(3,2)")
978	runRegexTrial(t, `\((.*), (.*)\)`, RightToLeft, "(a, b)", "Pass. Group[0]=(0,6) Group[1]=(1,1) Group[2]=(4,1)")
979	runRegexTrial(t, `[k]`, RightToLeft, "ab", "Fail.")
980	runRegexTrial(t, `abcd`, RightToLeft, "abcd", "Pass. Group[0]=(0,4)")
981	runRegexTrial(t, `a(bc)d`, RightToLeft, "abcd", "Pass. Group[0]=(0,4) Group[1]=(1,2)")
982	runRegexTrial(t, `a[-]?c`, RightToLeft, "ac", "Pass. Group[0]=(0,2)")
983	runRegexTrial(t, `(abc)\1`, RightToLeft, "abcabc", "Fail.")
984	runRegexTrial(t, `\1(abc)`, RightToLeft, "abcabc", "Pass. Group[0]=(0,6) Group[1]=(3,3)")
985	runRegexTrial(t, `([a-c]*)\1`, RightToLeft, "abcabc", "Fail.")
986	runRegexTrial(t, `\1([a-c]*)`, RightToLeft, "abcabc", "Pass. Group[0]=(0,6) Group[1]=(3,3)")
987	runRegexTrial(t, `\1`, RightToLeft, "-", "Error.")
988	runRegexTrial(t, `\2`, RightToLeft, "-", "Error.")
989	runRegexTrial(t, `(a)|\1`, RightToLeft, "a", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
990	runRegexTrial(t, `(a)|\1`, RightToLeft, "x", "Fail.")
991	runRegexTrial(t, `(a)|\2`, RightToLeft, "-", "Error.")
992	runRegexTrial(t, `(([a-c])b*?\2)*`, RightToLeft, "ababbbcbc", "Pass. Group[0]=(9,0) Group[1]= Group[2]=")
993	runRegexTrial(t, `(([a-c])b*?\2){3}`, RightToLeft, "ababbbcbc", "Fail.")
994	runRegexTrial(t, `((\3|b)\2(a)x)+`, RightToLeft, "aaxabxbaxbbx", "Fail.")
995	runRegexTrial(t, `((\3|b)\2(a)x)+`, RightToLeft, "aaaxabaxbaaxbbax", "Fail.")
996	runRegexTrial(t, `((\3|b)\2(a)){2,}`, RightToLeft, "bbaababbabaaaaabbaaaabba", "Fail.")
997
998	runRegexTrial(t, `\((?>[^()]+|\((?<depth>)|\)(?<-depth>))*(?(depth)(?!))\)`, 0, "((a(b))c)", "Pass. Group[0]=(0,9) Group[1]=")
999	runRegexTrial(t, `^\((?>[^()]+|\((?<depth>)|\)(?<-depth>))*(?(depth)(?!))\)$`, 0, "((a(b))c)", "Pass. Group[0]=(0,9) Group[1]=")
1000	runRegexTrial(t, `^\((?>[^()]+|\((?<depth>)|\)(?<-depth>))*(?(depth)(?!))\)$`, 0, "((a(b))c", "Fail.")
1001
1002	runRegexTrial(t, `^\((?>[^()]+|\((?<depth>)|\)(?<-depth>))*(?(depth)(?!))\)$`, 0, "())", "Fail.")
1003
1004	runRegexTrial(t, `(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))`, 0, "((a(b))c)",
1005		"Pass. Group[0]=(0,9) Group[1]=(0,9) Group[2]=(0,1)(1,2)(3,2) Group[3]=(5,1)(6,2)(8,1) Group[4]= Group[5]=(4,1)(2,4)(1,7)")
1006	runRegexTrial(t, `^(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))$`, 0, "((a(b))c)",
1007		"Pass. Group[0]=(0,9) Group[1]=(0,9) Group[2]=(0,1)(1,2)(3,2) Group[3]=(5,1)(6,2)(8,1) Group[4]= Group[5]=(4,1)(2,4)(1,7)")
1008	runRegexTrial(t, `(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))`, 0, "x(a((b)))b)x",
1009		"Pass. Group[0]=(1,9) Group[1]=(1,9) Group[2]=(1,2)(3,1)(4,2) Group[3]=(6,1)(7,1)(8,2) Group[4]= Group[5]=(5,1)(4,3)(2,6)")
1010	runRegexTrial(t, `(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))`, 0, "x((a((b)))x",
1011		"Pass. Group[0]=(2,9) Group[1]=(2,9) Group[2]=(2,2)(4,1)(5,2) Group[3]=(7,1)(8,1)(9,2) Group[4]= Group[5]=(6,1)(5,3)(3,6)")
1012	runRegexTrial(t, `^(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))$`, 0, "((a(b))c", "Fail.")
1013	runRegexTrial(t, `^(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))$`, 0, "((a(b))c))", "Fail.")
1014	runRegexTrial(t, `^(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))$`, 0, ")(", "Fail.")
1015	runRegexTrial(t, `^(((?<foo>\()[^()]*)+((?<bar-foo>\))[^()]*)+)+(?(foo)(?!))$`, 0, "((a((b))c)", "Fail.")
1016
1017	runRegexTrial(t, `b`, RightToLeft, "babaaa", "Pass. Group[0]=(2,1)")
1018
1019	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[n]", "Pass. Group[0]=(0,3) Group[1]=(1,1)")
1020	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "n", "Pass. Group[0]=(0,1) Group[1]=(0,1)")
1021	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "n[i]e", "Fail.")
1022	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[n", "Fail.")
1023	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "]n]", "Fail.")
1024	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, `\[n\]`, "Fail.")
1025	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, `[n\]`, "Pass. Group[0]=(0,4) Group[1]=(1,2)")
1026	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, `[n\[]`, "Pass. Group[0]=(0,5) Group[1]=(1,3)")
1027	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, `[[n]`, "Pass. Group[0]=(0,4) Group[1]=(1,2)")
1028	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[s] . [n]", "Pass. Group[0]=(0,9) Group[1]=(1,1) Group[2]=(7,1)")
1029	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[s] . n", "Pass. Group[0]=(0,7) Group[1]=(1,1) Group[2]=(6,1)")
1030	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "s.[ n ]", "Pass. Group[0]=(0,7) Group[1]=(0,1) Group[2]=(3,3)")
1031	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, " . n", "Pass. Group[0]=(0,4) Group[1]=(0,1) Group[2]=(3,1)")
1032	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "s. ", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(2,1)")
1033	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[.]. ", "Pass. Group[0]=(0,5) Group[1]=(1,1) Group[2]=(4,1)")
1034	runRegexTrial(t, `^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[c].[s].[n]", "Pass. Group[0]=(0,11) Group[1]=(1,1) Group[2]=(5,1) Group[3]=(9,1)")
1035	runRegexTrial(t, `^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, " c . s . n ", "Pass. Group[0]=(0,11) Group[1]=(0,3) Group[2]=(5,2) Group[3]=(9,2)")
1036	runRegexTrial(t, `^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, " . [.] . [ ]", "Pass. Group[0]=(0,12) Group[1]=(0,1) Group[2]=(4,1) Group[3]=(10,1)")
1037	runRegexTrial(t, `^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "c.n", "Pass. Group[0]=(0,3) Group[1]=(0,1) Group[2]=(2,1)")
1038	runRegexTrial(t, `^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[c] .[n]", "Pass. Group[0]=(0,8) Group[1]=(1,1) Group[2]=(6,1)")
1039	runRegexTrial(t, `^((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "c.n.", "Fail.")
1040	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "s.c.n", "Pass. Group[0]=(0,5) Group[1]=(0,1) Group[2]=(2,1) Group[3]=(4,1)")
1041	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[s].[c].[n]", "Pass. Group[0]=(0,11) Group[1]=(1,1) Group[2]=(5,1) Group[3]=(9,1)")
1042	runRegexTrial(t, `^((\[(?<SCHEMA>[^\]]+)\])|(?<SCHEMA>[^\.\[\]]+))\s*\.\s*((\[(?<CATALOG>[^\]]+)\])|(?<CATALOG>[^\.\[\]]+))\s*\.\s*((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, Compiled|IgnoreCase|ExplicitCapture, "[s].[c].", "Fail.")
1043	runRegexTrial(t, `^((\[(?<ColName>.+)\])|(?<ColName>\S+))([ ]+(?<Order>ASC|DESC))?$`, IgnoreCase|ExplicitCapture, "[id]]", "Pass. Group[0]=(0,5) Group[1]=(1,3) Group[2]=")
1044	runRegexTrial(t, `a{1,2147483647}`, 0, "a", "Pass. Group[0]=(0,1)")
1045	runRegexTrial(t, `^((\[(?<NAME>[^\]]+)\])|(?<NAME>[^\.\[\]]+))$`, 0, "[a]", "Pass. Group[0]=(0,3) Group[1]=(0,3) Group[2]=(0,3) Group[3]=(1,1)")
1046
1047}
1048
1049func runRegexTrial(t *testing.T, pattern string, options RegexOptions, input, expected string) {
1050	result := ""
1051
1052	re, err := Compile(pattern, options)
1053	if err != nil {
1054		if expected != "Error." {
1055			t.Errorf("Compiling pattern '%v' with options '%v' -- expected '%v' got '%v'", pattern, options, expected, err.Error())
1056		}
1057		return
1058	}
1059
1060	groupNums := re.GetGroupNumbers()
1061	m, err := re.FindStringMatch(input)
1062	if err != nil {
1063		result = fmt.Sprintf("Error. %v", err.Error())
1064	} else if m != nil {
1065		result = "Pass."
1066		for i, group := range m.Groups() {
1067			gid := groupNums[i]
1068
1069			result += fmt.Sprintf(" Group[%v]=", gid)
1070			for _, cp := range group.Captures {
1071				result += fmt.Sprintf("(%v,%v)", cp.Index, cp.Length)
1072			}
1073		}
1074	} else {
1075		result = "Fail."
1076	}
1077
1078	if expected != result {
1079		t.Errorf("Matching input '%v' against pattern '%v' with options '%v' -- expected '%v' got '%v'", input, pattern, options, expected, result)
1080	}
1081}
1082