...

Source file src/github.com/dlclark/regexp2/regexp_mono_test.go

Documentation: github.com/dlclark/regexp2

     1  package regexp2
     2  
     3  import (
     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  
    30  func 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  
  1049  func 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  

View as plain text