diff --git a/Text/Regex/PCRE/Light.hs b/Text/Regex/PCRE/Light.hs
--- a/Text/Regex/PCRE/Light.hs
+++ b/Text/Regex/PCRE/Light.hs
@@ -1,14 +1,13 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE CPP #-}
 --------------------------------------------------------------------
 -- |
--- Module    : Text.Regex.PCRE.Light
--- Copyright:  Copyright (c) 2006, Christopher Kuklewicz
---             Copyright (c) 2007, Don Stewart
--- License   : BSD3
+-- Module   : Text.Regex.PCRE.Light
+-- Copyright: Copyright (c) 2007-2008, Don Stewart
+-- License  : BSD3
 --
 -- Maintainer:  Don Stewart <dons@galois.com>
 -- Stability :  experimental
--- Portability: H98 + FFI
+-- Portability: H98 + CPP
 --
 --------------------------------------------------------------------
 -- 
@@ -22,7 +21,7 @@
           Regex
 
         -- * ByteString interface
-        , compile
+        , compile, compileM
         , match
 
         -- * Regex types and constructors externally visible
@@ -72,9 +71,14 @@
 import Text.Regex.PCRE.Light.Base
 
 -- Strings
+import qualified Data.ByteString          as S
+
+#if __GLASGOW_HASKELL__ >= 608
 import qualified Data.ByteString.Internal as S
 import qualified Data.ByteString.Unsafe   as S
-import qualified Data.ByteString          as S
+#else
+import qualified Data.ByteString.Base     as S
+#endif
 
 import Control.Monad
 
@@ -84,24 +88,24 @@
 import Foreign.C.Types
 import Foreign.C.String
 import Foreign.Storable
+import Foreign.Marshal.Alloc
 
 -- | 'compile'
 --
--- Compile a perl-compatible regular expression, in a strict bytestring.
+-- Compile a perl-compatible regular expression stored in a strict bytestring.
 --
 -- An example
 --
--- > let Right r = compile (pack "^(b+|a){1,2}?bc") []
+-- > let r = compile (pack "^(b+|a){1,2}?bc") []
 --
 -- Or using GHC's -XOverloadedStrings flag, and importing
 -- Data.ByteString.Char8, we can avoid the pack:
 --
--- > let Right r = compile "^(b+|a){1,2}?bc" []
---
--- If the regular expression is invalid, Left is returned,
+-- > let r = compile "^(b+|a){1,2}?bc" []
 --
--- > > compile "*" []
--- > Left "nothing to repeat"
+-- If the regular expression is invalid, an exception is thrown.
+-- If this is unsuitable, 'compileM' is availlable, which returns failure 
+-- in a monad.
 --
 -- To do case insentive matching,
 --
@@ -162,32 +166,50 @@
 --
 -- * 'no_utf8_check'   - Do not check the pattern for UTF-8 validity
 --
--- If compilation of the pattern fails, the 'Left' constructor is 
--- returned with the error string. Otherwise an abstract type
--- representing the compiled regular expression is returned.
 -- The regex is allocated via malloc on the C side, and will be
 -- deallocated by the runtime when the Haskell value representing it
 -- goes out of scope.
 --
--- See man pcreapi for more details.
+-- See 'man pcreapi for more details.
 --
 -- Caveats: patterns with embedded nulls, such as "\0*" seem to be
 -- mishandled, as this won't currently match the subject "\0\0\0".
 --
--- Possible improvements: an 'IsString' instance could be defined
--- for 'Regex', which would allow the compiler to insert calls to
--- 'compile' based on the type:
+compile :: S.ByteString -> [PCREOption] -> Regex
+compile s o = case compileM s o of
+    Just  r -> r
+    Nothing -> error ("Text.Regex.PCRE.Light: Error in regex: " ++ show s)
+
+------------------------------------------------------------------------
+
+-- | 'compileM'
+-- A generic version of 'compile' with failure lifted into an arbitrary monad.
 --
--- The following would be valid:
+-- Examples, illustrating how failure can be propagated to an IO exception, 
+-- or tagged as 'Nothing':
 --
--- > match "a.*b" "abcdef" []
+-- > > compileM ".*" [] :: Maybe Regex
+-- > Just (Regex 0x000000004bb5b540 ".*")
 --
--- and equivalent to:
+-- > > compileM "*" [] :: Maybe Regex
+-- > Nothing
 --
--- > match (either error id (compile "a.*b")) "abcdef" []
+-- > > compileM "*" [] :: IO Regex
+-- > *** Exception: user error (nothing to repeat)
 --
-compile :: S.ByteString -> [PCREOption] -> Either String Regex
-compile str os = unsafePerformIO $
+-- > > compileM ".*" [] :: IO Regex
+-- > Regex 0x000000004bb5b780 ".*"
+--
+-- > > :m + Control.Monad.Error
+--
+-- > > compileM ".*" [] :: Either String Regex
+-- > Right (Regex 0x000000004bb5b980 ".*")
+--
+-- > > compileM "*" [] :: Either String Regex
+-- > Left "nothing to repeat"
+--
+compileM :: Monad m => S.ByteString -> [PCREOption] -> m Regex
+compileM str os = unsafePerformIO $
   S.useAsCString str $ \pattern -> do
     alloca $ \errptr       -> do
     alloca $ \erroffset    -> do
@@ -195,11 +217,23 @@
         if pcre_ptr == nullPtr
             then do
                 err <- peekCString =<< peek errptr
-                return (Left err)
+                return (fail err)
             else do
-                reg <- newForeignPtr c_free pcre_ptr -- release with free()
-                return (Right (Regex reg))
+                reg <- newForeignPtr finalizerFree pcre_ptr -- release with free()
+                return (return (Regex reg str))
 
+-- Possible improvements: an 'IsString' instance could be defined
+-- for 'Regex', which would allow the compiler to insert calls to
+-- 'compile' based on the type:
+--
+-- The following would be valid:
+--
+-- > match "a.*b" "abcdef" []
+--
+-- and equivalent to:
+--
+-- > match (either error id (compile "a.*b")) "abcdef" []
+
 -- | 'match'
 --
 -- Matches a compiled regular expression against a given subject string,
@@ -245,7 +279,7 @@
 -- is returned.
 --
 match :: Regex -> S.ByteString -> [PCREExecOption] -> Maybe [S.ByteString]
-match (Regex pcre_fp) subject os = unsafePerformIO $ do
+match (Regex pcre_fp _) subject os = unsafePerformIO $ do
   withForeignPtr pcre_fp $ \pcre_ptr -> do
     n_capt <- capturedCount pcre_ptr
 
@@ -310,7 +344,3 @@
         alloca $ \n_ptr -> do -- (st :: Ptr CInt)
              c_pcre_fullinfo regex_ptr nullPtr info_capturecount n_ptr
              return . fromIntegral =<< peek (n_ptr :: Ptr CInt)
-
-foreign import ccall unsafe "&free"
-    c_free :: FinalizerPtr a -- FunPtr (Ptr a -> IO ())
-
diff --git a/Text/Regex/PCRE/Light/Base.hsc b/Text/Regex/PCRE/Light/Base.hsc
--- a/Text/Regex/PCRE/Light/Base.hsc
+++ b/Text/Regex/PCRE/Light/Base.hsc
@@ -1,16 +1,16 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, DeriveDataTypeable #-}
+{-# LANGUAGE CPP, ForeignFunctionInterface, GeneralizedNewtypeDeriving #-}
 --------------------------------------------------------------------
 -- |
--- Module    : Text.Regex.PCRE.Light.Base
--- Copyright:  Copyright (c) 2006, Christopher Kuklewicz
---             Copyright (c) 2007, Don Stewart
+-- Module   : Text.Regex.PCRE.Light.Base
+-- Copyright: Copyright (c) 2007-2008, Don Stewart
 --
 -- Documentation based on /man pcreapi/, written by Philip Hazel, 2007.
 --
 -- License   : BSD3
 -- Maintainer:  Don Stewart <dons@galois.com>
 -- Stability :  experimental
--- Portability: CPP, FFI, newtype deriving, deriving Data, deriving Typeable
+-- Portability: CPP, FFI
+-- Tested with: GHC 6.8.2
 --
 -- Raw FFI bindings to PCRE functions and constants. 
 --
@@ -98,9 +98,7 @@
 import Foreign.C.Types
 import Foreign.C.String
 
-#if __GLASGOW_HASKELL__
-import Data.Generics
-#endif
+import qualified Data.ByteString.Char8 as S
 
 #include <pcre.h>
 
@@ -115,13 +113,8 @@
 -- The structure allocated by the PCRE library will be deallocated
 -- automatically by the Haskell storage manager.
 --
-newtype Regex = Regex (ForeignPtr PCRE)
-
-#if __GLASGOW_HASKELL__
-        deriving (Eq, Ord, Show, Typeable, Data)
-#else
+data Regex = Regex !(ForeignPtr PCRE) !S.ByteString
         deriving (Eq, Ord, Show)
-#endif
 
 type PCRE = ()
 
diff --git a/Text/Regex/PCRE/Light/Char8.hs b/Text/Regex/PCRE/Light/Char8.hs
--- a/Text/Regex/PCRE/Light/Char8.hs
+++ b/Text/Regex/PCRE/Light/Char8.hs
@@ -1,7 +1,7 @@
 --------------------------------------------------------------------
 -- |
 -- Module   : Text.Regex.PCRE.Light.Char8
--- Copyright: Copyright (c) 2007, Don Stewart
+-- Copyright: Copyright (c) 2007-2008, Don Stewart
 -- License  : BSD3
 --
 -- Maintainer:  Don Stewart <dons@galois.com>
@@ -20,7 +20,7 @@
           Regex
 
         -- * String interface
-        , compile
+        , compile, compileM
         , match
 
         -- * Regex types and constructors externally visible
@@ -69,7 +69,7 @@
 
 import qualified Data.ByteString.Char8 as S
 import qualified Text.Regex.PCRE.Light as S
-import Text.Regex.PCRE.Light hiding (match, compile)
+import Text.Regex.PCRE.Light hiding (match, compile, compileM)
 
 -- | 'compile'
 --
@@ -138,9 +138,15 @@
 --
 -- See man pcreapi for more details.
 --
-compile :: String -> [PCREOption] -> Either String Regex
+compile :: String -> [PCREOption] -> Regex
 compile str os = S.compile (S.pack str) os
 {-# INLINE compile #-}
+
+-- | 'compileM'
+-- A generic version of 'compile' with failure lifted into an arbitrary monad.
+compileM :: Monad m => String -> [PCREOption] -> m Regex
+compileM str os = S.compileM (S.pack str) os
+{-# INLINE compileM #-}
 
 
 -- | 'match'
diff --git a/pcre-light.cabal b/pcre-light.cabal
--- a/pcre-light.cabal
+++ b/pcre-light.cabal
@@ -1,9 +1,9 @@
 name:            pcre-light
-version:         0.1
+version:         0.2
 homepage:        http://code.haskell.org/~dons/code/pcre-light
-synopsis:        A lightweight binding to PCRE
+synopsis:        A small, efficient and portable regex library for Perl 5 compatible regular expressions
 description:
-    A lightweight binding to PCRE
+    A small, efficient and portable regex library for Perl 5 compatible regular expressions
     .
     The PCRE library is a set of functions that implement regular
     expression pattern matching using the same syntax and semantics as Perl 5.
@@ -19,8 +19,9 @@
 maintainer:      Don Stewart <dons@galois.com>
 cabal-version: >= 1.2.0
 build-type:      Configure
+tested-with:     GHC ==6.8.2, GHC ==6.6.1, Hugs ==2005
 
-flag new-base
+flag small_base
   description: Build with new smaller base library
   default:     False
 
@@ -32,5 +33,9 @@
     extensions:      CPP, ForeignFunctionInterface
     ghc-options:     -Wall -O2 -fvia-C
 
-    build-depends: base >= 3, bytestring >= 0.9
+    if flag(small_base)
+        build-depends: base >= 3, bytestring >= 0.9
+    else
+        build-depends: base < 3
+
     extra-libraries: pcre
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644
--- /dev/null
+++ b/tests/Makefile
@@ -0,0 +1,11 @@
+all:
+	ghc -Onot -fasm Unit.hs --make && ./Unit
+#	runhaskell Unit.hs && echo $$?
+
+test::
+	ghc -fhpc --make -i.. Unit.hs -o Unit -O2 -no-recomp
+	rm -f *.tix
+	./Unit 
+	hpc report --decl-list       --exclude=Main Unit
+	hpc markup --fun-entry-count --exclude=Main Unit
+
diff --git a/tests/Unit.hs b/tests/Unit.hs
--- a/tests/Unit.hs
+++ b/tests/Unit.hs
@@ -13,1324 +13,4432 @@
 import Data.Either
 import qualified Data.Map as M
 
-testRegex :: S.ByteString
-     -> [PCREOption]
-     -> [S.ByteString]
-     -> [Maybe [S.ByteString]]
-     -> Test
-
-testRegex regex options inputs outputs = TestLabel (S.unpack regex) $
-  TestCase $ do
-     assertEqual "Input/Output Length Check" (length inputs) (length outputs)
-
-     assertBool "ByteString regex" =<<
-      case compile regex options of
-        Left  s -> do hPutStrLn stderr ("ERROR in ByteString: "++ show s)
-                      return False
-        Right r -> return $
-            and [ match r i [] == o
-                | (i,o) <- zip inputs outputs ]
-
-     assertBool "String regex" =<<
-      case String.compile (S.unpack regex) options of
-        Left  s -> do hPutStrLn stderr ("ERROR in String: "++ show s)
-                      return False
-        Right r -> return $
-            and [ String.match r i [] == o
-                | (i,o) <- zip (map (S.unpack) inputs)
-                               (map (fmap (map S.unpack)) outputs) ]
-
-main = do counts <- runTestTT tests
-          when (errors counts > 0 || failures counts > 0) exitFailure
-
-tests = TestList
-
-    [ testRegex "the quick brown fox" []
-           [ "the quick brown fox"
-           , "The quick brown FOX"
-           , "What do you know about the quick brown fox?"
-           , "What do you know about THE QUICK BROWN FOX?"
-           ]
-           [ Just ["the quick brown fox"]
-           , Nothing
-           , Just ["the quick brown fox"]
-           , Nothing
-           ]
-
---  , testRegex "\0*" [] -- the embedded null in the pattern seems to be a problem
---      ["\0\0\0\0"]
---      [Just ["\0\0\0\0"]]
-
-    , testRegex "\1*" [] -- the embedded null in the pattern seems to be a problem
-        ["\1\1\1\1"]
-        [Just ["\1\1\1\1"]]
-
-    , testRegex "The quick brown fox" [caseless]
-           ["the quick brown fox"
-           ,"The quick brown FOX"
-           ,"What do you know about the quick brown fox?"
-           ,"What do you know about THE QUICK BROWN FOX?"
-           ]
-           [ Just ["the quick brown fox"]
-           , Just ["The quick brown FOX"]
-           , Just ["the quick brown fox"]
-           , Just ["THE QUICK BROWN FOX"]
-           ]
-
-     , testRegex "a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" []
-           ["abxyzpqrrrabbxyyyypqAzz"
-           ,"abxyzpqrrrabbxyyyypqAzz"
-           ,"aabxyzpqrrrabbxyyyypqAzz"
-           ,"aaabxyzpqrrrabbxyyyypqAzz"
-           ,"aaaabxyzpqrrrabbxyyyypqAzz"
-           ,"abcxyzpqrrrabbxyyyypqAzz"
-           ,"aabcxyzpqrrrabbxyyyypqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqqqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqqqqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqqqqqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqqqqqqAzz"
-           ,"aaaabcxyzpqrrrabbxyyyypqAzz"
-           ,"abxyzzpqrrrabbxyyyypqAzz"
-           ,"aabxyzzzpqrrrabbxyyyypqAzz"
-           ,"aaabxyzzzzpqrrrabbxyyyypqAzz"
-           ,"aaaabxyzzzzpqrrrabbxyyyypqAzz"
-           ,"abcxyzzpqrrrabbxyyyypqAzz"
-           ,"aabcxyzzzpqrrrabbxyyyypqAzz"
-           ,"aaabcxyzzzzpqrrrabbxyyyypqAzz"
-           ,"aaaabcxyzzzzpqrrrabbxyyyypqAzz"
-           ,"aaaabcxyzzzzpqrrrabbbxyyyypqAzz"
-           ,"aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypABzz"
-           ,"aaabcxyzpqrrrabbxyyyypABBzz"
-           ,">>>aaabxyzpqrrrabbxyyyypqAzz"
-           ,">aaaabxyzpqrrrabbxyyyypqAzz"
-           ,">>>>abcxyzpqrrrabbxyyyypqAzz"
-           ,"abxyzpqrrabbxyyyypqAzz"
-           ,"abxyzpqrrrrabbxyyyypqAzz"
-           ,"abxyzpqrrrabxyyyypqAzz"
-           ,"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz"
-           ,"aaaabcxyzzzzpqrrrabbbxyyypqAzz"
-           ,"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz"
-           ]
-
-           [ Just ["abxyzpqrrrabbxyyyypqAzz"]
-           , Just ["abxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aabxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aaabxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aaaabxyzpqrrrabbxyyyypqAzz"]
-           , Just ["abcxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aabcxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypqqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypqqqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypqqqqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypqqqqqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypqqqqqqAzz"]
-           , Just ["aaaabcxyzpqrrrabbxyyyypqAzz"]
-           , Just ["abxyzzpqrrrabbxyyyypqAzz"]
-           , Just ["aabxyzzzpqrrrabbxyyyypqAzz"]
-           , Just ["aaabxyzzzzpqrrrabbxyyyypqAzz"]
-           , Just ["aaaabxyzzzzpqrrrabbxyyyypqAzz"]
-           , Just ["abcxyzzpqrrrabbxyyyypqAzz"]
-           , Just ["aabcxyzzzpqrrrabbxyyyypqAzz"]
-           , Just ["aaabcxyzzzzpqrrrabbxyyyypqAzz"]
-           , Just ["aaaabcxyzzzzpqrrrabbxyyyypqAzz"]
-           , Just ["aaaabcxyzzzzpqrrrabbbxyyyypqAzz"]
-           , Just ["aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypABzz"]
-           , Just ["aaabcxyzpqrrrabbxyyyypABBzz"]
-           , Just ["aaabxyzpqrrrabbxyyyypqAzz"]
-           , Just ["aaaabxyzpqrrrabbxyyyypqAzz"]
-           , Just ["abcxyzpqrrrabbxyyyypqAzz"]
-           , Nothing
-           , Nothing
-           , Nothing
-           , Nothing
-           , Nothing
-           , Nothing
-           ]
-
-    , testRegex "^(abc){1,2}zz" []
-        ["abczz"
-        ,"abcabczz"
-        ,"zz"
-        ,"abcabcabczz"
-        ,">>abczz"]
-        [ Just ["abczz","abc"]
-        , Just ["abcabczz", "abc"]
-        , Nothing
-        , Nothing
-        , Nothing ]
-
-    , testRegex "^(b+?|a){1,2}?c" []
-        ["bc",
-         "bbc",
-         "bbbc",
-         "bac",
-         "bbac",
-         "aac",
-         "abbbbbbbbbbbc",
-         "bbbbbbbbbbbac",
-         "aaac",
-         "abbbbbbbbbbbac"]
-
-        [Just ["bc", "b"],
-         Just ["bbc", "b"],
-         Just ["bbbc", "bb"],
-         Just ["bac", "a"],
-         Just ["bbac", "a"],
-         Just ["aac", "a"],
-         Just ["abbbbbbbbbbbc", "bbbbbbbbbbb"],
-         Just ["bbbbbbbbbbbac", "a"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^(b+|a){1,2}c" []
-        ["bc",
-         "bbc",
-         "bbbc",
-         "bac",
-         "bbac",
-         "aac",
-         "abbbbbbbbbbbc",
-         "bbbbbbbbbbbac",
-         "aaac",
-         "abbbbbbbbbbbac"]
-        [Just ["bc", "b"],
-         Just ["bbc", "bb"],
-         Just ["bbbc", "bbb"],
-         Just ["bac", "a"],
-         Just ["bbac", "a"],
-         Just ["aac", "a"],
-         Just ["abbbbbbbbbbbc", "bbbbbbbbbbb"],
-         Just ["bbbbbbbbbbbac", "a"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^(b+|a){1,2}?bc" []
-        ["bbc"]
-        [Just ["bbc", "b"]]
-
-    , testRegex "^(b*|ba){1,2}?bc" []
-        ["babc",
-         "bbabc",
-         "bababc",
-         "bababbc",
-         "babababc"]
-        [Just ["babc","ba"],
-         Just ["bbabc","ba"],
-         Just ["bababc","ba"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^(ba|b*){1,2}?bc" []
-        ["babc",
-         "bbabc",
-         "bababc",
-         "bababbc",
-         "babababc"]
-        [Just ["babc","ba"],
-         Just ["bbabc","ba"],
-         Just ["bababc","ba"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^[ab\\]cde]" []
-        ["athing",
-         "bthing",
-         "]thing",
-         "cthing",
-         "dthing",
-         "ething",
-         "fthing",
-         "[thing",
-         "\\\\thing"]
-        [Just ["a"],
-         Just ["b"],
-         Just ["]"],
-         Just ["c"],
-         Just ["d"],
-         Just ["e"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^[]cde]" []
-        ["]thing",
-         "cthing",
-         "dthing",
-         "ething",
-         "athing",
-         "fthing"]
-        [Just ["]"],
-         Just ["c"],
-         Just ["d"],
-         Just ["e"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^[^ab\\]cde]" []
-        ["fthing",
-         "[thing",
-         "\\\\thing",
-         "athing",
-         "bthing",
-         "]thing",
-         "cthing",
-         "dthing",
-         "ething"]
-        [Just ["f"],
-         Just ["["],
-         Just ["\\"],
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^\129" []
-        ["\129"]
-        [Just ["\x81"]]
-
-    , testRegex "^\255" []
-        ["\255"]
-        [Just ["\xff"]]
-
-    , testRegex "^[0-9]+$" []
-        ["0",
-         "1",
-         "2",
-         "3",
-         "4",
-         "5",
-         "6",
-         "7",
-         "8",
-         "9",
-         "10",
-         "100",
-         "abc"]
-        [Just ["0"],
-         Just ["1"],
-         Just ["2"],
-         Just ["3"],
-         Just ["4"],
-         Just ["5"],
-         Just ["6"],
-         Just ["7"],
-         Just ["8"],
-         Just ["9"],
-         Just ["10"],
-         Just ["100"],
-         Nothing]
-
-    , testRegex "^.*nter" []
-        ["enter",
-         "inter",
-         "uponter"]
-        [Just ["enter"],
-         Just ["inter"],
-         Just ["uponter"]]
-
-    , testRegex "^xxx[0-9]+$" []
-        ["xxx0",
-         "xxx1234",
-         "xxx"]
-        [Just ["xxx0"],
-         Just ["xxx1234"],
-         Nothing]
-
-    , testRegex "^.+[0-9][0-9][0-9]$" []
-        ["x123",
-         "xx123",
-         "123456",
-         "123",
-         "x1234"]
-        [Just ["x123"],
-         Just ["xx123"],
-         Just ["123456"],
-         Nothing,
-         Just ["x1234"]]
-
-    , testRegex "^.+?[0-9][0-9][0-9]$" []
-        ["x123",
-         "xx123",
-         "123456",
-         "123",
-         "x1234"]
-        [Just ["x123"],
-         Just ["xx123"],
-         Just ["123456"],
-         Nothing,
-         Just ["x1234"]]
-
-    -- test matching more than 1 subpattern
-    , testRegex "^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" []
-        ["abc!pqr=apquxz.ixr.zzz.ac.uk",
-         "!pqr=apquxz.ixr.zzz.ac.uk",
-         "abc!=apquxz.ixr.zzz.ac.uk",
-         "abc!pqr=apquxz:ixr.zzz.ac.uk",
-         "abc!pqr=apquxz.ixr.zzz.ac.ukk"]
-        [Just ["abc!pqr=apquxz.ixr.zzz.ac.uk", "abc", "pqr"],
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex ":" []
-        ["Well, we need a colon: somewhere",
-         "*** Fail if we don't"]
-        [Just [":"],
-         Nothing]
-
-    , testRegex "([\\da-f:]+)$" [caseless]
-        ["0abc",
-         "abc",
-         "fed",
-         "E",
-         "::",
-         "5f03:12C0::932e",
-         "fed def",
-         "Any old stuff",
-         "*** Failers",
-         "0zzz",
-         "gzzz",
-         "fed\x20",
-         "Any old rubbish"]
-        [Just ["0abc", "0abc"],
-         Just ["abc", "abc"],
-         Just ["fed", "fed"],
-         Just ["E", "E"],
-         Just ["::", "::"],
-         Just ["5f03:12C0::932e", "5f03:12C0::932e"],
-         Just ["def", "def"],
-         Just ["ff", "ff"],
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" []
-        [".1.2.3",
-         "A.12.123.0",
-         ".1.2.3333",
-         "1.2.3",
-         "1234.2.3"]
-        [Just [".1.2.3", "1", "2", "3"],
-         Just ["A.12.123.0", "12", "123", "0"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" []
-        ["1 IN SOA non-sp1 non-sp2(",
-         "1    IN    SOA    non-sp1    non-sp2   (",
-         "1IN SOA non-sp1 non-sp2("]
-        [Just ["1 IN SOA non-sp1 non-sp2(", "1", "non-sp1", "non-sp2"],
-         Just ["1    IN    SOA    non-sp1    non-sp2   (", "1", "non-sp1", "non-sp2"],
-         Nothing]
-
-    , testRegex "^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" []
-        ["a.",
-         "Z.",
-         "2.",
-         "ab-c.pq-r.",
-         "sxk.zzz.ac.uk.",
-         "x-.y-.",
-         "*** Failers",
-         "-abc.peq."]
-        [Just ["a."],
-         Just ["Z."],
-         Just ["2."],
-         Just ["ab-c.pq-r.", ".pq-r"],
-         Just ["sxk.zzz.ac.uk.", ".uk"],
-         Just ["x-.y-.", ".y-"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" []
-        ["*.a",
-         "*.b0-a",
-         "*.c3-b.c",
-         "*.c-a.b-c",
-         "*** Failers",
-         "*.0",
-         "*.a-",
-         "*.a-b.c-",
-         "*.c-a.0-c"]
-        [Just ["*.a"],
-         Just ["*.b0-a", "0-a"],
-         Just ["*.c3-b.c", "3-b", ".c"],
-         Just ["*.c-a.b-c", "-a", ".b-c", "-c"],
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^(?=ab(de))(abd)(e)" []
-        ["abde"]
-        [Just ["abde", "de", "abd", "e"]]
-
-    , testRegex "^(?!(ab)de|x)(abd)(f)" []
-        ["abdf"]
-        [Just ["abdf", "", "abd", "f"]]
-
-    , testRegex "^(?=(ab(cd)))(ab)" []
-        ["abcd"]
-        [Just ["ab", "abcd", "cd", "ab"]]
-
-    , testRegex "^[\\da-f](\\.[\\da-f])*$" [caseless]
-        ["a.b.c.d",
-         "A.B.C.D",
-         "a.b.c.1.2.3.C"]
-        [Just ["a.b.c.d", ".d"],
-         Just ["A.B.C.D", ".D"],
-         Just ["a.b.c.1.2.3.C", ".C"]]
-
-    , testRegex "^\".*\"\\s*(;.*)?$" []
-        ["\"1234\"",
-         "\"abcd\" ;",
-         "\"\" ; rhubarb",
-         "*** Failers",
-         "\\\"1234\\\" : things"]
-        [Just ["\"1234\""],
-         Just ["\"abcd\" ;", ";"],
-         Just ["\"\" ; rhubarb", "; rhubarb"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^$" []
-        ["",
-         "*** Failers"]
-        [Just [""],
-         Nothing]
-
-    , testRegex "   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" [extended]
-        ["ab c",
-         "*** Failers",
-         "abc",
-         "ab cde"]
-        [Just ["ab c"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" []
-        ["ab c",
-         "*** Failers",
-         "abc",
-         "ab cde"]
-        [Just ["ab c"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^   a\\ b[c ]d       $" [extended]
-        ["a bcd",
-         "a b d",
-         "*** Failers",
-         "abcd",
-         "ab d"]
-        [Just ["a bcd"],
-         Just ["a b d"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , TestLabel "compile failure" $
-            TestCase $ (assertBool "compile failure" $ Left "nothing to repeat"== compile "*" [])
-
-    , testRegex "^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$" []
-        ["abcdefhijklm"]
-        [Just ["abcdefhijklm",
-               "abc", "bc",
-               "c", "def",
-               "ef", "f",
-               "hij", "ij",
-               "j", "klm",
-               "lm", "m"]]
-
-    , testRegex "^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$" []
-        ["abcdefhijklm"]
-        [Just ["abcdefhijklm",
-             "bc", "c", "ef", "f", "ij", "j", "lm", "m"]]
-
-    , testRegex "^[.^$|()*+?{,}]+" []
-        [".^$(*+)|{?,?}"]
-        [Just [".^$(*+)|{?,?}"]]
-
-    , testRegex "^a*\\w" []
-        ["z",
-         "az",
-         "aaaz",
-         "a",
-         "aa",
-         "aaaa",
-         "a+",
-         "aa+"]
-        [Just ["z"],
-         Just ["az"],
-         Just ["aaaz"],
-         Just ["a"],
-         Just ["aa"],
-         Just ["aaaa"],
-         Just ["a"],
-         Just ["aa"]]
-
-    , testRegex "^a*?\\w" []
-        ["z",
-         "az",
-         "aaaz",
-         "a",
-         "aa",
-         "aaaa",
-         "a+",
-         "aa+"]
-        [Just ["z"],
-         Just ["a"],
-         Just ["a"],
-         Just ["a"],
-         Just ["a"],
-         Just ["a"],
-         Just ["a"],
-         Just ["a"]]
-
-    , testRegex "^a+\\w" []
-        ["az",
-         "aaaz",
-         "aa",
-         "aaaa",
-         "aa+"]
-        [Just ["az"],
-         Just ["aaaz"],
-         Just ["aa"],
-         Just ["aaaa"],
-         Just ["aa"]]
-
-    , testRegex "^a+?\\w" []
-        ["az",
-         "aaaz",
-         "aa",
-         "aaaa",
-         "aa+"]
-        [Just ["az"],
-         Just ["aa"],
-         Just ["aa"],
-         Just ["aa"],
-         Just ["aa"]]
-
-    , testRegex "^\\d{8}\\w{2,}" []
-        ["1234567890",
-         "12345678ab",
-         "12345678__",
-         "*** Failers",
-         "1234567"]
-        [Just ["1234567890"],
-         Just ["12345678ab"],
-         Just ["12345678__"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^[aeiou\\d]{4,5}$" []
-        ["uoie",
-         "1234",
-         "12345",
-         "aaaaa",
-         "*** Failers",
-         "123456"]
-        [Just ["uoie"],
-         Just ["1234"],
-         Just ["12345"],
-         Just ["aaaaa"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^[aeiou\\d]{4,5}?" []
-        ["uoie",
-         "1234",
-         "12345",
-         "aaaaa",
-         "123456"]
-        [Just ["uoie"],
-         Just ["1234"],
-         Just ["1234"],
-         Just ["aaaa"],
-         Just ["1234"]]
-
-    , testRegex "\\A(abc|def)=(\\1){2,3}\\Z" []
-        ["abc=abcabc",
-         "def=defdefdef",
-         "*** Failers",
-         "abc=defdef"]
-        [Just ["abc=abcabc", "abc", "abc"],
-         Just ["def=defdefdef", "def", "def"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$" []
-        ["abcdefghijkcda2",
-         "abcdefghijkkkkcda2"]
-        [Just ["abcdefghijkcda2", "a", "b",
-         "c", "d", "e", "f", "g", "h", "i", "j", "k", "cd"],
-
-         Just ["abcdefghijkkkkcda2", "a", "b", "c", "d",
-             "e", "f", "g", "h", "i", "j", "k", "cd"]]
-
-    , testRegex "(cat(a(ract|tonic)|erpillar)) \\1()2(3)" []
-        ["cataract cataract23",
-         "catatonic catatonic23",
-         "caterpillar caterpillar23"]
-
-        [Just ["cataract cataract23", "cataract", "aract", "ract", "", "3"],
-
-         Just ["catatonic catatonic23", "catatonic", "atonic", "tonic", "", "3"],
-
-         Just ["caterpillar caterpillar23", "caterpillar", "erpillar", "", "", "3"]]
-
-    , testRegex "^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]" []
-        ["From abcd  Mon Sep 01 12:33:02 1997"]
-        [Just ["From abcd  Mon Sep 01 12:33", "abcd"]]
-
-    , testRegex "^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" []
-        ["From abcd  Mon Sep 01 12:33:02 1997",
-         "From abcd  Mon Sep  1 12:33:02 1997",
-         "*** Failers",
-         "From abcd  Sep 01 12:33:02 1997"]
-        [Just ["From abcd  Mon Sep 01 12:33", "Sep "],
-         Just ["From abcd  Mon Sep  1 12:33", "Sep  "],
-         Nothing,
-         Nothing]
-
-    , testRegex "\\w+(?=\t)" []
-        ["the quick brown\t fox"]
-        [Just ["brown"]]
-
-    , testRegex "foo(?!bar)(.*)" []
-        ["foobar is foolish see?"]
-        [Just ["foolish see?", "lish see?"]]
-
-    , testRegex "(?:(?!foo)...|^.{0,2})bar(.*)" []
-        ["foobar crowbar etc",
-         "barrel",
-         "2barrel",
-         "A barrel"]
-        [Just ["rowbar etc", " etc"],
-         Just ["barrel",     "rel"],
-         Just ["2barrel",    "rel"],
-         Just ["A barrel",   "rel"]]
-
-    , testRegex "^(\\D*)(?=\\d)(?!123)" []
-        ["abc456",
-         "*** Failers",
-         "abc123"]
-        [Just ["abc", "abc"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^(a)\\1{2,3}(.)" []
-        ["aaab",
-         "aaaab",
-         "aaaaab",
-         "aaaaaab"]
-        [Just ["aaab", "a","b"],
-         Just ["aaaab","a","b"],
-         Just ["aaaaa","a","a"],
-         Just ["aaaaa","a","a"]]
-
-    , testRegex "(?!^)abc" []
-        ["the abc",
-         "*** Failers",
-         "abc"]
-        [Just ["abc"],
-         Nothing,
-         Nothing]
-
-    , testRegex "(?=^)abc" []
-        ["abc",
-         "*** Failers",
-         "the abc"]
-        [Just ["abc"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^[ab]{1,3}(ab*|b)" []
-        ["aabbbbb"]
-        [Just ["aabb", "b"]]
-
-    , testRegex "^[ab]{1,3}?(ab*|b)" []
-        ["aabbbbb"]
-        [Just ["aabbbbb", "abbbbb"]]
-
-    , testRegex "^[ab]{1,3}?(ab*?|b)" []
-        ["aabbbbb"]
-        [Just ["aa", "a"]]
-
-    , testRegex "^[ab]{1,3}(ab*?|b)" []
-        ["aabbbbb"]
-        [Just ["aabb", "b"]]
-
-    , testRegex "^(cow|)\\1(bell)" []
-        ["cowcowbell",
-         "bell",
-         "*** Failers",
-         "cowbell"]
-        [Just ["cowcowbell", "cow", "bell"],
-         Just ["bell", "", "bell"],
-         Nothing,
-         Nothing]
-
-    , testRegex "^\\s" []
-        ["\o40abc",
-         "\nabc",
-         "\rabc",
-         "\tabc",
-         "abc"]
-        [Just [" "],
-         Just ["\x0a"],
-         Just ["\x0d"],
-         Just ["\x09"],
-         Nothing]
-
-    , testRegex "^(a|)\\1*b" []
-        ["ab",
-         "aaaab",
-         "b",
-         "acb"]
-        [Just ["ab", "a"],
-         Just ["aaaab", "a"],
-         Just ["b", ""],
-         Nothing]
-
-    , testRegex "^(a|)\\1+b" []
-        ["aab",
-         "aaaab",
-         "b",
-         "*** Failers",
-         "ab"]
-        [Just ["aab", "a"],
-         Just ["aaaab", "a"],
-         Just ["b", ""],
-         Nothing,
-         Nothing]
-
-    , testRegex "^(a|)\\1?b" []
-        ["ab",
-         "aab",
-         "b",
-         "acb"]
-        [Just ["ab", "a"],
-         Just ["aab", "a"],
-         Just ["b", ""],
-         Nothing]
-
-    , testRegex "^(a|)\\1{2}b" []
-        ["aaab",
-         "b",
-         "ab",
-         "aab",
-         "aaaab"]
-        [Just ["aaab", "a"],
-         Just ["b", ""],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^(a|)\\1{2,3}b" []
-        ["aaab",
-         "aaaab",
-         "b",
-         "ab",
-         "aab",
-         "aaaaab"]
-        [Just ["aaab", "a"],
-         Just ["aaaab", "a"],
-         Just ["b", ""],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "ab{1,3}bc" []
-        ["abbbbc",
-         "abbbc",
-         "abbc",
-         "abc",
-         "abbbbbc"]
-        [Just ["abbbbc"],
-         Just ["abbbc"],
-         Just ["abbc"],
-         Nothing,
-         Nothing]
-
-    , testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" []
-        ["track1.title:TBlah blah blah"]
-        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]
-
-    , testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" [caseless]
-        ["track1.title:TBlah blah blah"]
-        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]
-
-    , testRegex "([^.]*)\\.([^:]*):[t ]+(.*)" [caseless]
-        ["track1.title:TBlah blah blah"]
-        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]
-
-    , testRegex "^[W-c]+$" []
-        ["WXY_^abc",
-         "wxy"]
-        [Just ["WXY_^abc"],
-         Nothing]
-
-    , testRegex "^[W-c]+$" [caseless]
-        ["WXY_^abc",
-         "wxy_^ABC"]
-        [Just ["WXY_^abc"],
-         Just ["wxy_^ABC"]]
-
-    , testRegex "^[\\x3f-\\x5F]+$" [caseless]
-        ["WXY_^abc",
-         "wxy_^ABC"]
-        [Just ["WXY_^abc"],
-         Just ["wxy_^ABC"]]
-
-    , testRegex "^abc$" []
-        ["abc",
-         "qqq\\nabc",
-         "abc\\nzzz",
-         "qqq\\nabc\\nzzz"]
-        [Just ["abc"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "(?:b)|(?::+)" []
-        ["b::c",
-         "c::b"]
-        [Just ["b"],
-         Just ["::"]]
-
-    , testRegex "[-az]+" []
-        ["az-",
-         "*** Failers",
-         "b"]
-        [Just ["az-"],
-         Just ["a"],
-         Nothing]
-
-    , testRegex "[az-]+" []
-        ["za-",
-         "*** Failers",
-         "b"]
-        [Just ["za-"],
-         Just ["a"],
-         Nothing]
-
-    , testRegex "[a\\-z]+" []
-        ["a-z",
-         "*** Failers",
-         "b"]
-        [Just ["a-z"],
-         Just ["a"],
-         Nothing]
-
-    , testRegex "[a-z]+" []
-        ["abcdxyz"]
-        [Just ["abcdxyz"]]
-
-    , testRegex "[\\d-]+" []
-        ["12-34",
-         "aaa"]
-        [Just ["12-34"],
-         Nothing]
-    , testRegex "[\\d-z]+" []
-        ["12-34z",
-         "aaa"]
-        [Just ["12-34z"],
-         Nothing]
-
-    , testRegex "\\x20Z" []
-        ["the Zoo",
-         "*** Failers",
-         "Zulu"]
-        [Just [" Z"],
-         Nothing,
-         Nothing]
-
-    , testRegex "(abc)\\1" [caseless]
-        ["abcabc",
-         "ABCabc",
-         "abcABC"]
-        [Just ["abcabc", "abc"],
-         Just ["ABCabc", "ABC"],
-         Just ["abcABC", "abc"]]
-
-    , testRegex "ab{3cd" []
-        ["ab{3cd"]
-        [Just ["ab{3cd"]]
-
-    , testRegex "ab{3,cd" []
-        ["ab{3,cd"]
-        [Just ["ab{3,cd"]]
-
-    , testRegex "ab{3,4a}cd" []
-        ["ab{3,4a}cd"]
-        [Just ["ab{3,4a}cd"]]
-
-    , testRegex "{4,5a}bc" []
-        ["{4,5a}bc"]
-        [Just ["{4,5a}bc"]]
-
-    , testRegex "abc$" []
-        ["abc",
-         "abc\n",
-         "*** Failers",
-         "abc\ndef"]
-        [Just ["abc"],
-         Just ["abc"],
-         Nothing,
-         Nothing]
-
-    , testRegex "(abc)\\123" []
-        ["abc\x53"]
-        [Just ["abcS", "abc"]]
-
-    , testRegex "(abc)\\223" []
-        ["abc\x93"]
-        [Just ["abc\x93", "abc"]]
-
-    , testRegex "(abc)\\323" []
-        ["abc\xd3"]
-        [Just ["abc\xd3", "abc"]]
-
-    , testRegex "(abc)\\100" []
-        ["abc\x40",
-         "abc\o100"]
-        [Just ["abc@", "abc"],
-         Just ["abc@", "abc"]]
-
-    , testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123" []
-        ["abcdefghijkllS"]
-        [Just ["abcdefghijkllS",
-             "a",
-             "b",
-             "c",
-             "d",
-             "e",
-             "f",
-             "g",
-             "h",
-             "i",
-             "j",
-             "k",
-             "l"]]
-
-     , testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123" []
-        ["abcdefghijk\o12S"]
-        [Just ["abcdefghijk\x0aS",
-             "a",
-             "b",
-             "c",
-             "d",
-             "e",
-             "f",
-             "g",
-             "h",
-             "i",
-             "j",
-             "k"]]
-
-    , testRegex "ab\\idef" []
-        ["abidef"]
-        [Just ["abidef"]]
-
-    , testRegex "a{0}bc" []
-        ["bc"]
-        [Just ["bc"]]
-
-    , testRegex "(a|(bc)){0,0}?xyz" []
-        ["xyz"]
-        [Just ["xyz"]]
-
-    , testRegex "(?s)a.b" []
-        ["a\nb"]
-        [Just ["a\nb"]]
-
-    , testRegex "^([^a])([^\\b])([^c]*)([^d]{3,4})" []
-        ["baNOTccccd",
-         "baNOTcccd",
-         "baNOTccd",
-         "bacccd",
-         "anything",
-         "b\bc   ",
-         "baccd"]
-        [Just ["baNOTcccc", "b", "a", "NOT", "cccc"],
-         Just ["baNOTccc", "b", "a", "NOT", "ccc"],
-         Just ["baNOTcc", "b", "a", "NO", "Tcc"],
-         Just ["baccc", "b", "a", "", "ccc"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "^\\d{8,}\\@.+[^k]$" []
-        ["12345678@a.b.c.d",
-         "123456789@x.y.z",
-         "*** Failers",
-         "12345678@x.y.uk",
-         "1234567@a.b.c.d       "]
-        [Just ["12345678@a.b.c.d"],
-         Just ["123456789@x.y.z"],
-         Nothing,
-         Nothing,
-         Nothing]
-
-    , testRegex "(a)\\1{8,}" []
-        ["aaaaaaaaa",
-         "aaaaaaaaaa",
-         "*** Failers",
-         "aaaaaaa   "]
-        [Just ["aaaaaaaaa", "a"],
-         Just ["aaaaaaaaaa", "a"],
-         Nothing,
-         Nothing]
-
-    , testRegex "[^a]" []
-        ["aaaabcd",
-         "aaAabcd "]
-        [Just ["b"],
-         Just ["A"]]
-
-    , testRegex "[^a]" [caseless]
-        ["aaaabcd",
-         "aaAabcd "]
-        [Just ["b"],
-         Just ["b"]]
-
-    , testRegex "[^az]" []
-        ["aaaabcd",
-         "aaAabcd "]
-        [Just ["b"],
-         Just ["A"]]
-
-    , testRegex "[^az]" [caseless]
-        ["aaaabcd",
-         "aaAabcd "]
-        [Just ["b"],
-         Just ["b"]]
-
-    , testRegex "P[^*]TAIRE[^*]{1,6}?LL" []
-        ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
-        [Just ["PSTAIREISLL"]]
-
-    , testRegex "P[^*]TAIRE[^*]{1,}?LL" []
-        ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
-        [Just ["PSTAIREISLL"]]
-
-    , testRegex "(.*?)(\\d+)" []
-        ["I have 2 numbers: 53147"]
-        [Just ["I have 2", "I have ", "2"]]
-
-    , testRegex "(.*)(\\d+)$" []
-        ["I have 2 numbers: 53147"]
-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: 5314", "7"]]
-
-    , testRegex "(.*?)(\\d+)$" []
-        ["I have 2 numbers: 53147"]
-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]
-
-    , testRegex "(.*)\\b(\\d+)$" []
-        ["I have 2 numbers: 53147"]
-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]
-
-    , testRegex "(.*\\D)(\\d+)$" []
-        ["I have 2 numbers: 53147"]
-        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]
-
-    , testRegex "word (?:[a-zA-Z0-9]+ ){0,10}otherword" []
-        ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
-         "word cat dog elephant mussel cow horse canary baboon snake shark"]
-        [Just ["word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
-         Nothing]
-
-    , testRegex "word (?:[a-zA-Z0-9]+ ){0,300}otherword" []
-        ["word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
-        [Nothing]
-    , testRegex "^(a){0,0}" []
-        ["bcd",
-         "abc",
-         "aab     "]
-        [Just [""],
-         Just [""],
-         Just [""]]
-
-    , testRegex "^(a){0,1}" []
-        ["bcd",
-         "abc",
-         "aab  "]
-        [Just [""],
-         Just ["a", "a"],
-         Just ["a", "a"]]
-
-    , testRegex "^(a){0,2}" []
-        ["bcd",
-         "abc",
-         "aab  "]
-        [Just [""],
-         Just ["a", "a"],
-         Just ["aa", "a"]]
-
-    , testRegex "^(a){0,3}" []
-        ["bcd",
-         "abc",
-         "aab",
-         "aaa   "]
-        [Just [""],
-         Just ["a", "a"],
-         Just ["aa", "a"],
-         Just ["aaa", "a"]]
-
-    , testRegex "^(a){0,3}" []
-        ["bcd",
-         "abc",
-         "aab",
-         "aaa   "]
-        [Just [""],
-         Just ["a", "a"],
-         Just ["aa", "a"],
-         Just ["aaa", "a"]]
-
-    , testRegex "^(a){0,}" []
-        ["bcd",
-         "abc",
-         "aab",
-         "aaa",
-         "aaaaaaaa    "]
-        [Just [""],
-         Just ["a", "a"],
-         Just ["aa", "a"],
-         Just ["aaa", "a"],
-         Just ["aaaaaaaa", "a"]]
-
-    , testRegex "^(a){1,1}" []
-        ["bcd",
-         "abc",
-         "aab  "]
-        [Nothing,
-         Just ["a", "a"],
-         Just ["a", "a"]]
-
-    , testRegex "^(a){1,2}" []
-        ["bcd",
-         "abc",
-         "aab  "]
-        [Nothing,
-         Just ["a", "a"],
-         Just ["aa", "a"]]
-
-    , testRegex "^(a){1,3}" []
-        ["bcd",
-         "abc",
-         "aab",
-         "aaa   "]
-        [Nothing,
-         Just ["a", "a"],
-         Just ["aa", "a"],
-         Just ["aaa", "a"]]
-
-    , testRegex ".*\\.gif" []
-        ["borfle\nbib.gif\nno"]
-        [Just ["bib.gif"]]
-
-    , testRegex ".{0,}\\.gif" []
-        ["borfle\nbib.gif\nno"]
-        [Just ["bib.gif"]]
-
-    , testRegex ".*\\.gif" [multiline]
-        ["borfle\nbib.gif\nno"]
-        [Just ["bib.gif"]]
-
-    , testRegex ".*\\.gif" [dotall]
-        ["borfle\nbib.gif\nno"]
-        [Just ["borfle\nbib.gif"]]
-
-    , testRegex ".*$" [multiline]
-        ["borfle\nbib.gif\nno"]
-        [Just ["borfle"]]
-
-    , testRegex ".*$" [dotall]
-        ["borfle\nbib.gif\nno"]
-        [Just ["borfle\nbib.gif\nno"]]
-
-    , testRegex ".*$" [multiline]
-        ["borfle\nbib.gif\nno\\n"]
-        [Just ["borfle"]]
-
-    , testRegex "(?ms)^B" []
-        ["abc\nB"]
-        [Just ["B"]]
-
-    , testRegex "(?s)B$" []
-        ["B\n"]
-        [Just ["B"]]
-
-    , testRegex "^[abcdefghijklmnopqrstuvwxy0123456789]" []
-        ["n",
-         "z "]
-        [Just ["n"],
-         Nothing]
-
-    , testRegex "abcde{0,0}" []
-        ["abcd",
-         "abce  "]
-        [Just ["abcd"],
-         Nothing]
-
-    , testRegex "^(b+?|a){1,2}?c" []
-        ["bac",
-         "bbac",
-         "bbbac",
-         "bbbbac",
-         "bbbbbac "]
-        [Just ["bac","a"],
-         Just ["bbac","a"],
-         Just ["bbbac","a"],
-         Just ["bbbbac","a"],
-         Just ["bbbbbac","a"]]
-
-    , testRegex "(AB)*?\\1" []
-        ["ABABAB"]
-        [Just ["ABAB", "AB"]]
-
-    , testRegex "(.*(.)?)*" []
-        ["abcd"]
-        [Just ["abcd", ""]]
-
-{-
-    , testRegex "(?:a|)*\\d" []
-        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-        [Nothing,
-         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
--}
-
-    , testRegex "^(?:a(?:(?:))+)+" []
-        ["aaaa"]
-        [Just ["aaaa"]]
-
-    , testRegex "^(a()+)+" []
-        ["aaaa"]
-        [Just ["aaaa", "a", ""]]
-
-    , testRegex "^(?:a(?:(?:))*)*" []
-        ["aaaa"]
-        [Just ["aaaa"]]
-
-    , testRegex "^(a()*)*" []
-        ["aaaa"]
-        [Just ["aaaa", "a", ""]]
-
-  ]
+import System.IO.Unsafe
+import Control.Exception
+import Control.Monad.Error
+
+testRegex :: S.ByteString
+     -> [PCREOption]
+     -> [S.ByteString]
+     -> [Maybe [S.ByteString]]
+     -> Test
+
+testRegex regex options inputs outputs = TestLabel (S.unpack regex) $
+  TestCase $ do
+     assertEqual "Input/Output Length Check" (length inputs) (length outputs)
+
+     assertBool "ByteString regex compile" =<<
+      case compile regex options of
+        r -> return $
+            and [ match r i [] == o
+                | (i,o) <- zip inputs outputs ]
+
+     assertBool "ByteString regex compileM" =<<
+      case compileM regex options of
+        Left s -> do hPutStrLn stderr ("ERROR in ByteString in compileM: " ++ s)
+                     return False
+        Right r -> return $
+            and [ match r i [] == o
+                | (i,o) <- zip inputs outputs ]
+
+     assertBool "String regex" =<<
+      case String.compile (S.unpack regex) options of
+        r -> return $
+            and [ String.match r i [] == o
+                | (i,o) <- zip (map (S.unpack) inputs)
+                               (map (fmap (map S.unpack)) outputs) ]
+
+     assertBool "String regex" =<<
+      case String.compileM (S.unpack regex) options of
+        Left s -> do hPutStrLn stderr ("ERROR in String compileM: "  ++ s)
+                     return False
+        Right r -> return $
+            and [ String.match r i [] == o
+                | (i,o) <- zip (map (S.unpack) inputs)
+                               (map (fmap (map S.unpack)) outputs) ]
+
+main = do counts <- runTestTT tests
+          when (errors counts > 0 || failures counts > 0) exitFailure
+
+tests = TestList
+
+    [ testRegex "the quick brown fox" []
+           [ "the quick brown fox"
+           , "The quick brown FOX"
+           , "What do you know about the quick brown fox?"
+           , "What do you know about THE QUICK BROWN FOX?"
+           ]
+           [ Just ["the quick brown fox"]
+           , Nothing
+           , Just ["the quick brown fox"]
+           , Nothing
+           ]
+
+    , TestLabel "compile failure" $
+            TestCase $ (assertBool "compile failure" $
+                Left ("nothing to repeat"::String) == compileM "*" [])
+
+    , TestLabel "compile failure" $
+            TestCase $ (assertBool "compile failure" =<< (return $
+                    (Just ("Text.Regex.PCRE.Light: Error in regex: \"*\""::String))
+                    ==
+                    (unsafePerformIO $ do
+                        handle (\e -> return (Just (show e)))
+                               (compile "*" [] `seq` return Nothing))))
+
+--  , testRegex "\0*" [] -- the embedded null in the pattern seems to be a problem
+--      ["\0\0\0\0"]
+--      [Just ["\0\0\0\0"]]
+
+    , testRegex "\1*" [] -- the embedded null in the pattern seems to be a problem
+        ["\1\1\1\1"]
+        [Just ["\1\1\1\1"]]
+
+    , testRegex "The quick brown fox" [caseless]
+           ["the quick brown fox"
+           ,"The quick brown FOX"
+           ,"What do you know about the quick brown fox?"
+           ,"What do you know about THE QUICK BROWN FOX?"
+           ]
+           [ Just ["the quick brown fox"]
+           , Just ["The quick brown FOX"]
+           , Just ["the quick brown fox"]
+           , Just ["THE QUICK BROWN FOX"]
+           ]
+
+     , testRegex "a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" []
+           ["abxyzpqrrrabbxyyyypqAzz"
+           ,"abxyzpqrrrabbxyyyypqAzz"
+           ,"aabxyzpqrrrabbxyyyypqAzz"
+           ,"aaabxyzpqrrrabbxyyyypqAzz"
+           ,"aaaabxyzpqrrrabbxyyyypqAzz"
+           ,"abcxyzpqrrrabbxyyyypqAzz"
+           ,"aabcxyzpqrrrabbxyyyypqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqqqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqqqqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqqqqqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqqqqqqAzz"
+           ,"aaaabcxyzpqrrrabbxyyyypqAzz"
+           ,"abxyzzpqrrrabbxyyyypqAzz"
+           ,"aabxyzzzpqrrrabbxyyyypqAzz"
+           ,"aaabxyzzzzpqrrrabbxyyyypqAzz"
+           ,"aaaabxyzzzzpqrrrabbxyyyypqAzz"
+           ,"abcxyzzpqrrrabbxyyyypqAzz"
+           ,"aabcxyzzzpqrrrabbxyyyypqAzz"
+           ,"aaabcxyzzzzpqrrrabbxyyyypqAzz"
+           ,"aaaabcxyzzzzpqrrrabbxyyyypqAzz"
+           ,"aaaabcxyzzzzpqrrrabbbxyyyypqAzz"
+           ,"aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypABzz"
+           ,"aaabcxyzpqrrrabbxyyyypABBzz"
+           ,">>>aaabxyzpqrrrabbxyyyypqAzz"
+           ,">aaaabxyzpqrrrabbxyyyypqAzz"
+           ,">>>>abcxyzpqrrrabbxyyyypqAzz"
+           ,"abxyzpqrrabbxyyyypqAzz"
+           ,"abxyzpqrrrrabbxyyyypqAzz"
+           ,"abxyzpqrrrabxyyyypqAzz"
+           ,"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz"
+           ,"aaaabcxyzzzzpqrrrabbbxyyypqAzz"
+           ,"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz"
+           ]
+
+           [ Just ["abxyzpqrrrabbxyyyypqAzz"]
+           , Just ["abxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aabxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aaabxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aaaabxyzpqrrrabbxyyyypqAzz"]
+           , Just ["abcxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aabcxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypqqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypqqqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypqqqqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypqqqqqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypqqqqqqAzz"]
+           , Just ["aaaabcxyzpqrrrabbxyyyypqAzz"]
+           , Just ["abxyzzpqrrrabbxyyyypqAzz"]
+           , Just ["aabxyzzzpqrrrabbxyyyypqAzz"]
+           , Just ["aaabxyzzzzpqrrrabbxyyyypqAzz"]
+           , Just ["aaaabxyzzzzpqrrrabbxyyyypqAzz"]
+           , Just ["abcxyzzpqrrrabbxyyyypqAzz"]
+           , Just ["aabcxyzzzpqrrrabbxyyyypqAzz"]
+           , Just ["aaabcxyzzzzpqrrrabbxyyyypqAzz"]
+           , Just ["aaaabcxyzzzzpqrrrabbxyyyypqAzz"]
+           , Just ["aaaabcxyzzzzpqrrrabbbxyyyypqAzz"]
+           , Just ["aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypABzz"]
+           , Just ["aaabcxyzpqrrrabbxyyyypABBzz"]
+           , Just ["aaabxyzpqrrrabbxyyyypqAzz"]
+           , Just ["aaaabxyzpqrrrabbxyyyypqAzz"]
+           , Just ["abcxyzpqrrrabbxyyyypqAzz"]
+           , Nothing
+           , Nothing
+           , Nothing
+           , Nothing
+           , Nothing
+           , Nothing
+           ]
+
+    , testRegex "^(abc){1,2}zz" []
+        ["abczz"
+        ,"abcabczz"
+        ,"zz"
+        ,"abcabcabczz"
+        ,">>abczz"]
+        [ Just ["abczz","abc"]
+        , Just ["abcabczz", "abc"]
+        , Nothing
+        , Nothing
+        , Nothing ]
+
+    , testRegex "^(b+?|a){1,2}?c" []
+        ["bc",
+         "bbc",
+         "bbbc",
+         "bac",
+         "bbac",
+         "aac",
+         "abbbbbbbbbbbc",
+         "bbbbbbbbbbbac",
+         "aaac",
+         "abbbbbbbbbbbac"]
+
+        [Just ["bc", "b"],
+         Just ["bbc", "b"],
+         Just ["bbbc", "bb"],
+         Just ["bac", "a"],
+         Just ["bbac", "a"],
+         Just ["aac", "a"],
+         Just ["abbbbbbbbbbbc", "bbbbbbbbbbb"],
+         Just ["bbbbbbbbbbbac", "a"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(b+|a){1,2}c" []
+        ["bc",
+         "bbc",
+         "bbbc",
+         "bac",
+         "bbac",
+         "aac",
+         "abbbbbbbbbbbc",
+         "bbbbbbbbbbbac",
+         "aaac",
+         "abbbbbbbbbbbac"]
+        [Just ["bc", "b"],
+         Just ["bbc", "bb"],
+         Just ["bbbc", "bbb"],
+         Just ["bac", "a"],
+         Just ["bbac", "a"],
+         Just ["aac", "a"],
+         Just ["abbbbbbbbbbbc", "bbbbbbbbbbb"],
+         Just ["bbbbbbbbbbbac", "a"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(b+|a){1,2}?bc" []
+        ["bbc"]
+        [Just ["bbc", "b"]]
+
+    , testRegex "^(b*|ba){1,2}?bc" []
+        ["babc",
+         "bbabc",
+         "bababc",
+         "bababbc",
+         "babababc"]
+        [Just ["babc","ba"],
+         Just ["bbabc","ba"],
+         Just ["bababc","ba"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(ba|b*){1,2}?bc" []
+        ["babc",
+         "bbabc",
+         "bababc",
+         "bababbc",
+         "babababc"]
+        [Just ["babc","ba"],
+         Just ["bbabc","ba"],
+         Just ["bababc","ba"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^[ab\\]cde]" []
+        ["athing",
+         "bthing",
+         "]thing",
+         "cthing",
+         "dthing",
+         "ething",
+         "fthing",
+         "[thing",
+         "\\\\thing"]
+        [Just ["a"],
+         Just ["b"],
+         Just ["]"],
+         Just ["c"],
+         Just ["d"],
+         Just ["e"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^[]cde]" []
+        ["]thing",
+         "cthing",
+         "dthing",
+         "ething",
+         "athing",
+         "fthing"]
+        [Just ["]"],
+         Just ["c"],
+         Just ["d"],
+         Just ["e"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^[^ab\\]cde]" []
+        ["fthing",
+         "[thing",
+         "\\\\thing",
+         "athing",
+         "bthing",
+         "]thing",
+         "cthing",
+         "dthing",
+         "ething"]
+        [Just ["f"],
+         Just ["["],
+         Just ["\\"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^\129" []
+        ["\129"]
+        [Just ["\x81"]]
+
+    , testRegex "^\255" []
+        ["\255"]
+        [Just ["\xff"]]
+
+    , testRegex "^[0-9]+$" []
+        ["0",
+         "1",
+         "2",
+         "3",
+         "4",
+         "5",
+         "6",
+         "7",
+         "8",
+         "9",
+         "10",
+         "100",
+         "abc"]
+        [Just ["0"],
+         Just ["1"],
+         Just ["2"],
+         Just ["3"],
+         Just ["4"],
+         Just ["5"],
+         Just ["6"],
+         Just ["7"],
+         Just ["8"],
+         Just ["9"],
+         Just ["10"],
+         Just ["100"],
+         Nothing]
+
+    , testRegex "^.*nter" []
+        ["enter",
+         "inter",
+         "uponter"]
+        [Just ["enter"],
+         Just ["inter"],
+         Just ["uponter"]]
+
+    , testRegex "^xxx[0-9]+$" []
+        ["xxx0",
+         "xxx1234",
+         "xxx"]
+        [Just ["xxx0"],
+         Just ["xxx1234"],
+         Nothing]
+
+    , testRegex "^.+[0-9][0-9][0-9]$" []
+        ["x123",
+         "xx123",
+         "123456",
+         "123",
+         "x1234"]
+        [Just ["x123"],
+         Just ["xx123"],
+         Just ["123456"],
+         Nothing,
+         Just ["x1234"]]
+
+    , testRegex "^.+?[0-9][0-9][0-9]$" []
+        ["x123",
+         "xx123",
+         "123456",
+         "123",
+         "x1234"]
+        [Just ["x123"],
+         Just ["xx123"],
+         Just ["123456"],
+         Nothing,
+         Just ["x1234"]]
+
+    -- test matching more than 1 subpattern
+    , testRegex "^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" []
+        ["abc!pqr=apquxz.ixr.zzz.ac.uk",
+         "!pqr=apquxz.ixr.zzz.ac.uk",
+         "abc!=apquxz.ixr.zzz.ac.uk",
+         "abc!pqr=apquxz:ixr.zzz.ac.uk",
+         "abc!pqr=apquxz.ixr.zzz.ac.ukk"]
+        [Just ["abc!pqr=apquxz.ixr.zzz.ac.uk", "abc", "pqr"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex ":" []
+        ["Well, we need a colon: somewhere",
+         "*** Fail if we don't"]
+        [Just [":"],
+         Nothing]
+
+    , testRegex "([\\da-f:]+)$" [caseless]
+        ["0abc",
+         "abc",
+         "fed",
+         "E",
+         "::",
+         "5f03:12C0::932e",
+         "fed def",
+         "Any old stuff",
+         "*** Failers",
+         "0zzz",
+         "gzzz",
+         "fed\x20",
+         "Any old rubbish"]
+        [Just ["0abc", "0abc"],
+         Just ["abc", "abc"],
+         Just ["fed", "fed"],
+         Just ["E", "E"],
+         Just ["::", "::"],
+         Just ["5f03:12C0::932e", "5f03:12C0::932e"],
+         Just ["def", "def"],
+         Just ["ff", "ff"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" []
+        [".1.2.3",
+         "A.12.123.0",
+         ".1.2.3333",
+         "1.2.3",
+         "1234.2.3"]
+        [Just [".1.2.3", "1", "2", "3"],
+         Just ["A.12.123.0", "12", "123", "0"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" []
+        ["1 IN SOA non-sp1 non-sp2(",
+         "1    IN    SOA    non-sp1    non-sp2   (",
+         "1IN SOA non-sp1 non-sp2("]
+        [Just ["1 IN SOA non-sp1 non-sp2(", "1", "non-sp1", "non-sp2"],
+         Just ["1    IN    SOA    non-sp1    non-sp2   (", "1", "non-sp1", "non-sp2"],
+         Nothing]
+
+    , testRegex "^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" []
+        ["a.",
+         "Z.",
+         "2.",
+         "ab-c.pq-r.",
+         "sxk.zzz.ac.uk.",
+         "x-.y-.",
+         "*** Failers",
+         "-abc.peq."]
+        [Just ["a."],
+         Just ["Z."],
+         Just ["2."],
+         Just ["ab-c.pq-r.", ".pq-r"],
+         Just ["sxk.zzz.ac.uk.", ".uk"],
+         Just ["x-.y-.", ".y-"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" []
+        ["*.a",
+         "*.b0-a",
+         "*.c3-b.c",
+         "*.c-a.b-c",
+         "*** Failers",
+         "*.0",
+         "*.a-",
+         "*.a-b.c-",
+         "*.c-a.0-c"]
+        [Just ["*.a"],
+         Just ["*.b0-a", "0-a"],
+         Just ["*.c3-b.c", "3-b", ".c"],
+         Just ["*.c-a.b-c", "-a", ".b-c", "-c"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^(?=ab(de))(abd)(e)" []
+        ["abde"]
+        [Just ["abde", "de", "abd", "e"]]
+
+    , testRegex "^(?!(ab)de|x)(abd)(f)" []
+        ["abdf"]
+        [Just ["abdf", "", "abd", "f"]]
+
+    , testRegex "^(?=(ab(cd)))(ab)" []
+        ["abcd"]
+        [Just ["ab", "abcd", "cd", "ab"]]
+
+    , testRegex "^[\\da-f](\\.[\\da-f])*$" [caseless]
+        ["a.b.c.d",
+         "A.B.C.D",
+         "a.b.c.1.2.3.C"]
+        [Just ["a.b.c.d", ".d"],
+         Just ["A.B.C.D", ".D"],
+         Just ["a.b.c.1.2.3.C", ".C"]]
+
+    , testRegex "^\".*\"\\s*(;.*)?$" []
+        ["\"1234\"",
+         "\"abcd\" ;",
+         "\"\" ; rhubarb",
+         "*** Failers",
+         "\\\"1234\\\" : things"]
+        [Just ["\"1234\""],
+         Just ["\"abcd\" ;", ";"],
+         Just ["\"\" ; rhubarb", "; rhubarb"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^$" []
+        ["",
+         "*** Failers"]
+        [Just [""],
+         Nothing]
+
+    , testRegex "   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" [extended]
+        ["ab c",
+         "*** Failers",
+         "abc",
+         "ab cde"]
+        [Just ["ab c"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" []
+        ["ab c",
+         "*** Failers",
+         "abc",
+         "ab cde"]
+        [Just ["ab c"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^   a\\ b[c ]d       $" [extended]
+        ["a bcd",
+         "a b d",
+         "*** Failers",
+         "abcd",
+         "ab d"]
+        [Just ["a bcd"],
+         Just ["a b d"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$" []
+        ["abcdefhijklm"]
+        [Just ["abcdefhijklm",
+               "abc", "bc",
+               "c", "def",
+               "ef", "f",
+               "hij", "ij",
+               "j", "klm",
+               "lm", "m"]]
+
+    , testRegex "^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$" []
+        ["abcdefhijklm"]
+        [Just ["abcdefhijklm",
+             "bc", "c", "ef", "f", "ij", "j", "lm", "m"]]
+
+    , testRegex "^[.^$|()*+?{,}]+" []
+        [".^$(*+)|{?,?}"]
+        [Just [".^$(*+)|{?,?}"]]
+
+    , testRegex "^a*\\w" []
+        ["z",
+         "az",
+         "aaaz",
+         "a",
+         "aa",
+         "aaaa",
+         "a+",
+         "aa+"]
+        [Just ["z"],
+         Just ["az"],
+         Just ["aaaz"],
+         Just ["a"],
+         Just ["aa"],
+         Just ["aaaa"],
+         Just ["a"],
+         Just ["aa"]]
+
+    , testRegex "^a*?\\w" []
+        ["z",
+         "az",
+         "aaaz",
+         "a",
+         "aa",
+         "aaaa",
+         "a+",
+         "aa+"]
+        [Just ["z"],
+         Just ["a"],
+         Just ["a"],
+         Just ["a"],
+         Just ["a"],
+         Just ["a"],
+         Just ["a"],
+         Just ["a"]]
+
+    , testRegex "^a+\\w" []
+        ["az",
+         "aaaz",
+         "aa",
+         "aaaa",
+         "aa+"]
+        [Just ["az"],
+         Just ["aaaz"],
+         Just ["aa"],
+         Just ["aaaa"],
+         Just ["aa"]]
+
+    , testRegex "^a+?\\w" []
+        ["az",
+         "aaaz",
+         "aa",
+         "aaaa",
+         "aa+"]
+        [Just ["az"],
+         Just ["aa"],
+         Just ["aa"],
+         Just ["aa"],
+         Just ["aa"]]
+
+    , testRegex "^\\d{8}\\w{2,}" []
+        ["1234567890",
+         "12345678ab",
+         "12345678__",
+         "*** Failers",
+         "1234567"]
+        [Just ["1234567890"],
+         Just ["12345678ab"],
+         Just ["12345678__"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^[aeiou\\d]{4,5}$" []
+        ["uoie",
+         "1234",
+         "12345",
+         "aaaaa",
+         "*** Failers",
+         "123456"]
+        [Just ["uoie"],
+         Just ["1234"],
+         Just ["12345"],
+         Just ["aaaaa"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^[aeiou\\d]{4,5}?" []
+        ["uoie",
+         "1234",
+         "12345",
+         "aaaaa",
+         "123456"]
+        [Just ["uoie"],
+         Just ["1234"],
+         Just ["1234"],
+         Just ["aaaa"],
+         Just ["1234"]]
+
+    , testRegex "\\A(abc|def)=(\\1){2,3}\\Z" []
+        ["abc=abcabc",
+         "def=defdefdef",
+         "*** Failers",
+         "abc=defdef"]
+        [Just ["abc=abcabc", "abc", "abc"],
+         Just ["def=defdefdef", "def", "def"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\11*(\\3\\4)\\1(?#)2$" []
+        ["abcdefghijkcda2",
+         "abcdefghijkkkkcda2"]
+        [Just ["abcdefghijkcda2", "a", "b",
+         "c", "d", "e", "f", "g", "h", "i", "j", "k", "cd"],
+
+         Just ["abcdefghijkkkkcda2", "a", "b", "c", "d",
+             "e", "f", "g", "h", "i", "j", "k", "cd"]]
+
+    , testRegex "(cat(a(ract|tonic)|erpillar)) \\1()2(3)" []
+        ["cataract cataract23",
+         "catatonic catatonic23",
+         "caterpillar caterpillar23"]
+
+        [Just ["cataract cataract23", "cataract", "aract", "ract", "", "3"],
+
+         Just ["catatonic catatonic23", "catatonic", "atonic", "tonic", "", "3"],
+
+         Just ["caterpillar caterpillar23", "caterpillar", "erpillar", "", "", "3"]]
+
+    , testRegex "^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]" []
+        ["From abcd  Mon Sep 01 12:33:02 1997"]
+        [Just ["From abcd  Mon Sep 01 12:33", "abcd"]]
+
+    , testRegex "^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" []
+        ["From abcd  Mon Sep 01 12:33:02 1997",
+         "From abcd  Mon Sep  1 12:33:02 1997",
+         "*** Failers",
+         "From abcd  Sep 01 12:33:02 1997"]
+        [Just ["From abcd  Mon Sep 01 12:33", "Sep "],
+         Just ["From abcd  Mon Sep  1 12:33", "Sep  "],
+         Nothing,
+         Nothing]
+
+    , testRegex "\\w+(?=\t)" []
+        ["the quick brown\t fox"]
+        [Just ["brown"]]
+
+    , testRegex "foo(?!bar)(.*)" []
+        ["foobar is foolish see?"]
+        [Just ["foolish see?", "lish see?"]]
+
+    , testRegex "(?:(?!foo)...|^.{0,2})bar(.*)" []
+        ["foobar crowbar etc",
+         "barrel",
+         "2barrel",
+         "A barrel"]
+        [Just ["rowbar etc", " etc"],
+         Just ["barrel",     "rel"],
+         Just ["2barrel",    "rel"],
+         Just ["A barrel",   "rel"]]
+
+    , testRegex "^(\\D*)(?=\\d)(?!123)" []
+        ["abc456",
+         "*** Failers",
+         "abc123"]
+        [Just ["abc", "abc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a)\\1{2,3}(.)" []
+        ["aaab",
+         "aaaab",
+         "aaaaab",
+         "aaaaaab"]
+        [Just ["aaab", "a","b"],
+         Just ["aaaab","a","b"],
+         Just ["aaaaa","a","a"],
+         Just ["aaaaa","a","a"]]
+
+    , testRegex "(?!^)abc" []
+        ["the abc",
+         "*** Failers",
+         "abc"]
+        [Just ["abc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "(?=^)abc" []
+        ["abc",
+         "*** Failers",
+         "the abc"]
+        [Just ["abc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^[ab]{1,3}(ab*|b)" []
+        ["aabbbbb"]
+        [Just ["aabb", "b"]]
+
+    , testRegex "^[ab]{1,3}?(ab*|b)" []
+        ["aabbbbb"]
+        [Just ["aabbbbb", "abbbbb"]]
+
+    , testRegex "^[ab]{1,3}?(ab*?|b)" []
+        ["aabbbbb"]
+        [Just ["aa", "a"]]
+
+    , testRegex "^[ab]{1,3}(ab*?|b)" []
+        ["aabbbbb"]
+        [Just ["aabb", "b"]]
+
+    , testRegex "^(cow|)\\1(bell)" []
+        ["cowcowbell",
+         "bell",
+         "*** Failers",
+         "cowbell"]
+        [Just ["cowcowbell", "cow", "bell"],
+         Just ["bell", "", "bell"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^\\s" []
+        ["\o40abc",
+         "\nabc",
+         "\rabc",
+         "\tabc",
+         "abc"]
+        [Just [" "],
+         Just ["\x0a"],
+         Just ["\x0d"],
+         Just ["\x09"],
+         Nothing]
+
+    , testRegex "^(a|)\\1*b" []
+        ["ab",
+         "aaaab",
+         "b",
+         "acb"]
+        [Just ["ab", "a"],
+         Just ["aaaab", "a"],
+         Just ["b", ""],
+         Nothing]
+
+    , testRegex "^(a|)\\1+b" []
+        ["aab",
+         "aaaab",
+         "b",
+         "*** Failers",
+         "ab"]
+        [Just ["aab", "a"],
+         Just ["aaaab", "a"],
+         Just ["b", ""],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a|)\\1?b" []
+        ["ab",
+         "aab",
+         "b",
+         "acb"]
+        [Just ["ab", "a"],
+         Just ["aab", "a"],
+         Just ["b", ""],
+         Nothing]
+
+    , testRegex "^(a|)\\1{2}b" []
+        ["aaab",
+         "b",
+         "ab",
+         "aab",
+         "aaaab"]
+        [Just ["aaab", "a"],
+         Just ["b", ""],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a|)\\1{2,3}b" []
+        ["aaab",
+         "aaaab",
+         "b",
+         "ab",
+         "aab",
+         "aaaaab"]
+        [Just ["aaab", "a"],
+         Just ["aaaab", "a"],
+         Just ["b", ""],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "ab{1,3}bc" []
+        ["abbbbc",
+         "abbbc",
+         "abbc",
+         "abc",
+         "abbbbbc"]
+        [Just ["abbbbc"],
+         Just ["abbbc"],
+         Just ["abbc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" []
+        ["track1.title:TBlah blah blah"]
+        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]
+
+    , testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" [caseless]
+        ["track1.title:TBlah blah blah"]
+        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]
+
+    , testRegex "([^.]*)\\.([^:]*):[t ]+(.*)" [caseless]
+        ["track1.title:TBlah blah blah"]
+        [Just ["track1.title:TBlah blah blah", "track1", "title", "Blah blah blah"]]
+
+    , testRegex "^[W-c]+$" []
+        ["WXY_^abc",
+         "wxy"]
+        [Just ["WXY_^abc"],
+         Nothing]
+
+    , testRegex "^[W-c]+$" [caseless]
+        ["WXY_^abc",
+         "wxy_^ABC"]
+        [Just ["WXY_^abc"],
+         Just ["wxy_^ABC"]]
+
+    , testRegex "^[\\x3f-\\x5F]+$" [caseless]
+        ["WXY_^abc",
+         "wxy_^ABC"]
+        [Just ["WXY_^abc"],
+         Just ["wxy_^ABC"]]
+
+    , testRegex "^abc$" []
+        ["abc",
+         "qqq\\nabc",
+         "abc\\nzzz",
+         "qqq\\nabc\\nzzz"]
+        [Just ["abc"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "(?:b)|(?::+)" []
+        ["b::c",
+         "c::b"]
+        [Just ["b"],
+         Just ["::"]]
+
+    , testRegex "[-az]+" []
+        ["az-",
+         "*** Failers",
+         "b"]
+        [Just ["az-"],
+         Just ["a"],
+         Nothing]
+
+    , testRegex "[az-]+" []
+        ["za-",
+         "*** Failers",
+         "b"]
+        [Just ["za-"],
+         Just ["a"],
+         Nothing]
+
+    , testRegex "[a\\-z]+" []
+        ["a-z",
+         "*** Failers",
+         "b"]
+        [Just ["a-z"],
+         Just ["a"],
+         Nothing]
+
+    , testRegex "[a-z]+" []
+        ["abcdxyz"]
+        [Just ["abcdxyz"]]
+
+    , testRegex "[\\d-]+" []
+        ["12-34",
+         "aaa"]
+        [Just ["12-34"],
+         Nothing]
+    , testRegex "[\\d-z]+" []
+        ["12-34z",
+         "aaa"]
+        [Just ["12-34z"],
+         Nothing]
+
+    , testRegex "\\x20Z" []
+        ["the Zoo",
+         "*** Failers",
+         "Zulu"]
+        [Just [" Z"],
+         Nothing,
+         Nothing]
+
+    , testRegex "(abc)\\1" [caseless]
+        ["abcabc",
+         "ABCabc",
+         "abcABC"]
+        [Just ["abcabc", "abc"],
+         Just ["ABCabc", "ABC"],
+         Just ["abcABC", "abc"]]
+
+    , testRegex "ab{3cd" []
+        ["ab{3cd"]
+        [Just ["ab{3cd"]]
+
+    , testRegex "ab{3,cd" []
+        ["ab{3,cd"]
+        [Just ["ab{3,cd"]]
+
+    , testRegex "ab{3,4a}cd" []
+        ["ab{3,4a}cd"]
+        [Just ["ab{3,4a}cd"]]
+
+    , testRegex "{4,5a}bc" []
+        ["{4,5a}bc"]
+        [Just ["{4,5a}bc"]]
+
+    , testRegex "abc$" []
+        ["abc",
+         "abc\n",
+         "*** Failers",
+         "abc\ndef"]
+        [Just ["abc"],
+         Just ["abc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "(abc)\\123" []
+        ["abc\x53"]
+        [Just ["abcS", "abc"]]
+
+    , testRegex "(abc)\\223" []
+        ["abc\x93"]
+        [Just ["abc\x93", "abc"]]
+
+    , testRegex "(abc)\\323" []
+        ["abc\xd3"]
+        [Just ["abc\xd3", "abc"]]
+
+    , testRegex "(abc)\\100" []
+        ["abc\x40",
+         "abc\o100"]
+        [Just ["abc@", "abc"],
+         Just ["abc@", "abc"]]
+
+    , testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\12\\123" []
+        ["abcdefghijkllS"]
+        [Just ["abcdefghijkllS",
+             "a",
+             "b",
+             "c",
+             "d",
+             "e",
+             "f",
+             "g",
+             "h",
+             "i",
+             "j",
+             "k",
+             "l"]]
+
+     , testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123" []
+        ["abcdefghijk\o12S"]
+        [Just ["abcdefghijk\x0aS",
+             "a",
+             "b",
+             "c",
+             "d",
+             "e",
+             "f",
+             "g",
+             "h",
+             "i",
+             "j",
+             "k"]]
+
+    , testRegex "ab\\idef" []
+        ["abidef"]
+        [Just ["abidef"]]
+
+    , testRegex "a{0}bc" []
+        ["bc"]
+        [Just ["bc"]]
+
+    , testRegex "(a|(bc)){0,0}?xyz" []
+        ["xyz"]
+        [Just ["xyz"]]
+
+    , testRegex "(?s)a.b" []
+        ["a\nb"]
+        [Just ["a\nb"]]
+
+    , testRegex "^([^a])([^\\b])([^c]*)([^d]{3,4})" []
+        ["baNOTccccd",
+         "baNOTcccd",
+         "baNOTccd",
+         "bacccd",
+         "anything",
+         "b\bc   ",
+         "baccd"]
+        [Just ["baNOTcccc", "b", "a", "NOT", "cccc"],
+         Just ["baNOTccc", "b", "a", "NOT", "ccc"],
+         Just ["baNOTcc", "b", "a", "NO", "Tcc"],
+         Just ["baccc", "b", "a", "", "ccc"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^\\d{8,}\\@.+[^k]$" []
+        ["12345678@a.b.c.d",
+         "123456789@x.y.z",
+         "*** Failers",
+         "12345678@x.y.uk",
+         "1234567@a.b.c.d       "]
+        [Just ["12345678@a.b.c.d"],
+         Just ["123456789@x.y.z"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "(a)\\1{8,}" []
+        ["aaaaaaaaa",
+         "aaaaaaaaaa",
+         "*** Failers",
+         "aaaaaaa   "]
+        [Just ["aaaaaaaaa", "a"],
+         Just ["aaaaaaaaaa", "a"],
+         Nothing,
+         Nothing]
+
+    , testRegex "[^a]" []
+        ["aaaabcd",
+         "aaAabcd "]
+        [Just ["b"],
+         Just ["A"]]
+
+    , testRegex "[^a]" [caseless]
+        ["aaaabcd",
+         "aaAabcd "]
+        [Just ["b"],
+         Just ["b"]]
+
+    , testRegex "[^az]" []
+        ["aaaabcd",
+         "aaAabcd "]
+        [Just ["b"],
+         Just ["A"]]
+
+    , testRegex "[^az]" [caseless]
+        ["aaaabcd",
+         "aaAabcd "]
+        [Just ["b"],
+         Just ["b"]]
+
+    , testRegex "P[^*]TAIRE[^*]{1,6}?LL" []
+        ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
+        [Just ["PSTAIREISLL"]]
+
+    , testRegex "P[^*]TAIRE[^*]{1,}?LL" []
+        ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
+        [Just ["PSTAIREISLL"]]
+
+    , testRegex "(.*?)(\\d+)" []
+        ["I have 2 numbers: 53147"]
+        [Just ["I have 2", "I have ", "2"]]
+
+    , testRegex "(.*)(\\d+)$" []
+        ["I have 2 numbers: 53147"]
+        [Just ["I have 2 numbers: 53147", "I have 2 numbers: 5314", "7"]]
+
+    , testRegex "(.*?)(\\d+)$" []
+        ["I have 2 numbers: 53147"]
+        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]
+
+    , testRegex "(.*)\\b(\\d+)$" []
+        ["I have 2 numbers: 53147"]
+        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]
+
+    , testRegex "(.*\\D)(\\d+)$" []
+        ["I have 2 numbers: 53147"]
+        [Just ["I have 2 numbers: 53147", "I have 2 numbers: ", "53147"]]
+
+    , testRegex "word (?:[a-zA-Z0-9]+ ){0,10}otherword" []
+        ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
+         "word cat dog elephant mussel cow horse canary baboon snake shark"]
+        [Just ["word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
+         Nothing]
+
+    , testRegex "word (?:[a-zA-Z0-9]+ ){0,300}otherword" []
+        ["word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
+        [Nothing]
+    , testRegex "^(a){0,0}" []
+        ["bcd",
+         "abc",
+         "aab     "]
+        [Just [""],
+         Just [""],
+         Just [""]]
+
+    , testRegex "^(a){0,1}" []
+        ["bcd",
+         "abc",
+         "aab  "]
+        [Just [""],
+         Just ["a", "a"],
+         Just ["a", "a"]]
+
+    , testRegex "^(a){0,2}" []
+        ["bcd",
+         "abc",
+         "aab  "]
+        [Just [""],
+         Just ["a", "a"],
+         Just ["aa", "a"]]
+
+    , testRegex "^(a){0,3}" []
+        ["bcd",
+         "abc",
+         "aab",
+         "aaa   "]
+        [Just [""],
+         Just ["a", "a"],
+         Just ["aa", "a"],
+         Just ["aaa", "a"]]
+
+    , testRegex "^(a){0,3}" []
+        ["bcd",
+         "abc",
+         "aab",
+         "aaa   "]
+        [Just [""],
+         Just ["a", "a"],
+         Just ["aa", "a"],
+         Just ["aaa", "a"]]
+
+    , testRegex "^(a){0,}" []
+        ["bcd",
+         "abc",
+         "aab",
+         "aaa",
+         "aaaaaaaa    "]
+        [Just [""],
+         Just ["a", "a"],
+         Just ["aa", "a"],
+         Just ["aaa", "a"],
+         Just ["aaaaaaaa", "a"]]
+
+    , testRegex "^(a){1,1}" []
+        ["bcd",
+         "abc",
+         "aab  "]
+        [Nothing,
+         Just ["a", "a"],
+         Just ["a", "a"]]
+
+    , testRegex "^(a){1,2}" []
+        ["bcd",
+         "abc",
+         "aab  "]
+        [Nothing,
+         Just ["a", "a"],
+         Just ["aa", "a"]]
+
+    , testRegex "^(a){1,3}" []
+        ["bcd",
+         "abc",
+         "aab",
+         "aaa   "]
+        [Nothing,
+         Just ["a", "a"],
+         Just ["aa", "a"],
+         Just ["aaa", "a"]]
+
+    , testRegex ".*\\.gif" []
+        ["borfle\nbib.gif\nno"]
+        [Just ["bib.gif"]]
+
+    , testRegex ".{0,}\\.gif" []
+        ["borfle\nbib.gif\nno"]
+        [Just ["bib.gif"]]
+
+    , testRegex ".*\\.gif" [multiline]
+        ["borfle\nbib.gif\nno"]
+        [Just ["bib.gif"]]
+
+    , testRegex ".*\\.gif" [dotall]
+        ["borfle\nbib.gif\nno"]
+        [Just ["borfle\nbib.gif"]]
+
+    , testRegex ".*$" [multiline]
+        ["borfle\nbib.gif\nno"]
+        [Just ["borfle"]]
+
+    , testRegex ".*$" [dotall]
+        ["borfle\nbib.gif\nno"]
+        [Just ["borfle\nbib.gif\nno"]]
+
+    , testRegex ".*$" [multiline]
+        ["borfle\nbib.gif\nno\\n"]
+        [Just ["borfle"]]
+
+    , testRegex "(?ms)^B" []
+        ["abc\nB"]
+        [Just ["B"]]
+
+    , testRegex "(?s)B$" []
+        ["B\n"]
+        [Just ["B"]]
+
+    , testRegex "^[abcdefghijklmnopqrstuvwxy0123456789]" []
+        ["n",
+         "z "]
+        [Just ["n"],
+         Nothing]
+
+    , testRegex "abcde{0,0}" []
+        ["abcd",
+         "abce  "]
+        [Just ["abcd"],
+         Nothing]
+
+    , testRegex "^(b+?|a){1,2}?c" []
+        ["bac",
+         "bbac",
+         "bbbac",
+         "bbbbac",
+         "bbbbbac "]
+        [Just ["bac","a"],
+         Just ["bbac","a"],
+         Just ["bbbac","a"],
+         Just ["bbbbac","a"],
+         Just ["bbbbbac","a"]]
+
+    , testRegex "(AB)*?\\1" []
+        ["ABABAB"]
+        [Just ["ABAB", "AB"]]
+
+    , testRegex "(.*(.)?)*" []
+        ["abcd"]
+        [Just ["abcd", ""]]
+
+{-
+    , testRegex "(?:a|)*\\d" []
+        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
+        [Nothing,
+         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
+-}
+
+    , testRegex "^(?:a(?:(?:))+)+" []
+        ["aaaa"]
+        [Just ["aaaa"]]
+
+    , testRegex "^(a()+)+" []
+        ["aaaa"]
+        [Just ["aaaa", "a", ""]]
+
+    , testRegex "^(?:a(?:(?:))*)*" []
+        ["aaaa"]
+        [Just ["aaaa"]]
+
+    , testRegex "^(a()*)*" []
+        ["aaaa"]
+        [Just ["aaaa", "a", ""]]
+
+    , testRegex "^(a){1,}" []
+        ["bcd",
+         "abc",
+         "aab",
+         "aaa",
+         "aaaaaaaa    "]
+        [Nothing,
+         Just ["a", "a"],
+         Just ["aa", "a"],
+         Just ["aaa", "a"],
+         Just ["aaaaaaaa", "a"]]
+
+    , testRegex "(?s)(.*X|^B)" []
+        ["abcde\n1234Xyz",
+         "BarFoo ",
+         "*** Failers ",
+         "abcde\nBar  "]
+        [Just ["abcde\n1234X", "abcde\n1234X"],
+         Just ["B", "B"],
+         Nothing,
+         Nothing]
+
+    , testRegex "(?s:.*X|^B)" []
+        ["abcde\n1234Xyz",
+         "BarFoo ",
+         "*** Failers ",
+         "abcde\nBar  "]
+        [Just ["abcde\n1234X"],
+         Just ["B"],
+         Nothing,
+         Nothing]
+
+    , testRegex "\\w{3}(?<!bar)foo" []
+        ["catfood",
+         "*** Failers",
+         "foo",
+         "barfoo",
+         "towbarfoo"]
+        [Just ["catfoo"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "(?>(\\.\\d\\d[1-9]?))\\d+" []
+        ["1.230003938",
+         "1.875000282",
+         "1.235 "]
+        [Just [".230003938", ".23"],
+         Just [".875000282", ".875"],
+         Nothing]
+
+    , testRegex "^((?>\\w+)|(?>\\s+))*$" []
+        ["now is the time for all good men to come to the aid of the party",
+         "this is not a line with only words and spaces!"]
+        [Just ["now is the time for all good men to come to the aid of the party", "party"],
+         Nothing]
+
+    , testRegex "((?>\\d+))(\\w)" []
+        ["12345a",
+         "12345+ "]
+        [Just ["12345a", "12345", "a"],
+         Nothing]
+
+    , testRegex "(?>a+)b" []
+        ["aaab"]
+        [Just ["aaab"]]
+
+    , testRegex "((?>a+)b)" []
+        ["aaab"]
+        [Just ["aaab", "aaab"]]
+
+    , testRegex "(?>(a+))b" []
+        ["aaab"]
+        [Just ["aaab", "aaa"]]
+    , testRegex "(?>b)+" []
+        ["aaabbbccc"]
+        [Just ["bbb"]]
+
+    , testRegex "(?>a+|b+|c+)*c" []
+        ["aaabbbbccccd"]
+        [Just ["aaabbbbc"]]
+
+    , testRegex "(?:(a)|b)(?(1)A|B)" []
+        ["aA",
+         "bB",
+         "aB",
+         "bA    "]
+        [Just ["aA", "a"],
+         Just ["bB"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a)?(?(1)a|b)+$" []
+        ["aa",
+         "b",
+--       "bb  ", -- ?
+         "ab   "]
+        [Just ["aa", "a"],
+         Just ["b"],
+--       Just ["bb"],
+         Nothing]
+
+    , testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" []
+        ["abc:",
+         "12",
+         "123",
+         "xyz    "]
+        [Just ["abc:"],
+         Just ["12"],
+         Nothing,
+         Nothing]
+
+    , testRegex "(?(?<!foo)cat|bar)" []
+        ["foobar",
+         "cat",
+         "fcat",
+         "focat   ",
+         "foocat  "]
+        [Just ["bar"],
+         Just ["cat"],
+         Just ["cat"],
+         Just ["cat"],
+         Nothing]
+
+    , testRegex "^(?(2)a|(1)(2))+$" []
+        ["12",
+         "12a",
+         "12aa",
+         "*** Failers",
+         "1234    "]
+        [Just ["12", "1", "2"],
+         Just ["12a", "1", "2"],
+         Just ["12aa", "1", "2"],
+         Nothing,
+         Nothing]
+
+    , testRegex "(?<=foo\\n)^bar" [multiline]
+        ["foo\nbar",
+         "*** Failers",
+         "bar",
+         "baz\nbar   "]
+        [Just ["bar"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "(?<=(?<!foo)bar)baz" []
+        ["barbaz",
+         "barbarbaz ",
+         "koobarbaz ",
+         "*** Failers",
+         "baz",
+         "foobarbaz "]
+        [Just ["baz"],
+         Just ["baz"],
+         Just ["baz"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "^(a\\1?){4}$" []
+        ["a",
+         "aa",
+         "aaa",
+         "aaaa",
+         "aaaaa",
+         "aaaaaaa",
+         "aaaaaaaa",
+         "aaaaaaaaa",
+         "aaaaaaaaaa",
+         "aaaaaaaaaaa",
+         "aaaaaaaaaaaa",
+         "aaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaaa               "]
+        [Nothing,
+         Nothing,
+         Nothing,
+         Just ["aaaa", "a"],
+         Just ["aaaaa", "a"],
+         Just ["aaaaaaa", "a"],
+         Nothing,
+         Nothing,
+         Just ["aaaaaaaaaa", "aaaa"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "abc" []
+        ["abc",
+         "xabcy",
+         "ababc",
+         "*** Failers",
+         "xbc",
+         "axc",
+         "abx"]
+        [Just ["abc"],
+         Just ["abc"],
+         Just ["abc"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "ab*c" []
+        ["abc"]
+        [Just ["abc"]]
+    , testRegex "ab*bc" []
+        ["abc",
+         "abbc",
+         "abbbbc"]
+        [Just ["abc"],
+         Just ["abbc"],
+         Just ["abbbbc"]]
+
+    , testRegex ".{1}" []
+        ["abbbbc"]
+        [Just ["a"]]
+
+    , testRegex ".{3,4}" []
+        ["abbbbc"]
+        [Just ["abbb"]]
+
+    , testRegex "ab{0,}bc" []
+        ["abbbbc"]
+        [Just ["abbbbc"]]
+
+    , testRegex "ab+bc" []
+        ["abbc",
+         "abc",
+         "abq"]
+        [Just ["abbc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "ab{1,}bc" []
+        []
+        []
+
+    , testRegex "ab+bc" []
+        ["abbbbc"]
+        [Just ["abbbbc"]]
+
+    , testRegex "ab{1,}bc" []
+        ["abbbbc"]
+        [Just ["abbbbc"]]
+
+    , testRegex "ab{1,3}bc" []
+        ["abbbbc"]
+        [Just ["abbbbc"]]
+
+    , testRegex "ab{3,4}bc" []
+        ["abbbbc"]
+        [Just ["abbbbc"]]
+
+    , testRegex "ab{4,5}bc" []
+        ["*** Failers",
+         "abq",
+         "abbbbc"]
+        [Nothing,
+         Nothing,
+         Nothing]
+
+    , testRegex "ab?bc" []
+        ["abbc",
+         "abc"]
+        [Just ["abbc"],
+         Just ["abc"]]
+
+    , testRegex "ab{0,1}bc" []
+        ["abc"]
+        [Just ["abc"]]
+
+    , testRegex "ab?bc" []
+        []
+        []
+
+    , testRegex "ab?c" []
+        ["abc"]
+        [Just ["abc"]]
+
+    , testRegex "ab{0,1}c" []
+        ["abc"]
+        [Just ["abc"]]
+
+    , testRegex "^abc$" []
+        ["abc",
+         "abbbbc",
+         "abcc"]
+        [Just ["abc"],
+         Nothing,
+         Nothing]
+
+    , testRegex "^abc" []
+        ["abcc"]
+        [Just ["abc"]]
+
+    , testRegex "^abc$" []
+        []
+        []
+
+    , testRegex "abc$" []
+        ["aabc",
+         "*** Failers",
+         "aabc",
+         "aabcd"]
+        [Just ["abc"],
+         Nothing,
+         Just ["abc"],
+         Nothing]
+
+    , testRegex "^" []
+        ["abc"]
+        [Just [""]]
+    ,
+
+    testRegex "$" []
+        ["abc"]
+        [Just [""]]
+    ,
+
+    testRegex "a.c" []
+        ["abc",
+         "axc"]
+        [Just ["abc"],
+         Just ["axc"]]
+    ,
+
+    testRegex "a.*c" []
+        ["axyzc"]
+        [Just ["axyzc"]]
+    ,
+
+    testRegex "a[bc]d" []
+        ["abd",
+         "*** Failers",
+         "axyzd",
+         "abc"]
+        [Just ["abd"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+    testRegex "a[b-d]e" []
+        ["ace"]
+        [Just ["ace"]]
+    ,
+
+    testRegex "a[b-d]" []
+        ["aac"]
+        [Just ["ac"]]
+    ,
+
+    testRegex "a[-b]" []
+        ["a-"]
+        [Just ["a-"]]
+    ,
+
+    testRegex "a[b-]" []
+        ["a-"]
+        [Just ["a-"]]
+    ,
+
+
+    testRegex "a]" []
+        ["a]"]
+        [Just ["a]"]]
+    ,
+
+
+    testRegex "a[]]b" []
+        ["a]b"]
+        [Just ["a]b"]]
+    ,
+
+    testRegex "a[^bc]d" []
+        ["aed",
+         "*** Failers",
+         "abd",
+         "abd"]
+        [Just ["aed"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "a[^-b]c" []
+        ["adc"]
+        [Just ["adc"]]
+    ,
+
+    testRegex "a[^]b]c" []
+        ["adc",
+         "*** Failers",
+         "a-c",
+         "a]c"]
+        [Just ["adc"],
+         Nothing,
+         Just ["a-c"],
+         Nothing]
+    ,
+
+
+    testRegex "\\ba\\b" []
+        ["a-",
+         "-a",
+         "-a-"]
+        [Just ["a"],
+         Just ["a"],
+         Just ["a"]]
+    ,
+
+
+    testRegex "\\by\\b" []
+        ["*** Failers",
+         "xy",
+         "yz",
+         "xyz"]
+        [Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "\\Ba\\B" []
+        ["*** Failers",
+         "a-",
+         "-a",
+         "-a-"]
+        [Just ["a"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+    testRegex "\\By\\b" []
+        ["xy"]
+        [Just ["y"]]
+    ,
+
+
+    testRegex "\\by\\B" []
+        ["yz"]
+        [Just ["y"]]
+    ,
+
+
+    testRegex "\\By\\B" []
+        ["xyz"]
+        [Just ["y"]]
+    ,
+
+    testRegex "\\w" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "\\W" []
+        ["-",
+         "*** Failers",
+         "-",
+         "a"]
+        [Just ["-"],
+         Just ["*"],
+         Just ["-"],
+         Nothing]
+    ,
+
+
+    testRegex "a\\sb" []
+        ["a b"]
+        [Just ["a b"]]
+    ,
+
+
+    testRegex "a\\Sb" []
+        ["a-b",
+         "*** Failers",
+         "a-b",
+         "a b"]
+        [Just ["a-b"],
+         Nothing,
+         Just ["a-b"],
+         Nothing]
+    ,
+
+
+    testRegex "\\d" []
+        ["1"]
+        [Just ["1"]]
+    ,
+
+
+    testRegex "\\D" []
+        ["-",
+         "*** Failers",
+         "-",
+         "1"]
+        [Just ["-"],
+         Just ["*"],
+         Just ["-"],
+         Nothing]
+    ,
+
+
+    testRegex "[\\w]" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "[\\W]" []
+        ["-",
+         "*** Failers",
+         "-",
+         "a"]
+        [Just ["-"],
+         Just ["*"],
+         Just ["-"],
+         Nothing]
+    ,
+
+
+    testRegex "a[\\s]b" []
+        ["a b"]
+        [Just ["a b"]]
+    ,
+
+
+    testRegex "a[\\S]b" []
+        ["a-b",
+         "*** Failers",
+         "a-b",
+         "a b"]
+        [Just ["a-b"],
+         Nothing,
+         Just ["a-b"],
+         Nothing]
+    ,
+
+    testRegex "[\\d]" []
+        ["1"]
+        [Just ["1"]]
+    ,
+
+
+    testRegex "[\\D]" []
+        ["-",
+         "*** Failers",
+         "-",
+         "1"]
+        [Just ["-"],
+         Just ["*"],
+         Just ["-"],
+         Nothing]
+    ,
+
+
+    testRegex "ab|cd" []
+        ["abc",
+         "abcd"]
+        [Just ["ab"],
+         Just ["ab"]]
+    ,
+
+
+
+    testRegex "$b" []
+        []
+        []
+    ,
+
+
+    testRegex "a\\(b" []
+        ["a(b"]
+        [Just ["a(b"]]
+    ,
+
+
+    testRegex "a\\(*b" []
+        ["ab",
+         "a((b"]
+        [Just ["ab"],
+         Just ["a((b"]]
+    ,
+
+
+    testRegex "((a))" []
+        ["abc"]
+        [Just ["a", "a", "a"]]
+    ,
+
+
+    testRegex "(a)b(c)" []
+        ["abc"]
+        [Just ["abc", "a", "c"]]
+
+    ,
+    testRegex "a+b+c" []
+        ["aabbabc"]
+        [Just ["abc"]]
+    ,
+
+
+    testRegex "a{1,}b{1,}c" []
+        ["aabbabc"]
+        [Just ["abc"]]
+    ,
+
+
+    testRegex "a.+?c" []
+        ["abcabc"]
+        [Just ["abc"]]
+    ,
+
+
+    testRegex "(a+|b)*" []
+        ["ab"]
+        [Just ["ab", "b"]]
+    ,
+
+
+    testRegex "(a+|b){0,}" []
+        ["ab"]
+        [Just ["ab", "b"]]
+    ,
+
+
+    testRegex "(a+|b)+" []
+        ["ab"]
+        [Just ["ab","b"]]
+    ,
+
+
+    testRegex "(a+|b){1,}" []
+        ["ab"]
+        [Just ["ab", "b"]]
+    ,
+
+
+    testRegex "(a+|b)?" []
+        ["ab"]
+        [Just ["a", "a"]]
+    ,
+
+
+    testRegex "(a+|b){0,1}" []
+        ["ab"]
+        [Just ["a", "a"]]
+    ,
+
+
+    testRegex "[^ab]*" []
+        ["cde"]
+        [Just ["cde"]]
+
+    ,
+
+    testRegex "abc" []
+        ["b"]
+        [Nothing]
+    ,
+
+
+    testRegex "a*" []
+        [""]
+        [Just [""]]
+    ,
+
+
+    testRegex "([abc])*d" []
+        ["abbbcd"]
+        [Just ["abbbcd", "c"]]
+    ,
+
+
+    testRegex "([abc])*bcd" []
+        ["abcd"]
+        [Just ["abcd", "a"]]
+    ,
+
+
+    testRegex "a|b|c|d|e" []
+        ["e"]
+        [Just ["e"]]
+    ,
+
+
+    testRegex "(a|b|c|d|e)f" []
+        ["ef"]
+        [Just ["ef", "e"]]
+    ,
+
+
+    testRegex "abcd*efg" []
+        ["abcdefg"]
+        [Just ["abcdefg"]]
+    ,
+
+
+    testRegex "ab*" []
+        ["xabyabbbz",
+         "xayabbbz"]
+        [Just ["ab"],
+         Just ["a"]]
+    ,
+
+
+    testRegex "(ab|cd)e" []
+        ["abcde"]
+        [Just ["cde", "cd"]]
+    ,
+
+
+    testRegex "[abhgefdc]ij" []
+        ["hij"]
+        [Just ["hij"]]
+
+    , testRegex "^(ab|cd)e" []
+        []
+        []
+    ,
+
+    testRegex "(abc|)ef" []
+        ["abcdef"]
+        [Just ["ef", ""]]
+    ,
+
+
+    testRegex "(a|b)c*d" []
+        ["abcd"]
+        [Just ["bcd", "b"]]
+    ,
+
+
+    testRegex "(ab|ab*)bc" []
+        ["abc"]
+        [Just ["abc", "a"]]
+    ,
+
+
+    testRegex "a([bc]*)c*" []
+        ["abc"]
+        [Just ["abc", "bc"]]
+    ,
+
+
+    testRegex "a([bc]*)(c*d)" []
+        ["abcd"]
+        [Just ["abcd", "bc", "d"]]
+    ,
+
+
+    testRegex "a([bc]+)(c*d)" []
+        ["abcd"]
+        [Just ["abcd", "bc", "d"]]
+    ,
+
+
+    testRegex "a([bc]*)(c+d)" []
+        ["abcd"]
+        [Just ["abcd", "b", "cd"]]
+    ,
+
+
+    testRegex "a[bcd]*dcdcde" []
+        ["adcdcde"]
+        [Just ["adcdcde"]]
+    ,
+
+
+    testRegex "a[bcd]+dcdcde" []
+        ["*** Failers",
+         "abcde",
+         "adcdcde"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(ab|a)b*c" []
+        ["abc"]
+        [Just ["abc", "ab"]]
+
+    ,
+
+    testRegex "((a)(b)c)(d)" []
+        ["abcd"]
+        [Just ["abcd", "abc", "a", "b", "d"]]
+    ,
+
+
+    testRegex "[a-zA-Z_][a-zA-Z0-9_]*" []
+        ["alpha"]
+        [Just ["alpha"]]
+    ,
+
+
+    testRegex "^a(bc+|b[eh])g|.h$" []
+        ["abh"]
+        [Just ["bh"]]
+    ,
+
+
+    testRegex "(bc+d$|ef*g.|h?i(j|k))" []
+        ["effgz",
+         "ij",
+         "reffgz",
+         "*** Failers",
+         "effg",
+         "bcdd"]
+        [Just ["effgz", "effgz"],
+         Just ["ij", "ij", "j"],
+         Just ["effgz", "effgz"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((((((((((a))))))))))" []
+        ["a"]
+        [Just ["a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]]
+    ,
+
+
+    testRegex "((((((((((a))))))))))\\10" []
+        ["aa"]
+        [Just ["aa", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]]
+    ,
+
+
+    testRegex "(((((((((a)))))))))" []
+        ["a"]
+        [Just ["a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]]
+    ,
+
+
+    testRegex "multiple words of text" []
+        ["*** Failers",
+         "aa",
+         "uh-uh"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "multiple words" []
+        ["multiple words, yeah"]
+        [Just ["multiple words"]]
+    ,
+
+
+    testRegex "(.*)c(.*)" []
+        ["abcde"]
+        [Just ["abcde", "ab", "de"]]
+    ,
+
+    testRegex "\\((.*), (.*)\\)" []
+        ["(a, b)"]
+        [Just ["(a, b)", "a", "b"]]
+    ,
+
+
+    testRegex "[k]" []
+        []
+        []
+    ,
+
+
+    testRegex "abcd" []
+        ["abcd"]
+        [Just ["abcd"]]
+    ,
+
+
+    testRegex "a(bc)d" []
+        ["abcd"]
+        [Just ["abcd", "bc"]]
+    ,
+
+
+    testRegex "a[-]?c" []
+        ["ac"]
+        [Just ["ac"]]
+    ,
+
+
+    testRegex "(abc)\\1" []
+        ["abcabc"]
+        [Just ["abcabc", "abc"]]
+    ,
+
+
+    testRegex "([a-c]*)\\1" []
+        ["abcabc"]
+        [Just ["abcabc", "abc"]]
+    ,
+
+
+    testRegex "(a)|\\1" []
+        ["a",
+         "*** Failers",
+         "ab",
+         "x"]
+        [Just ["a", "a"],
+         Just ["a", "a"],
+         Just ["a", "a"],
+         Nothing]
+    ,
+
+
+    testRegex "(([a-c])b*?\\2)*" []
+        ["ababbbcbc"]
+        [Just ["ababb", "bb", "b"]]
+    ,
+
+
+    testRegex "(([a-c])b*?\\2){3}" []
+        ["ababbbcbc"]
+        [Just ["ababbbcbc", "cbc", "c"]]
+    ,
+    testRegex "((\\3|b)\\2(a)x)+" []
+        ["aaaxabaxbaaxbbax"]
+        [Just ["bbax", "bbax", "b", "a"]]
+    ,
+
+
+    testRegex "((\\3|b)\\2(a)){2,}" []
+        ["bbaababbabaaaaabbaaaabba"]
+        [Just ["bbaaaabba", "bba", "b", "a"]]
+    ,
+
+
+    testRegex "abc" [caseless]
+        ["ABC",
+         "XABCY",
+         "ABABC",
+         "*** Failers",
+         "aaxabxbaxbbx",
+         "XBC",
+         "AXC",
+         "ABX"]
+        [Just ["ABC"],
+         Just ["ABC"],
+         Just ["ABC"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "ab*c" [caseless]
+        ["ABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "ab*bc" [caseless]
+        ["ABC",
+         "ABBC"]
+        [Just ["ABC"],
+         Just ["ABBC"]]
+    ,
+
+
+    testRegex "ab*?bc" [caseless]
+        ["ABBBBC"]
+        [Just ["ABBBBC"]]
+    ,
+
+
+    testRegex "ab{0,}?bc" [caseless]
+        ["ABBBBC"]
+        [Just ["ABBBBC"]]
+    ,
+
+
+    testRegex "ab+?bc" [caseless]
+        ["ABBC"]
+        [Just ["ABBC"]]
+    ,
+
+
+    testRegex "ab+bc" [caseless]
+        ["*** Failers",
+         "ABC",
+         "ABQ"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "ab{1,}bc" [caseless]
+        []
+        []
+    ,
+
+    testRegex "ab+bc" [caseless]
+        ["ABBBBC"]
+        [Just ["ABBBBC"]]
+    ,
+
+
+    testRegex "ab{1,}?bc" [caseless]
+        ["ABBBBC"]
+        [Just ["ABBBBC"]]
+    ,
+
+
+    testRegex "ab{1,3}?bc" [caseless]
+        ["ABBBBC"]
+        [Just ["ABBBBC"]]
+    ,
+
+
+    testRegex "ab{3,4}?bc" [caseless]
+        ["ABBBBC"]
+        [Just ["ABBBBC"]]
+    ,
+
+
+    testRegex "ab{4,5}?bc" [caseless]
+        ["*** Failers",
+         "ABQ",
+         "ABBBBC"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "ab??bc" [caseless]
+        ["ABBC",
+         "ABC"]
+        [Just ["ABBC"],
+         Just ["ABC"]]
+    ,
+
+
+    testRegex "ab{0,1}?bc" [caseless]
+        ["ABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "ab??bc" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "ab??c" [caseless]
+        ["ABC"]
+        [Just ["ABC"]]
+    ,
+
+    testRegex "ab{0,1}?c" [caseless]
+        ["ABC"]
+        [Just ["ABC"]]
+    ,
+    testRegex "^abc$" [caseless]
+        ["ABC",
+         "*** Failers",
+         "ABBBBC",
+         "ABCC"]
+        [Just ["ABC"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "^abc" [caseless]
+        ["ABCC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "^abc$" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "abc$" [caseless]
+        ["AABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "^" [caseless]
+        ["ABC"]
+        [Just [""]]
+    ,
+
+
+    testRegex "$" [caseless]
+        ["ABC"]
+        [Just [""]]
+    ,
+
+
+    testRegex "a.c" [caseless]
+        ["ABC",
+         "AXC"]
+        [Just ["ABC"],
+         Just ["AXC"]]
+    ,
+
+
+    testRegex "a.*?c" [caseless]
+        ["AXYZC"]
+        [Just ["AXYZC"]]
+    ,
+
+
+    testRegex "a.*c" [caseless]
+        ["*** Failers",
+         "AABC",
+         "AXYZD"]
+        [Nothing,
+         Just ["AABC"],
+         Nothing]
+    ,
+
+
+    testRegex "a[bc]d" [caseless]
+        ["ABD"]
+        [Just ["ABD"]]
+    ,
+
+    testRegex "a[b-d]e" [caseless]
+        ["ACE",
+         "ABC",
+         "ABD"]
+        [Just ["ACE"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "a[b-d]" [caseless]
+        ["AAC"]
+        [Just ["AC"]]
+    ,
+
+
+    testRegex "a[-b]" [caseless]
+        ["A-"]
+        [Just ["A-"]]
+    ,
+
+
+    testRegex "a[b-]" [caseless]
+        ["A-"]
+        [Just ["A-"]]
+    ,
+
+
+    testRegex "a]" [caseless]
+        ["A]"]
+        [Just ["A]"]]
+    ,
+
+
+    testRegex "a[]]b" [caseless]
+        ["A]B"]
+        [Just ["A]B"]]
+    ,
+
+
+    testRegex "a[^bc]d" [caseless]
+        ["AED"]
+        [Just ["AED"]]
+    ,
+
+
+    testRegex "a[^-b]c" [caseless]
+        ["ADC",
+         "ABD",
+         "A-C"]
+        [Just ["ADC"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "a[^]b]c" [caseless]
+        ["ADC"]
+        [Just ["ADC"]]
+    ,
+
+
+    testRegex "ab|cd" [caseless]
+        ["ABC",
+         "ABCD"]
+        [Just ["AB"],
+         Just ["AB"]]
+
+    ,
+    testRegex "()ef" [caseless]
+        ["DEF"]
+        [Just ["EF", ""]]
+    ,
+
+
+    testRegex "$b" [caseless]
+        ["A]C",
+         "B"]
+        [Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "a\\(b" [caseless]
+        ["A(B"]
+        [Just ["A(B"]]
+    ,
+
+
+    testRegex "a\\(*b" [caseless]
+        ["AB",
+         "A((B"]
+        [Just ["AB"],
+         Just ["A((B"]]
+    ,
+
+
+
+    testRegex "((a))" [caseless]
+        ["ABC"]
+        [Just ["A", "A", "A"]]
+    ,
+
+
+    testRegex "(a)b(c)" [caseless]
+        ["ABC"]
+        [Just ["ABC", "A", "C"]]
+    ,
+
+
+    testRegex "a+b+c" [caseless]
+        ["AABBABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "a{1,}b{1,}c" [caseless]
+        ["AABBABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "a.+?c" [caseless]
+        ["ABCABC"]
+        [Just ["ABC"]]
+    ,
+
+    testRegex "a.*?c" [caseless]
+        ["ABCABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "a.{0,5}?c" [caseless]
+        ["ABCABC"]
+        [Just ["ABC"]]
+    ,
+
+
+    testRegex "(a+|b)*" [caseless]
+        ["AB"]
+        [Just ["AB", "B"]]
+    ,
+
+
+    testRegex "(a+|b){0,}" [caseless]
+        ["AB"]
+        [Just ["AB", "B"]]
+    ,
+
+
+    testRegex "(a+|b)+" [caseless]
+        ["AB"]
+        [Just ["AB","B"]]
+    ,
+
+
+    testRegex "(a+|b){1,}" [caseless]
+        ["AB"]
+        [Just ["AB", "B"]]
+    ,
+
+
+    testRegex "(a+|b)?" [caseless]
+        ["AB"]
+        [Just ["A", "A"]]
+    ,
+
+
+    testRegex "(a+|b){0,1}" [caseless]
+        ["AB"]
+        [Just ["A", "A"]]
+    ,
+
+
+    testRegex "(a+|b){0,1}?" [caseless]
+        ["AB"]
+        [Just [""]]
+    ,
+
+
+    testRegex "[^ab]*" [caseless]
+        ["CDE"]
+        [Just ["CDE"]]
+    ,
+
+    testRegex "abc" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "a*" [caseless]
+        [""]
+        [Just [""]]
+    ,
+
+
+    testRegex "([abc])*d" [caseless]
+        ["ABBBCD"]
+        [Just ["ABBBCD", "C"]]
+    ,
+
+
+    testRegex "([abc])*bcd" [caseless]
+        ["ABCD"]
+        [Just ["ABCD","A"]]
+    ,
+
+
+    testRegex "a|b|c|d|e" [caseless]
+        ["E"]
+        [Just ["E"]]
+    ,
+
+
+    testRegex "(a|b|c|d|e)f" [caseless]
+        ["EF"]
+        [Just ["EF", "E"]]
+    ,
+
+
+    testRegex "abcd*efg" [caseless]
+        ["ABCDEFG"]
+        [Just ["ABCDEFG"]]
+    ,
+
+
+    testRegex "ab*" [caseless]
+        ["XABYABBBZ",
+         "XAYABBBZ"]
+        [Just ["AB"],
+         Just ["A"]]
+    ,
+
+
+    testRegex "(ab|cd)e" [caseless]
+        ["ABCDE"]
+        [Just ["CDE", "CD"]]
+    ,
+
+
+    testRegex "[abhgefdc]ij" [caseless]
+        ["HIJ"]
+        [Just ["HIJ"]]
+    ,
+
+
+    testRegex "^(ab|cd)e" [caseless]
+        ["ABCDE"]
+        [Nothing]
+    ,
+
+
+    testRegex "(abc|)ef" [caseless]
+        ["ABCDEF"]
+        [Just ["EF", ""]]
+    ,
+
+
+    testRegex "(a|b)c*d" [caseless]
+        ["ABCD"]
+        [Just ["BCD", "B"]]
+    ,
+
+
+    testRegex "(ab|ab*)bc" [caseless]
+        ["ABC"]
+        [Just ["ABC", "A"]]
+    ,
+
+
+    testRegex "a([bc]*)c*" [caseless]
+        ["ABC"]
+        [Just ["ABC", "BC"]]
+    ,
+
+
+    testRegex "a([bc]*)(c*d)" [caseless]
+        ["ABCD"]
+        [Just ["ABCD","BC","D"]]
+    ,
+
+
+    testRegex "a([bc]+)(c*d)" [caseless]
+        ["ABCD"]
+        [Just ["ABCD","BC","D"]]
+    ,
+
+
+    testRegex "a([bc]*)(c+d)" [caseless]
+        ["ABCD"]
+        [Just ["ABCD","B","CD"]]
+    ,
+
+
+    testRegex "a[bcd]*dcdcde" [caseless]
+        ["ADCDCDE"]
+        [Just ["ADCDCDE"]]
+    ,
+
+    testRegex "a[bcd]+dcdcde" [caseless]
+        []
+        []
+    ,
+
+    testRegex "(ab|a)b*c" [caseless]
+        ["ABC"]
+        [Just ["ABC", "AB"]]
+    ,
+
+
+    testRegex "((a)(b)c)(d)" [caseless]
+        ["ABCD"]
+        [Just ["ABCD", "ABC", "A", "B", "D"]]
+    ,
+
+
+    testRegex "[a-zA-Z_][a-zA-Z0-9_]*" [caseless]
+        ["ALPHA"]
+        [Just ["ALPHA"]]
+    ,
+
+
+    testRegex "^a(bc+|b[eh])g|.h$" [caseless]
+        ["ABH"]
+        [Just ["BH"]]
+    ,
+
+
+    testRegex "(bc+d$|ef*g.|h?i(j|k))" [caseless]
+        ["EFFGZ",
+         "IJ",
+         "REFFGZ",
+         "*** Failers",
+         "ADCDCDE",
+         "EFFG",
+         "BCDD"]
+        [Just ["EFFGZ", "EFFGZ"],
+         Just ["IJ", "IJ", "J"],
+         Just ["EFFGZ", "EFFGZ"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((((((((((a))))))))))" [caseless]
+        ["A"]
+        [Just ["A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"]]
+    ,
+
+
+    testRegex "((((((((((a))))))))))\\10" [caseless]
+        ["AA"]
+        [Just ["AA", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"]]
+    ,
+
+
+    testRegex "(((((((((a)))))))))" [caseless]
+        ["A"]
+        [Just ["A", "A", "A", "A", "A", "A", "A", "A", "A", "A"]]
+    ,
+
+
+    testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))" [caseless]
+        ["A"]
+        [Just ["A", "A"]]
+    ,
+
+
+    testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))" [caseless]
+        ["C"]
+        [Just ["C", "C"]]
+    ,
+
+
+    testRegex "multiple words of text" [caseless]
+        ["AA",
+         "UH-UH"]
+        [Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "multiple words" [caseless]
+        ["MULTIPLE WORDS, YEAH"]
+        [Just ["MULTIPLE WORDS"]]
+    ,
+
+
+    testRegex "(.*)c(.*)" [caseless]
+        ["ABCDE"]
+        [Just ["ABCDE", "AB", "DE"]]
+    ,
+
+
+    testRegex "\\((.*), (.*)\\)" [caseless]
+        ["(A, B)"]
+        [Just ["(A, B)", "A", "B"]]
+    ,
+
+
+    testRegex "[k]" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "abcd" [caseless]
+        ["ABCD"]
+        [Just ["ABCD"]]
+    ,
+
+
+    testRegex "a(bc)d" [caseless]
+        ["ABCD"]
+        [Just ["ABCD", "BC"]]
+    ,
+
+
+    testRegex "a[-]?c" [caseless]
+        ["AC"]
+        [Just ["AC"]]
+    ,
+
+
+    testRegex "(abc)\\1" [caseless]
+        ["ABCABC"]
+        [Just ["ABCABC", "ABC"]]
+    ,
+
+
+    testRegex "([a-c]*)\\1" [caseless]
+        ["ABCABC"]
+        [Just ["ABCABC", "ABC"]]
+    ,
+
+    testRegex "a(?!b)." []
+        ["abad"]
+        [Just ["ad"]]
+    ,
+
+
+    testRegex "a(?=d)." []
+        ["abad"]
+        [Just ["ad"]]
+    ,
+
+
+    testRegex "a(?=c|d)." []
+        ["abad"]
+        [Just ["ad"]]
+    ,
+
+
+    testRegex "a(?:b|c|d)(.)" []
+        ["ace"]
+        [Just ["ace", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d)*(.)" []
+        ["ace"]
+        [Just ["ace", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d)+?(.)" []
+        ["ace",
+         "acdbcdbe"]
+        [Just ["ace", "e"],
+         Just ["acd", "d"]]
+    ,
+
+
+    testRegex "a(?:b|c|d)+(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdbe", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){2}(.)" []
+        ["acdbcdbe"]
+        [Just ["acdb", "b"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){4,5}(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdb", "b"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){4,5}?(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcd", "d"]]
+    ,
+
+
+    testRegex "((foo)|(bar))*" []
+        ["foobar"]
+        [Just ["foobar", "bar", "foo", "bar"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){6,7}(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdbe", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){6,7}?(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdbe", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){5,6}(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdbe", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){5,6}?(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdb", "b"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){5,7}(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdbe", "e"]]
+    ,
+
+
+    testRegex "a(?:b|c|d){5,7}?(.)" []
+        ["acdbcdbe"]
+        [Just ["acdbcdb", "b"]]
+    ,
+
+
+    testRegex "a(?:b|(c|e){1,2}?|d)+?(.)" []
+        ["ace"]
+        [Just ["ace", "c", "e"]]
+    ,
+
+
+    testRegex "^(.+)?B" []
+        ["AB"]
+        [Just ["AB", "A"]]
+    ,
+
+
+    testRegex "^([^a-z])|(\\^)$" []
+        ["."]
+        [Just [".", "."]]
+    ,
+
+    testRegex "^[<>]&" []
+        ["<&OUT"]
+        [Just ["<&"]]
+    ,
+
+
+    testRegex "^(a\\1?){4}$" []
+        ["aaaaaaaaaa",
+         "*** Failers",
+         "AB",
+         "aaaaaaaaa",
+         "aaaaaaaaaaa"]
+        [Just ["aaaaaaaaaa", "aaaa"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "^(a(?(1)\\1)){4}$" []
+        ["aaaaaaaaaa",
+         "*** Failers",
+         "aaaaaaaaa",
+         "aaaaaaaaaaa"]
+        [Just ["aaaaaaaaaa", "aaaa"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?:(f)(o)(o)|(b)(a)(r))*" []
+        ["foobar"]
+        [Just ["foobar", "f", "o", "o", "b", "a", "r"]]
+    ,
+
+
+    testRegex "(?<=a)b" []
+        ["ab",
+         "*** Failers",
+         "cb",
+         "b"]
+        [Just ["b"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?<!c)b" []
+        ["ab",
+         "b",
+         "b"]
+        [Just ["b"],
+         Just ["b"],
+         Just ["b"]]
+    ,
+
+
+    testRegex "(?:..)*a" []
+        ["aba"]
+        [Just ["aba"]]
+    ,
+
+
+    testRegex "(?:..)*?a" []
+        ["aba"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "^(?:b|a(?=(.)))*\\1" []
+        ["abc"]
+        [Just ["ab", "b"]]
+    ,
+
+
+    testRegex "^(){3,5}" []
+        ["abc"]
+        [Just ["", ""]]
+    ,
+
+
+    testRegex "^(a+)*ax" []
+        ["aax"]
+        [Just ["aax", "a"]]
+    ,
+
+
+    testRegex "^((a|b)+)*ax" []
+        ["aax"]
+        [Just ["aax", "a", "a"]]
+    ,
+
+
+    testRegex "^((a|bc)+)*ax" []
+        ["aax"]
+        [Just ["aax", "a", "a"]]
+    ,
+
+
+    testRegex "(a|x)*ab" []
+        ["cab"]
+        [Just ["ab"]]
+    ,
+
+
+    testRegex "(a)*ab" []
+        ["cab"]
+        [Just ["ab"]]
+    ,
+
+
+    testRegex "(?:(?i)a)b" []
+        ["ab"]
+        [Just ["ab"]]
+    ,
+
+
+    testRegex "((?i)a)b" []
+        ["ab"]
+        [Just ["ab", "a"]]
+    ,
+
+
+    testRegex "(?:(?i)a)b" []
+        ["Ab"]
+        [Just ["Ab"]]
+    ,
+
+
+    testRegex "((?i)a)b" []
+        ["Ab"]
+        [Just ["Ab", "A"]]
+    ,
+
+
+    testRegex "(?:(?i)a)b" []
+        ["*** Failers",
+         "cb",
+         "aB"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+    testRegex "((?i)a)b" []
+        []
+        []
+    ,
+
+
+    testRegex "(?i:a)b" []
+        ["ab"]
+        [Just ["ab"]]
+    ,
+
+
+    testRegex "((?i:a))b" []
+        ["ab"]
+        [Just ["ab", "a"]]
+    ,
+
+
+    testRegex "(?i:a)b" []
+        ["Ab"]
+        [Just ["Ab"]]
+    ,
+
+
+    testRegex "((?i:a))b" []
+        ["Ab"]
+        [Just ["Ab", "A"]]
+    ,
+
+
+    testRegex "(?i:a)b" []
+        ["*** Failers",
+         "aB",
+         "aB"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?i:a))b" []
+        []
+        []
+    ,
+
+
+    testRegex "(?:(?-i)a)b" [caseless]
+        ["ab"]
+        [Just ["ab"]]
+    ,
+
+
+    testRegex "((?-i)a)b" [caseless]
+        ["ab"]
+        [Just ["ab", "a"]]
+    ,
+
+
+    testRegex "(?:(?-i)a)b" [caseless]
+        ["aB"]
+        [Just ["aB"]]
+    ,
+
+
+    testRegex "((?-i)a)b" [caseless]
+        ["aB"]
+        [Just ["aB", "a"]]
+    ,
+
+
+    testRegex "(?:(?-i)a)b" [caseless]
+        ["*** Failers",
+         "aB",
+         "Ab"]
+        [Nothing,
+         Just ["aB"],
+         Nothing]
+    ,
+
+
+    testRegex "((?-i)a)b" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "(?:(?-i)a)b" [caseless]
+        ["aB"]
+        [Just ["aB"]]
+    ,
+
+
+    testRegex "((?-i)a)b" [caseless]
+        ["aB"]
+        [Just ["aB", "a"]]
+    ,
+
+
+    testRegex "(?:(?-i)a)b" [caseless]
+        ["*** Failers",
+         "Ab",
+         "AB"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?-i)a)b" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "(?-i:a)b" [caseless]
+        ["ab"]
+        [Just ["ab"]]
+    ,
+
+
+    testRegex "((?-i:a))b" [caseless]
+        ["ab"]
+        [Just ["ab", "a"]]
+    ,
+
+
+    testRegex "(?-i:a)b" [caseless]
+        ["aB"]
+        [Just ["aB"]]
+    ,
+
+
+    testRegex "((?-i:a))b" [caseless]
+        ["aB"]
+        [Just ["aB", "a"]]
+    ,
+
+
+    testRegex "(?-i:a)b" [caseless]
+        ["*** Failers",
+         "AB",
+         "Ab"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?-i:a))b" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "(?-i:a)b" [caseless]
+        ["aB"]
+        [Just ["aB"]]
+    ,
+
+
+    testRegex "((?-i:a))b" [caseless]
+        ["aB"]
+        [Just ["aB", "a"]]
+    ,
+
+
+    testRegex "(?-i:a)b" [caseless]
+        ["*** Failers",
+         "Ab",
+         "AB"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?-i:a))b" [caseless]
+        []
+        []
+    ,
+
+
+    testRegex "((?-i:a.))b" [caseless]
+        ["*** Failers",
+         "AB",
+         "a\nB"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?s-i:a.))b" [caseless]
+        ["a\nB"]
+        [Just ["a\nB", "a\n"]]
+    ,
+
+
+    testRegex "(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))" []
+        ["cabbbb"]
+        [Just ["cabbbb"]]
+    ,
+
+    testRegex "(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))" []
+        ["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]
+        [Just ["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]]
+    ,
+
+
+    testRegex "(ab)\\d\\1" [caseless]
+        ["Ab4ab",
+         "ab4Ab"]
+        [Just ["Ab4ab", "Ab"],
+         Just ["ab4Ab", "ab"]]
+    ,
+
+
+    testRegex "foo\\w*\\d{4}baz" []
+        ["foobar1234baz"]
+        [Just ["foobar1234baz"]]
+    ,
+
+
+    testRegex "x(~~)*(?:(?:F)?)?" []
+        ["x~~"]
+        [Just ["x~~", "~~"]]
+    ,
+
+
+    testRegex "^a(?#xxx){3}c" []
+        ["aaac"]
+        [Just ["aaac"]]
+    ,
+
+
+    testRegex "^a (?#xxx) (?#yyy) {3}c" [extended]
+        ["aaac"]
+        [Just ["aaac"]]
+    ,
+
+
+    testRegex "(?<![cd])b" []
+        ["*** Failers",
+         "B\nB",
+         "dbcb"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?<![cd])[ab]" []
+        ["dbaacb"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "(?<!(c|d))b" []
+        []
+        []
+    ,
+
+
+    testRegex "(?<!(c|d))[ab]" []
+        ["dbaacb"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "(?<!cd)[ab]" []
+        ["cdaccb"]
+        [Just ["b"]]
+    ,
+
+{-
+    testRegex "^(?:a?b?)*$" []
+        ["a",
+         "ab",
+         "aaa   ",
+         "*** Failers",
+         "dbcb",
+         "a--",
+         "aa-- "]
+        [Just ["a"],
+         Just ["ab"],
+         Just ["aaa"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+    -}
+
+
+    testRegex "((?s)^a(.))((?m)^b$)" []
+        ["a\nb\nc\n"]
+        [Just ["a\nb", "a\n", "\n", "b"]]
+    ,
+
+
+    testRegex "((?m)^b$)" []
+        ["a\nb\nc\n"]
+        [Just ["b", "b"]]
+    ,
+
+
+    testRegex "(?m)^b" []
+        ["a\nb\n"]
+        [Just ["b"]]
+    ,
+
+
+    testRegex "(?m)^(b)" []
+        ["a\nb\n"]
+        [Just ["b", "b"]]
+    ,
+
+
+    testRegex "((?m)^b)" []
+        ["a\nb\n"]
+        [Just ["b", "b"]]
+    ,
+
+
+    testRegex "\\n((?m)^b)" []
+        ["a\nb\n"]
+        [Just ["\nb", "b"]]
+    ,
+
+
+    testRegex "((?s).)c(?!.)" []
+        ["a\nb\nc\n",
+         "a\nb\nc\n"]
+        [Just ["\nc", "\n"],
+         Just ["\nc", "\n"]]
+    ,
+
+
+    testRegex "((?s)b.)c(?!.)" []
+        ["a\nb\nc\n",
+         "a\nb\nc\n"]
+        [Just ["b\nc", "b\n"],
+         Just ["b\nc", "b\n"]]
+    ,
+
+
+    testRegex "^b" []
+        []
+        []
+    ,
+
+
+    testRegex "()^b" []
+        ["*** Failers",
+         "a\nb\nc\n",
+         "a\nb\nc\n"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?m)^b)" []
+        ["a\nb\nc\n"]
+        [Just ["b", "b"]]
+    ,
+
+
+    testRegex "(?(1)a|b)" []
+        []
+        []
+    ,
+
+
+    testRegex "(?(1)b|a)" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "(x)?(?(1)a|b)" []
+        ["*** Failers",
+         "a",
+         "a"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(x)?(?(1)b|a)" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "()?(?(1)b|a)" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "()(?(1)b|a)" []
+        []
+        []
+    ,
+
+
+    testRegex "()?(?(1)a|b)" []
+        ["a"]
+        [Just ["a", ""]]
+    ,
+
+
+    testRegex "^(\\()?blah(?(1)(\\)))$" []
+        ["(blah)",
+         "blah",
+         "a",
+         "blah)",
+         "(blah"]
+        [Just ["(blah)", "(", ")"],
+         Just ["blah"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "^(\\(+)?blah(?(1)(\\)))$" []
+        ["(blah)",
+         "blah",
+         "*** Failers",
+         "blah)",
+         "(blah"]
+        [Just ["(blah)", "(", ")"], 
+         Just ["blah"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?(?!a)a|b)" []
+        []
+        []
+    ,
+
+
+    testRegex "(?(?!a)b|a)" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "(?(?=a)b|a)" []
+        ["*** Failers",
+         "a",
+         "a"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?(?=a)a|b)" []
+        ["a"]
+        [Just ["a"]]
+    ,
+
+
+    testRegex "(?=(a+?))(\\1ab)" []
+        ["aaab"]
+        [Just ["aab", "a", "aab"]]
+    ,
+
+
+    testRegex "^(?=(a+?))\\1ab" []
+        []
+        []
+    ,
+
+
+    testRegex "(\\w+:)+" []
+        ["one:"]
+        [Just ["one:", "one:"]]
+    ,
+
+
+    testRegex "$(?<=^(a))" []
+        ["a"]
+        [Just ["", "a"]]
+    ,
+
+
+    testRegex "(?=(a+?))(\\1ab)" []
+        ["aaab"]
+        [Just ["aab", "a", "aab"]]
+    ,
+
+
+    testRegex "^(?=(a+?))\\1ab" []
+        ["*** Failers",
+         "aaab",
+         "aaab"]
+        [Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "([\\w:]+::)?(\\w+)$" []
+        ["abcd",
+         "xy:z:::abcd"]
+        [Just ["abcd", "", "abcd"],
+         Just ["xy:z:::abcd", "xy:z:::", "abcd"]]
+    ,
+
+
+    testRegex "^[^bcd]*(c+)" []
+        ["aexycd"]
+        [Just ["aexyc", "c"]]
+    ,
+
+
+    testRegex "(a*)b+" []
+        ["caab"]
+        [Just ["aab", "aa"]]
+    ,
+
+
+    testRegex "([\\w:]+::)?(\\w+)$" []
+        ["abcd",
+         "xy:z:::abcd",
+         "*** Failers",
+         "abcd:",
+         "abcd:"]
+        [Just ["abcd", "", "abcd"],
+         Just ["xy:z:::abcd", "xy:z:::", "abcd"],
+         Just ["Failers", "", "Failers"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "^[^bcd]*(c+)" []
+        ["aexycd"]
+        [Just ["aexyc", "c"]]
+    ,
+
+
+    testRegex "(>a+)ab" []
+        []
+        []
+    ,
+
+
+    testRegex "(?>a+)b" []
+        ["aaab"]
+        [Just ["aaab"]]
+    ,
+
+
+    testRegex "([[:]+)" []
+        ["a:[b]:"]
+        [Just [":[", ":["]]
+
+    ,
+    testRegex "([[=]+)" []
+        ["a=[b]="]
+        [Just ["=[", "=["]]
+    ,
+
+
+    testRegex "([[.]+)" []
+        ["a.[b]."]
+        [Just [".[", ".["]]
+    ,
+
+
+    testRegex "((?>a+)b)" []
+        ["aaab"]
+        [Just ["aaab", "aaab"]]
+    ,
+
+
+    testRegex "(?>(a+))b" []
+        ["aaab"]
+        [Just ["aaab", "aaa"]]
+    ,
+
+
+    testRegex "((?>[^()]+)|\\([^()]*\\))+" []
+        ["((abc(ade)ufh()()x"]
+        [Just ["abc(ade)ufh()()x", "x"]]
+    ,
+
+
+    testRegex "a\\Z" []
+        ["aaab",
+         "a\nb\n"]
+        [Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "b\\Z" []
+        ["a\nb\n"]
+        [Just ["b"]]
+    ,
+
+
+    testRegex "b\\z" []
+        []
+        []
+    ,
+
+
+    testRegex "b\\Z" []
+        ["a\\nb"]
+        [Just ["b"]]
+    ,
+
+    testRegex "(?>.*)(?<=(abcd|wxyz))" []
+        ["alphabetabcd",
+         "endingwxyz",
+         "*** Failers",
+         "a rather long string that doesn't end with one of them"]
+        [Just ["alphabetabcd", "abcd"],
+         Just ["endingwxyz", "wxyz"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" []
+        ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
+         "word cat dog elephant mussel cow horse canary baboon snake shark"
+         ]
+        [Just ["word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
+         Nothing]
+    ,
+
+    testRegex "((Z)+|A)*" []
+        ["ZABCDEFG"]
+        [Just ["ZA", "A", "Z"]]
+    ,
+
+
+    testRegex "(Z()|A)*" []
+        ["ZABCDEFG"]
+        [Just ["ZA", "A", ""]]
+    ,
+
+
+    testRegex "(Z(())|A)*" []
+        ["ZABCDEFG"]
+        [Just ["ZA", "A", "", ""]]
+    ,
+
+    testRegex "((?>Z)+|A)*" []
+        ["ZABCDEFG"]
+        [Just ["ZA", "A"]]
+    ,
+
+
+    testRegex "((?>)+|A)*" []
+        ["ZABCDEFG"]
+        [Just ["", ""]]
+    ,
+
+
+
+    testRegex "^[a-\\d]" []
+        ["abcde",
+         "-things",
+         "0digit",
+         "*** Failers",
+         "bcdef    "]
+        [Just ["a"],
+         Just ["-"],
+         Just ["0"],
+         Nothing,
+         Nothing]
+    ,
+
+    testRegex "\\Qabc\\$xyz\\E" []
+        ["abc\\$xyz"]
+        [Just ["abc\\$xyz"]]
+    ,
+    testRegex "\\Qabc\\E\\$\\Qxyz\\E" []
+        ["abc$xyz"]
+        [Just ["abc$xyz"]]
+    ,
+    testRegex "\\Gabc" []
+        ["abc",
+         "*** Failers",
+         "xyzabc  "]
+        [Just ["abc"],
+         Nothing,
+         Nothing]
+    ,
+
+    testRegex "a(?x: b c )d" []
+        ["XabcdY",
+         "*** Failers ",
+         "Xa b c d Y "]
+        [Just ["abcd"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?x)x y z | a b c)" []
+        ["XabcY",
+         "AxyzB "]
+        [Just ["abc", "abc"],
+         Just ["xyz", "xyz"]]
+    ,
+
+
+    testRegex "(?i)AB(?-i)C" []
+        ["XabCY",
+         "*** Failers",
+         "XabcY  "]
+        [Just ["abC"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "((?i)AB(?-i)C|D)E" []
+        ["abCE",
+         "DE",
+         "*** Failers",
+         "abcE",
+         "abCe  ",
+         "dE",
+         "De    "]
+        [Just ["abCE", "abC"],
+         Just ["DE", "D"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(.*)\\d+\\1" []
+        ["abc123abc",
+         "abc123bc "]
+        [Just ["abc123abc", "abc"],
+         Just ["bc123bc", "bc"]]
+    ,
+
+    testRegex "[z\\Qa-d]\\E]" []
+        ["z",
+         "a",
+         "-",
+         "d",
+         "] ",
+         "*** Failers",
+         "b     "]
+        [Just ["z"],
+         Just ["a"],
+         Just ["-"],
+         Just ["d"],
+         Just ["]"],
+         Just ["a"],
+         Nothing]
+
+    , testRegex "(?<=Z)X." []
+        ["\\x84XAZXB"]
+        [Just ["XB"]]
+    ,
+
+    testRegex "ab cd (?x) de fg" []
+        ["ab cd defg"]
+        [Just ["ab cd defg"]]
+    ,
+
+
+    testRegex "ab cd(?x) de fg" []
+        ["ab cddefg",
+         "** Failers ",
+         "abcddefg"]
+        [Just ["ab cddefg"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?<![^f]oo)(bar)" []
+        ["foobarX ",
+         "** Failers ",
+         "boobarX"]
+        [Just ["bar", "bar"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?<![^f])X" []
+        ["offX",
+         "** Failers",
+         "onyX  "]
+        [Just ["X"],
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(?<=[^f])X" []
+        ["onyX",
+         "** Failers",
+         "offX "]
+        [Just ["X"],
+         Nothing,
+         Nothing]
+    ,
+
+
+
+    testRegex "(?:(?(1)a|b)(X))+" []
+        ["bXaX"]
+        [Just ["bXaX", "X"]]
+    ,
+
+    testRegex "(?:(?(1)\\1a|b)(X|Y))+" []
+        ["bXXaYYaY",
+         "bXYaXXaX  "]
+        [Just ["bXXaYYaY", "Y"],
+         Just ["bX", "X"]]
+    ,
+
+
+    testRegex "()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+" []
+        ["bXXaYYaY"]
+        [Just ["bX", "", "", "", "", "", "", "", "", "", "X"]]
+    ,
+
+
+    testRegex "[[,abc,]+]" []
+        ["abc]",
+         "a,b]",
+         "[a,b,c]  "]
+        [Just ["abc]"],
+         Just ["a,b]"],
+         Just ["[a,b,c]"]]
+    ,
+
+
+
+
+    testRegex "a*b*\\w" []
+        ["aaabbbb",
+         "aaaa",
+         "a"]
+        [Just ["aaabbbb"],
+         Just ["aaaa"],
+         Just ["a"]]
+    ,
+
+
+    testRegex "a*b?\\w" []
+        ["aaabbbb",
+         "aaaa",
+         "a"]
+        [Just ["aaabb"],
+         Just ["aaaa"],
+         Just ["a"]]
+    ,
+
+
+    testRegex "a*b{0,4}\\w" []
+        ["aaabbbb",
+         "aaaa",
+         "a"]
+        [Just ["aaabbbb"],
+         Just ["aaaa"],
+         Just ["a"]]
+    ,
+
+
+    testRegex "(?=(\\w+))\\1:" []
+        ["abcd:"]
+        [Just ["abcd:", "abcd"]]
+    ,
+
+
+    testRegex "^(?=(\\w+))\\1:" []
+        ["abcd:"]
+        [Just ["abcd:", "abcd"]]
+    ,
+
+
+
+    testRegex "^[a\\E\\E-\\Ec]" []
+        ["b",
+         "** Failers",
+         "-",
+         "E    "]
+        [Just ["b"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+    testRegex "(a){0,3}(?(1)b|(c|))*D" []
+        ["abbD",
+         "ccccD",
+         "D  "]
+        [Just ["abbD", "a"],
+         Just ["ccccD", "", ""],
+         Just ["D", "", ""]]
+    ,
+
+
+    -- WARNING: at around this point, the file starts segfaulting ghci....
+    testRegex "(a|)*\\d" []
+        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
+        [Nothing,
+         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4", ""]]
+
+    ,
+    testRegex "(?>a|)*\\d" []
+        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
+        [Nothing,
+         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
+
+    ,
+
+    testRegex "(?=(\\w+))\\1:" []
+        ["abcd:"]
+        [Just ["abcd:", "abcd"]]
+    ,
+
+
+    testRegex "^(?=(\\w+))\\1:" []
+        ["abcd:"]
+        [Just ["abcd:", "abcd"]]
+    ,
+
+
+
+    testRegex "^[a\\E\\E-\\Ec]" []
+        ["b",
+         "** Failers",
+         "-",
+         "E    "]
+        [Just ["b"],
+         Nothing,
+         Nothing,
+         Nothing]
+    ,
+
+
+
+
+
+
+
+    testRegex "(a){0,3}(?(1)b|(c|))*D" []
+        ["abbD",
+         "ccccD",
+         "D  "]
+        [Just ["abbD", "a"],
+         Just ["ccccD", "", ""],
+         Just ["D", "", ""]]
+    ,
+
+
+    testRegex "(a|)*\\d" []
+        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
+        [Nothing,
+         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4", ""]]
+    ,
+
+
+    testRegex "(?>a|)*\\d" []
+        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
+        [Nothing,
+         Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
+    ,
+
+    testRegex "( (A | (?(1)0|) )*   )" [extended]
+        ["abcd"]
+        [Just ["", "", ""]]
+
+    ,
+    testRegex "^[\\w]+" []
+        ["*** Failers",
+         "\201cole"]
+        [Nothing,
+         Nothing]
+
+
+
+    ,
+    testRegex "^[\\w]+" []
+        ["*** Failers",
+         "\201cole"]
+        [Nothing,
+         Nothing]
+
+{-
+    ,
+
+    testRegex "(a.b(?s)c.d|x.y)p.q" []
+        ["a+bc+dp+q",
+         "a+bc\ndp+q",
+         "x\nyp+q ",
+         "a\nbc\ndp+q",
+         "a+bc\ndp\nq",
+         "x\nyp\nq "
+         ]
+        [Just ["a+bc+dp+q"],
+         Just ["a+bc\ndp+q"],
+         Just ["x\nyp+q"],
+         Nothing,
+         Nothing,
+         Nothing
+         ]
+         -}
+
+    ,
+    testRegex "a\\d\\z" []
+        ["ba0",
+         "*** Failers",
+         "ba0\n",
+         "ba0\ncd   "]
+        [Just ["a0"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    ,
+    testRegex "a\\d\\Z" []
+        ["ba0",
+         "ba0\n",
+         "ba0\ncd   "]
+        [Just ["a0"],
+         Just ["a0"],
+         Nothing]
+
+    ,
+    testRegex "a\\d$" []
+        ["ba0",
+         "ba0\n",
+         "*** Failers",
+         "ba0\ncd   "]
+        [Just ["a0"],
+         Just ["a0"],
+         Nothing,
+         Nothing]
+    ,
+    testRegex "a+" []
+        ["aaaa"]
+        [Just ["aaaa"]]
+
+
+
+    ,
+    testRegex "^\\d{2,3}X" []
+        ["12X",
+         "123X",
+         "*** Failers",
+         "X",
+         "1X",
+         "1234X     "]
+        [Just ["12X"],
+         Just ["123X"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+
+    ,
+    testRegex "^[abcd]\\d" []
+        ["a45",
+         "b93",
+         "c99z",
+         "d04",
+         "*** Failers",
+         "e45",
+         "abcd      ",
+         "abcd1234",
+         "1234  "]
+        [Just ["a4"],
+         Just ["b9"],
+         Just ["c9"],
+         Just ["d0"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+
+{-
+    ,
+    testRegex "^(a*\\w|ab)=(a*\\w|ab)" []
+        ["ab=ab"]
+        [Just ["ab=ab", "ab"]]
+        -}
+
+
+    ,
+    testRegex "^(a*\\w|ab)=(?1)" []
+        ["ab=ab"]
+        [Just ["ab=ab", "ab"]]
+
+
+{-
+    ,
+    testRegex "^([^()]|\\((?1)*\\))*$" []
+        ["abc",
+         "a(b)c",
+         "a(b(c))d  ",
+         "*** Failers)",
+         "a(b(c)d  "]
+        [Just ["abc"],
+         Just ["a(b)c"],
+         Just ["a(b(c))d"],
+         Nothing,
+         Nothing]
+
+    ,
+    testRegex "^>abc>([^()]|\\((?1)*\\))*<xyz<$" []
+        [">abc>123<xyz<",
+         ">abc>1(2)3<xyz<",
+         ">abc>(1(2)3)<xyz<"]
+        [Just [">abc>123<xyz<"],
+         Just [">abc>1(2)3<xyz<"],
+         Just [">abc>(1(2)3)<xyz<"]]
+
+-}
+
+    ,
+    testRegex "^(?>a*)\\d" []
+        ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876",
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
+        [Just ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9"],
+         Nothing]
+
+
+
+
+
+    ,
+    testRegex "(?<=abc|xy)123" []
+        ["abc12345",
+         "wxy123z",
+         "*** Failers",
+         "123abc"]
+        [Just ["123"],
+         Just ["123"],
+         Nothing,
+         Nothing]
+
+
+    ,
+    testRegex "(?<!abc|xy)123" []
+        ["123abc",
+         "mno123456 ",
+         "*** Failers",
+         "abc12345",
+         "wxy123z"]
+        [Just ["123"],
+         Just ["123"],
+         Nothing,
+         Nothing,
+         Nothing]
+
+    ,
+    testRegex "abc(?C1)xyz" []
+        ["abcxyz",
+         "123abcxyz999 "]
+        [ Just ["abcxyz"],
+         Just ["abcxyz"]]
+
+
+
+
+
+{-
+    ,
+    testRegex "\\Gabc" []
+        ["abcdef",
+         "defabcxyz\\>3 ",
+         "defabcxyz"]
+        [Just ["abc"],
+         Just ["abc"],
+         Nothing]
+         -}
+
+    ,
+
+    testRegex "[\\xFF]" []
+        [">\xff<"]
+        [Just ["\xff"]]
+
+    ,
+    testRegex "[^\\xFF]" []
+        ["XYZ"]
+        [Just ["X"]]
+
+
+    ,
+    testRegex "^\\pN{2,3}X" []
+        ["12X",
+         "123X",
+         "*** Failers",
+         "X",
+         "1X",
+         "1234X     "]
+        [Just ["12X"],
+         Just ["123X"],
+         Nothing,
+         Nothing,
+         Nothing,
+         Nothing]
+
+
+ ]
diff --git a/tests/failure1.hs b/tests/failure1.hs
new file mode 100644
--- /dev/null
+++ b/tests/failure1.hs
@@ -0,0 +1,5 @@
+import Text.Regex.PCRE.Light.Char8
+
+main = do
+    let r = compile "(a|)*\\d" []
+    print (match r "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" [])
diff --git a/tests/testdata/regex1.tests b/tests/testdata/regex1.tests
deleted file mode 100644
--- a/tests/testdata/regex1.tests
+++ /dev/null
@@ -1,4838 +0,0 @@
-
-
-testRegex "^(a){1,}" []
-    ["bcd",
-     "abc",
-     "aab",
-     "aaa",
-     "aaaaaaaa    "]
-    [Nothing,
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: aaa"],
-     Just [" 1: a"],
-     Just [" 0: aaaaaaaa"],
-     Just [" 1: a"]]
-,
-
-
-
-
-
-
-
-
-
-
-
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno\\n"]
-    [Just [" 0: borfle\\x0abib.gif\\x0ano\\x0a"]]
-,
-
-
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno\\n",
-     "",
-     "/(.*X|^B)/",
-     "abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers",
-     "abcde\\nBar  "]
-    [Just [" 0: borfle\\x0abib.gif\\x0ano\\x0a"],
-     Just ["/(.*X|^B)/"],
-     Just [" 0: 1234X"],
-     Just [" 1: 1234X"],
-     Just [" 0: B"],
-     Just [" 1: B"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(.*X|^B)" [ERROR]
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "abcde\\nBar  "]
-    [Just [" 0: 1234X"],
-     Just [" 1: 1234X"],
-     Just [" 0: B"],
-     Just [" 1: B"],
-     Just [" 0: B"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(.*X|^B)" [ERROR]
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 1: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Just [" 1: B"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(.*X|^B)" [ERROR]
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 1: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Just [" 1: B"],
-     Just [" 0: B"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(?s)(.*X|^B)" []
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers ",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 1: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Just [" 1: B"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?s:.*X|^B)" []
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers ",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^.*B" []
-    ["**** Failers",
-     "abc\\nB",
-     "",
-     "/(?s)^.*B/",
-     "abc\\nB"]
-    [Nothing,
-     Nothing,
-     Just ["/(?s)^.*B/"],
-     Just [" 0: abc\\x0aB"]]
-,
-
-
-testRegex "(?m)^.*B" []
-    ["abc\\nB",
-     "",
-     "/(?ms)^.*B/",
-     "abc\\nB"]
-    [Just [" 0: B"],
-     Just ["/(?ms)^.*B/"],
-     Just [" 0: abc\\x0aB"]]
-,
-
-
-
-
-testRegex "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" []
-    ["123456654321",
-     "",
-     "/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/",
-     "123456654321 "]
-    [Just [" 0: 123456654321"],
-     Just ["/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/"],
-     Just [" 0: 123456654321"]]
-,
-
-
-testRegex "^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]" []
-    ["123456654321",
-     "",
-     "/^[abc]{12}/",
-     "abcabcabcabc",
-     "",
-     "/^[a-c]{12}/",
-     "abcabcabcabc",
-     "",
-     "/^(a|b|c){12}/",
-     "abcabcabcabc "]
-    [Just [" 0: 123456654321"],
-     Just ["/^[abc]{12}/"],
-     Just [" 0: abcabcabcabc"],
-     Just ["/^[a-c]{12}/"],
-     Just [" 0: abcabcabcabc"],
-     Just ["/^(a|b|c){12}/"],
-     Just [" 0: abcabcabcabc"],
-     Just [" 1: c"]]
-,
-
-
-
-
-
-testRegex "" [ERROR]
-    ["abc"]
-    [Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "]]
-,
-
-
-testRegex "<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>" [ERROR]
-    ["<TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>"]
-    [Just [" 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>"],
-     Just [" 1:  BGCOLOR='#DBE9E9'"],
-     Just [" 2:  align=left valign=top"],
-     Just [" 3: 43."],
-     Just [" 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)"],
-     Just [" 5: "],
-     Just [" 6: "],
-     Just [" 7: <unset>"],
-     Just [" 8:  align=left valign=top"],
-     Just [" 9: Lega lstaff.com"],
-     Just ["10:  align=left valign=top"],
-     Just ["11: CA - Statewide"]]
-,
-
-
-testRegex "a[^a]b" []
-    ["acb",
-     "a\\nb",
-     "",
-     "/a.b/",
-     "acb",
-     "*** Failers ",
-     "a\\nb   ",
-     "",
-     "/a[^a]b/s",
-     "acb",
-     "a\\nb  ",
-     "",
-     "/a.b/s",
-     "acb",
-     "a\\nb  "]
-    [Just [" 0: acb"],
-     Just [" 0: a\\x0ab"],
-     Just ["/a.b/"],
-     Just [" 0: acb"],
-     Nothing,
-     Nothing,
-     Just ["/a[^a]b/s"],
-     Just [" 0: acb"],
-     Just [" 0: a\\x0ab"],
-     Just ["/a.b/s"],
-     Just [" 0: acb"],
-     Just [" 0: a\\x0ab"]]
-,
-
-
-
-testRegex "^(b+|a){1,2}?c" []
-    ["bac",
-     "bbac",
-     "bbbac",
-     "bbbbac",
-     "bbbbbac ",
-     "",
-     "/(?!\\A)x/m",
-     "x\\nb\\n",
-     "a\\bx\\n  ",
-     "",
-     "/\\x0{ab}/",
-     "\\0{ab} "]
-    [Just [" 0: bac"],
-     Just [" 1: a"],
-     Just [" 0: bbac"],
-     Just [" 1: a"],
-     Just [" 0: bbbac"],
-     Just [" 1: a"],
-     Just [" 0: bbbbac"],
-     Just [" 1: a"],
-     Just [" 0: bbbbbac"],
-     Just [" 1: a"],
-     Just ["/(?!\\A)x/m"],
-     Nothing,
-     Just [" 0: x"],
-     Just ["/\\x0{ab}/"],
-     Just [" 0: \\x00{ab}"]]
-,
-
-
-
-
-testRegex "(AB)*\\1" []
-    ["ABABAB",
-     "",
-     "/(?<!bar)foo/",
-     "foo",
-     "catfood",
-     "arfootle",
-     "rfoosh",
-     "*** Failers",
-     "barfoo",
-     "towbarfoo"]
-    [Just [" 0: ABABAB"],
-     Just [" 1: AB"],
-     Just ["/(?<!bar)foo/"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "\\w{3}(?<!bar)foo" []
-    ["catfood",
-     "*** Failers",
-     "foo",
-     "barfoo",
-     "towbarfoo"]
-    [Just [" 0: catfoo"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<=(foo)a)bar" []
-    ["fooabar",
-     "*** Failers",
-     "bar",
-     "foobbar",
-     "",
-     "/\\Aabc\\z/m",
-     "abc",
-     "*** Failers",
-     "abc\\n   ",
-     "qqq\\nabc",
-     "abc\\nzzz",
-     "qqq\\nabc\\nzzz"]
-    [Just [" 0: bar"],
-     Just [" 1: foo"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\Aabc\\z/m"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?>.*/)foo" [ERROR]
-    ["/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/"]
-    [Nothing]
-,
-
-
-testRegex "(?>.*/)foo" [ERROR]
-    ["/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo"]
-    [Just [" 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo"]]
-,
-
-
-testRegex "(?>(\\.\\d\\d[1-9]?))\\d+" []
-    ["1.230003938",
-     "1.875000282",
-     "*** Failers ",
-     "1.235 "]
-    [Just [" 0: .230003938"],
-     Just [" 1: .23"],
-     Just [" 0: .875000282"],
-     Just [" 1: .875"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^((?>\\w+)|(?>\\s+))*$" []
-    ["now is the time for all good men to come to the aid of the party",
-     "*** Failers",
-     "this is not a line with only words and spaces!",
-     "",
-     "/(\\d+)(\\w)/",
-     "12345a",
-     "12345+ "]
-    [Just [" 0: now is the time for all good men to come to the aid of the party"],
-     Just [" 1: party"],
-     Nothing,
-     Nothing,
-     Just ["/(\\d+)(\\w)/"],
-     Just [" 0: 12345a"],
-     Just [" 1: 12345"],
-     Just [" 2: a"],
-     Just [" 0: 12345"],
-     Just [" 1: 1234"],
-     Just [" 2: 5"]]
-,
-
-
-testRegex "((?>\\d+))(\\w)" []
-    ["12345a",
-     "*** Failers",
-     "12345+ "]
-    [Just [" 0: 12345a"],
-     Just [" 1: 12345"],
-     Just [" 2: a"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?>a+)b" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-
-
-testRegex "((?>a+)b)" []
-    ["aaab"]
-    [Just [" 0: aaab"],
-     Just [" 1: aaab"]]
-,
-
-
-testRegex "(?>(a+))b" []
-    ["aaab"]
-    [Just [" 0: aaab"],
-     Just [" 1: aaa"]]
-,
-
-
-testRegex "(?>b)+" []
-    ["aaabbbccc"]
-    [Just [" 0: bbb"]]
-,
-
-
-testRegex "(?>a+|b+|c+)*c" []
-    ["aaabbbbccccd"]
-    [Just [" 0: aaabbbbc"]]
-,
-
-
-testRegex "((?>[^()]+)|\\([^()]*\\))+" []
-    ["((abc(ade)ufh()()x",
-     "",
-     "/\\(((?>[^()]+)|\\([^()]+\\))+\\)/ ",
-     "(abc)",
-     "(abc(def)xyz)",
-     "*** Failers",
-     "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   "]
-    [Just [" 0: abc(ade)ufh()()x"],
-     Just [" 1: x"],
-     Just ["/\\(((?>[^()]+)|\\([^()]+\\))+\\)/ "],
-     Just [" 0: (abc)"],
-     Just [" 1: abc"],
-     Just [" 0: (abc(def)xyz)"],
-     Just [" 1: xyz"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a(?-i)b" [caseless]
-    ["ab",
-     "Ab",
-     "*** Failers ",
-     "aB",
-     "AB",
-     "",
-     "/(a (?x)b c)d e/",
-     "a bcd e",
-     "*** Failers",
-     "a b cd e",
-     "abcd e   ",
-     "a bcde ",
-     "",
-     "/(a b(?x)c d (?-x)e f)/",
-     "a bcde f",
-     "*** Failers",
-     "abcdef  "]
-    [Just [" 0: ab"],
-     Just [" 0: Ab"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(a (?x)b c)d e/"],
-     Just [" 0: a bcd e"],
-     Just [" 1: a bc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(a b(?x)c d (?-x)e f)/"],
-     Just [" 0: a bcde f"],
-     Just [" 1: a bcde f"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(a(?i)b)c" []
-    ["abc",
-     "aBc",
-     "*** Failers",
-     "abC",
-     "aBC  ",
-     "Abc",
-     "ABc",
-     "ABC",
-     "AbC",
-     "",
-     "/a(?i:b)c/",
-     "abc",
-     "aBc",
-     "*** Failers ",
-     "ABC",
-     "abC",
-     "aBC",
-     "",
-     "/a(?i:b)*c/",
-     "aBc",
-     "aBBc",
-     "*** Failers ",
-     "aBC",
-     "aBBC",
-     "",
-     "/a(?=b(?i)c)\\w\\wd/",
-     "abcd",
-     "abCd",
-     "*** Failers",
-     "aBCd",
-     "abcD     ",
-     "",
-     "/(?s-i:more.*than).*million/i",
-     "more than million",
-     "more than MILLION",
-     "more \\n than Million ",
-     "*** Failers",
-     "MORE THAN MILLION    ",
-     "more \\n than \\n million "]
-    [Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 0: aBc"],
-     Just [" 1: aB"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a(?i:b)c/"],
-     Just [" 0: abc"],
-     Just [" 0: aBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a(?i:b)*c/"],
-     Just [" 0: aBc"],
-     Just [" 0: aBBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a(?=b(?i)c)\\w\\wd/"],
-     Just [" 0: abcd"],
-     Just [" 0: abCd"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?s-i:more.*than).*million/i"],
-     Just [" 0: more than million"],
-     Just [" 0: more than MILLION"],
-     Just [" 0: more \\x0a than Million"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?:(?s-i)more.*than).*million" [caseless]
-    ["more than million",
-     "more than MILLION",
-     "more \\n than Million ",
-     "*** Failers",
-     "MORE THAN MILLION    ",
-     "more \\n than \\n million ",
-     "",
-     "/(?>a(?i)b+)+c/ ",
-     "abc",
-     "aBbc",
-     "aBBc ",
-     "*** Failers",
-     "Abc",
-     "abAb    ",
-     "abbC ",
-     "",
-     "/(?=a(?i)b)\\w\\wc/",
-     "abc",
-     "aBc",
-     "*** Failers",
-     "Ab ",
-     "abC",
-     "aBC     ",
-     "",
-     "/(?<=a(?i)b)(\\w\\w)c/",
-     "abxxc",
-     "aBxxc",
-     "*** Failers",
-     "Abxxc",
-     "ABxxc",
-     "abxxC      "]
-    [Just [" 0: more than million"],
-     Just [" 0: more than MILLION"],
-     Just [" 0: more \\x0a than Million"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?>a(?i)b+)+c/ "],
-     Just [" 0: abc"],
-     Just [" 0: aBbc"],
-     Just [" 0: aBBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?=a(?i)b)\\w\\wc/"],
-     Just [" 0: abc"],
-     Just [" 0: aBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?<=a(?i)b)(\\w\\w)c/"],
-     Just [" 0: xxc"],
-     Just [" 1: xx"],
-     Just [" 0: xxc"],
-     Just [" 1: xx"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?:(a)|b)(?(1)A|B)" []
-    ["aA",
-     "bB",
-     "*** Failers",
-     "aB",
-     "bA    "]
-    [Just [" 0: aA"],
-     Just [" 1: a"],
-     Just [" 0: bB"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(a)?(?(1)a|b)+$" []
-    ["aa",
-     "b",
-     "bb  ",
-     "*** Failers",
-     "ab   "]
-    [Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: b"],
-     Just [" 0: bb"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" []
-    ["abc:",
-     "12",
-     "*** Failers",
-     "123",
-     "xyz    "]
-    [Just [" 0: abc:"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(?(?!abc)\\d\\d|\\w{3}:)$" []
-    ["abc:",
-     "12",
-     "*** Failers",
-     "123",
-     "xyz    ",
-     "",
-     "/(?(?<=foo)bar|cat)/",
-     "foobar",
-     "cat",
-     "fcat",
-     "focat   ",
-     "*** Failers",
-     "foocat  "]
-    [Just [" 0: abc:"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?(?<=foo)bar|cat)/"],
-     Just [" 0: bar"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?(?<!foo)cat|bar)" []
-    ["foobar",
-     "cat",
-     "fcat",
-     "focat   ",
-     "*** Failers",
-     "foocat  "]
-    [Just [" 0: bar"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "( \\( )? [^()]+ (?(1) \\) |) " [ERROR]
-    ["abcd",
-     "(abcd)",
-     "the quick (abcd) fox",
-     "(abcd   "]
-    [Just [" 0: abcd"],
-     Just [" 0: (abcd)"],
-     Just [" 1: ("],
-     Just [" 0: the quick "],
-     Just [" 0: abcd"]]
-,
-
-
-testRegex "( \\( )? [^()]+ (?(1) \\) ) " [ERROR]
-    ["abcd",
-     "(abcd)",
-     "the quick (abcd) fox",
-     "(abcd   "]
-    [Just [" 0: abcd"],
-     Just [" 0: (abcd)"],
-     Just [" 1: ("],
-     Just [" 0: the quick "],
-     Just [" 0: abcd"]]
-,
-
-
-testRegex "^(?(2)a|(1)(2))+$" []
-    ["12",
-     "12a",
-     "12aa",
-     "*** Failers",
-     "1234    "]
-    [Just [" 0: 12"],
-     Just [" 1: 1"],
-     Just [" 2: 2"],
-     Just [" 0: 12a"],
-     Just [" 1: 1"],
-     Just [" 2: 2"],
-     Just [" 0: 12aa"],
-     Just [" 1: 1"],
-     Just [" 2: 2"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?i)blah)\\s+\\1" []
-    ["blah blah",
-     "BLAH BLAH",
-     "Blah Blah",
-     "blaH blaH",
-     "*** Failers",
-     "blah BLAH",
-     "Blah blah      ",
-     "blaH blah "]
-    [Just [" 0: blah blah"],
-     Just [" 1: blah"],
-     Just [" 0: BLAH BLAH"],
-     Just [" 1: BLAH"],
-     Just [" 0: Blah Blah"],
-     Just [" 1: Blah"],
-     Just [" 0: blaH blaH"],
-     Just [" 1: blaH"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?i)blah)\\s+(?i:\\1)" []
-    ["blah blah",
-     "BLAH BLAH",
-     "Blah Blah",
-     "blaH blaH",
-     "blah BLAH",
-     "Blah blah      ",
-     "blaH blah "]
-    [Just [" 0: blah blah"],
-     Just [" 1: blah"],
-     Just [" 0: BLAH BLAH"],
-     Just [" 1: BLAH"],
-     Just [" 0: Blah Blah"],
-     Just [" 1: Blah"],
-     Just [" 0: blaH blaH"],
-     Just [" 1: blaH"],
-     Just [" 0: blah BLAH"],
-     Just [" 1: blah"],
-     Just [" 0: Blah blah"],
-     Just [" 1: Blah"],
-     Just [" 0: blaH blah"],
-     Just [" 1: blaH"]]
-,
-
-
-testRegex "(?>a*)*" []
-    ["a",
-     "aa",
-     "aaaa",
-     "",
-     "/(abc|)+/",
-     "abc",
-     "abcabc",
-     "abcabcabc",
-     "xyz      "]
-    [Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 0: aaaa"],
-     Just ["/(abc|)+/"],
-     Just [" 0: abc"],
-     Just [" 1: "],
-     Just [" 0: abcabc"],
-     Just [" 1: "],
-     Just [" 0: abcabcabc"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "]]
-,
-
-
-testRegex "([a]*)*" []
-    ["a",
-     "aaaaa ",
-     "",
-     "/([ab]*)*/",
-     "a",
-     "b",
-     "ababab",
-     "aaaabcde",
-     "bbbb    ",
-     "",
-     "/([^a]*)*/",
-     "b",
-     "bbbb",
-     "aaa   ",
-     "",
-     "/([^ab]*)*/",
-     "cccc",
-     "abab  ",
-     "",
-     "/([a]*?)*/",
-     "a",
-     "aaaa ",
-     "",
-     "/([ab]*?)*/",
-     "a",
-     "b",
-     "abab",
-     "baba   ",
-     "",
-     "/([^a]*?)*/",
-     "b",
-     "bbbb",
-     "aaa   ",
-     "",
-     "/([^ab]*?)*/",
-     "c",
-     "cccc",
-     "baba   ",
-     "",
-     "/(?>a*)*/",
-     "a",
-     "aaabcde ",
-     "",
-     "/((?>a*))*/",
-     "aaaaa",
-     "aabbaa ",
-     "",
-     "/((?>a*?))*/",
-     "aaaaa",
-     "aabbaa "]
-    [Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aaaaa"],
-     Just [" 1: "],
-     Just ["/([ab]*)*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: ababab"],
-     Just [" 1: "],
-     Just [" 0: aaaab"],
-     Just [" 1: "],
-     Just [" 0: bbbb"],
-     Just [" 1: "],
-     Just ["/([^a]*)*/"],
-     Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: bbbb"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just ["/([^ab]*)*/"],
-     Just [" 0: cccc"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just ["/([a]*?)*/"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just ["/([ab]*?)*/"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just ["/([^a]*?)*/"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just ["/([^ab]*?)*/"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just ["/(?>a*)*/"],
-     Just [" 0: a"],
-     Just [" 0: aaa"],
-     Just ["/((?>a*))*/"],
-     Just [" 0: aaaaa"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: "],
-     Just ["/((?>a*?))*/"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "]]
-,
-
-
-testRegex "(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) " [ERROR]
-    ["12-sep-98",
-     "12-09-98",
-     "*** Failers",
-     "sep-12-98",
-     "",
-     "/(?<=(foo))bar\\1/",
-     "foobarfoo",
-     "foobarfootling ",
-     "*** Failers",
-     "foobar",
-     "barfoo   "]
-    [Just [" 0: 12-sep-98"],
-     Just [" 0: 12-09-98"],
-     Nothing,
-     Nothing,
-     Just ["/(?<=(foo))bar\\1/"],
-     Just [" 0: barfoo"],
-     Just [" 1: foo"],
-     Just [" 0: barfoo"],
-     Just [" 1: foo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?i:saturday|sunday)" []
-    ["saturday",
-     "sunday",
-     "Saturday",
-     "Sunday",
-     "SATURDAY",
-     "SUNDAY",
-     "SunDay",
-     "",
-     "/(a(?i)bc|BB)x/",
-     "abcx",
-     "aBCx",
-     "bbx",
-     "BBx",
-     "*** Failers",
-     "abcX",
-     "aBCX",
-     "bbX",
-     "BBX               "]
-    [Just [" 0: saturday"],
-     Just [" 0: sunday"],
-     Just [" 0: Saturday"],
-     Just [" 0: Sunday"],
-     Just [" 0: SATURDAY"],
-     Just [" 0: SUNDAY"],
-     Just [" 0: SunDay"],
-     Just ["/(a(?i)bc|BB)x/"],
-     Just [" 0: abcx"],
-     Just [" 1: abc"],
-     Just [" 0: aBCx"],
-     Just [" 1: aBC"],
-     Just [" 0: bbx"],
-     Just [" 1: bb"],
-     Just [" 0: BBx"],
-     Just [" 1: BB"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^([ab](?i)[cd]|[ef])" []
-    ["ac",
-     "aC",
-     "bD",
-     "elephant",
-     "Europe ",
-     "frog",
-     "France",
-     "*** Failers",
-     "Africa     "]
-    [Just [" 0: ac"],
-     Just [" 1: ac"],
-     Just [" 0: aC"],
-     Just [" 1: aC"],
-     Just [" 0: bD"],
-     Just [" 1: bD"],
-     Just [" 0: e"],
-     Just [" 1: e"],
-     Just [" 0: E"],
-     Just [" 1: E"],
-     Just [" 0: f"],
-     Just [" 1: f"],
-     Just [" 0: F"],
-     Just [" 1: F"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)" []
-    ["ab",
-     "aBd",
-     "xy",
-     "xY",
-     "zebra",
-     "Zambesi",
-     "*** Failers",
-     "aCD  ",
-     "XY  "]
-    [Just [" 0: ab"],
-     Just [" 1: ab"],
-     Just [" 0: aBd"],
-     Just [" 1: aBd"],
-     Just [" 0: xy"],
-     Just [" 1: xy"],
-     Just [" 0: xY"],
-     Just [" 1: xY"],
-     Just [" 0: z"],
-     Just [" 1: z"],
-     Just [" 0: Z"],
-     Just [" 1: Z"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<=foo\\n)^bar" [ERROR]
-    ["foo\\nbar",
-     "*** Failers",
-     "bar",
-     "baz\\nbar   "]
-    [Just [" 0: bar"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<=(?<!foo)bar)baz" []
-    ["barbaz",
-     "barbarbaz ",
-     "koobarbaz ",
-     "*** Failers",
-     "baz",
-     "foobarbaz "]
-    [Just [" 0: baz"],
-     Just [" 0: baz"],
-     Just [" 0: baz"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "The case of aaaaaa is missed out below because I think Perl 5.005_02 gets" []
-    ["/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/",
-     "/where it does set $1 to aa when matching aaaaaa./"]
-    [Just ["/it wrong; it sets $1 to aaa rather than aa. Compare the following test,/"],
-     Nothing,
-     Just ["/where it does set $1 to aa when matching aaaaaa./"],
-     Nothing]
-,
-
-
-testRegex "^(a\\1?){4}$" []
-    ["a",
-     "aa",
-     "aaa",
-     "aaaa",
-     "aaaaa",
-     "aaaaaaa",
-     "aaaaaaaa",
-     "aaaaaaaaa",
-     "aaaaaaaaaa",
-     "aaaaaaaaaaa",
-     "aaaaaaaaaaaa",
-     "aaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaa               "]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Just [" 0: aaaa"],
-     Just [" 1: a"],
-     Just [" 0: aaaaa"],
-     Just [" 1: a"],
-     Just [" 0: aaaaaaa"],
-     Just [" 1: a"],
-     Nothing,
-     Nothing,
-     Just [" 0: aaaaaaaaaa"],
-     Just [" 1: aaaa"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(a\\1?)(a\\1?)(a\\2?)(a\\3?)$" []
-    ["a",
-     "aa",
-     "aaa",
-     "aaaa",
-     "aaaaa",
-     "aaaaaa",
-     "aaaaaaa",
-     "aaaaaaaa",
-     "aaaaaaaaa",
-     "aaaaaaaaaa",
-     "aaaaaaaaaaa",
-     "aaaaaaaaaaaa",
-     "aaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaa               "]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Just [" 0: aaaa"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 0: aaaaa"],
-     Just [" 1: a"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 0: aaaaaa"],
-     Just [" 1: a"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 4: aa"],
-     Just [" 0: aaaaaaa"],
-     Just [" 1: a"],
-     Just [" 2: aa"],
-     Just [" 3: aaa"],
-     Just [" 4: a"],
-     Nothing,
-     Nothing,
-     Just [" 0: aaaaaaaaaa"],
-     Just [" 1: a"],
-     Just [" 2: aa"],
-     Just [" 3: aaa"],
-     Just [" 4: aaaa"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "The following tests are taken from the Perl 5.005 test suite; some of them" []
-    ["/are compatible with 5.004, but I'd rather not have to sort them out./"]
-    [Just ["/are compatible with 5.004, but I'd rather not have to sort them out./"],
-     Nothing]
-,
-
-
-testRegex "abc" []
-    ["abc",
-     "xabcy",
-     "ababc",
-     "*** Failers",
-     "xbc",
-     "axc",
-     "abx"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ab*c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "ab*bc" []
-    ["abc",
-     "abbc",
-     "abbbbc"]
-    [Just [" 0: abc"],
-     Just [" 0: abbc"],
-     Just [" 0: abbbbc"]]
-,
-
-
-testRegex ".{1}" []
-    ["abbbbc"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex ".{3,4}" []
-    ["abbbbc"]
-    [Just [" 0: abbb"]]
-,
-
-
-testRegex "ab{0,}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-
-
-testRegex "ab+bc" []
-    ["abbc",
-     "*** Failers",
-     "abc",
-     "abq"]
-    [Just [" 0: abbc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ab{1,}bc" []
-    []
-    []
-,
-
-
-testRegex "ab+bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-
-
-testRegex "ab{1,}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-
-
-testRegex "ab{1,3}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-
-
-testRegex "ab{3,4}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-
-
-testRegex "ab{4,5}bc" []
-    ["*** Failers",
-     "abq",
-     "abbbbc"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ab?bc" []
-    ["abbc",
-     "abc"]
-    [Just [" 0: abbc"],
-     Just [" 0: abc"]]
-,
-
-
-testRegex "ab{0,1}bc" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "ab?bc" []
-    []
-    []
-,
-
-
-testRegex "ab?c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "ab{0,1}c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "^abc$" []
-    ["abc",
-     "*** Failers",
-     "abbbbc",
-     "abcc"]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^abc" []
-    ["abcc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "^abc$" []
-    []
-    []
-,
-
-
-testRegex "abc$" []
-    ["aabc",
-     "*** Failers",
-     "aabc",
-     "aabcd"]
-    [Just [" 0: abc"],
-     Nothing,
-     Just [" 0: abc"],
-     Nothing]
-,
-
-
-testRegex "^" []
-    ["abc"]
-    [Just [" 0: "]]
-,
-
-
-testRegex "$" []
-    ["abc"]
-    [Just [" 0: "]]
-,
-
-
-testRegex "a.c" []
-    ["abc",
-     "axc"]
-    [Just [" 0: abc"],
-     Just [" 0: axc"]]
-,
-
-
-testRegex "a.*c" []
-    ["axyzc"]
-    [Just [" 0: axyzc"]]
-,
-
-
-testRegex "a[bc]d" []
-    ["abd",
-     "*** Failers",
-     "axyzd",
-     "abc"]
-    [Just [" 0: abd"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a[b-d]e" []
-    ["ace"]
-    [Just [" 0: ace"]]
-,
-
-
-testRegex "a[b-d]" []
-    ["aac"]
-    [Just [" 0: ac"]]
-,
-
-
-testRegex "a[-b]" []
-    ["a-"]
-    [Just [" 0: a-"]]
-,
-
-
-testRegex "a[b-]" []
-    ["a-"]
-    [Just [" 0: a-"]]
-,
-
-
-testRegex "a]" []
-    ["a]"]
-    [Just [" 0: a]"]]
-,
-
-
-testRegex "a[]]b" []
-    ["a]b"]
-    [Just [" 0: a]b"]]
-,
-
-
-testRegex "a[^bc]d" []
-    ["aed",
-     "*** Failers",
-     "abd",
-     "abd"]
-    [Just [" 0: aed"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a[^-b]c" []
-    ["adc"]
-    [Just [" 0: adc"]]
-,
-
-
-testRegex "a[^]b]c" []
-    ["adc",
-     "*** Failers",
-     "a-c",
-     "a]c"]
-    [Just [" 0: adc"],
-     Nothing,
-     Just [" 0: a-c"],
-     Nothing]
-,
-
-
-testRegex "\\ba\\b" []
-    ["a-",
-     "-a",
-     "-a-"]
-    [Just [" 0: a"],
-     Just [" 0: a"],
-     Just [" 0: a"]]
-,
-
-
-testRegex "\\by\\b" []
-    ["*** Failers",
-     "xy",
-     "yz",
-     "xyz"]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "\\Ba\\B" []
-    ["*** Failers",
-     "a-",
-     "-a",
-     "-a-"]
-    [Just [" 0: a"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "\\By\\b" []
-    ["xy"]
-    [Just [" 0: y"]]
-,
-
-
-testRegex "\\by\\B" []
-    ["yz"]
-    [Just [" 0: y"]]
-,
-
-
-testRegex "\\By\\B" []
-    ["xyz"]
-    [Just [" 0: y"]]
-,
-
-
-testRegex "\\w" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "\\W" []
-    ["-",
-     "*** Failers",
-     "-",
-     "a"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-
-
-testRegex "a\\sb" []
-    ["a b"]
-    [Just [" 0: a b"]]
-,
-
-
-testRegex "a\\Sb" []
-    ["a-b",
-     "*** Failers",
-     "a-b",
-     "a b"]
-    [Just [" 0: a-b"],
-     Nothing,
-     Just [" 0: a-b"],
-     Nothing]
-,
-
-
-testRegex "\\d" []
-    ["1"]
-    [Just [" 0: 1"]]
-,
-
-
-testRegex "\\D" []
-    ["-",
-     "*** Failers",
-     "-",
-     "1"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-
-
-testRegex "[\\w]" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "[\\W]" []
-    ["-",
-     "*** Failers",
-     "-",
-     "a"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-
-
-testRegex "a[\\s]b" []
-    ["a b"]
-    [Just [" 0: a b"]]
-,
-
-
-testRegex "a[\\S]b" []
-    ["a-b",
-     "*** Failers",
-     "a-b",
-     "a b"]
-    [Just [" 0: a-b"],
-     Nothing,
-     Just [" 0: a-b"],
-     Nothing]
-,
-
-
-testRegex "[\\d]" []
-    ["1"]
-    [Just [" 0: 1"]]
-,
-
-
-testRegex "[\\D]" []
-    ["-",
-     "*** Failers",
-     "-",
-     "1"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-
-
-testRegex "ab|cd" []
-    ["abc",
-     "abcd"]
-    [Just [" 0: ab"],
-     Just [" 0: ab"]]
-,
-
-
-testRegex "()ef" []
-    ["def"]
-    [Just [" 0: ef"],
-     Just [" 1: "]]
-,
-
-
-testRegex "$b" []
-    []
-    []
-,
-
-
-testRegex "a\\(b" []
-    ["a(b"]
-    [Just [" 0: a(b"]]
-,
-
-
-testRegex "a\\(*b" []
-    ["ab",
-     "a((b"]
-    [Just [" 0: ab"],
-     Just [" 0: a((b"]]
-,
-
-
-testRegex "a\\\\b" []
-    ["a\\b"]
-    [Nothing]
-,
-
-
-testRegex "((a))" []
-    ["abc"]
-    [Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 2: a"]]
-,
-
-
-testRegex "(a)b(c)" []
-    ["abc"]
-    [Just [" 0: abc"],
-     Just [" 1: a"],
-     Just [" 2: c"]]
-,
-
-
-testRegex "a+b+c" []
-    ["aabbabc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "a{1,}b{1,}c" []
-    ["aabbabc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "a.+?c" []
-    ["abcabc"]
-    [Just [" 0: abc"]]
-,
-
-
-testRegex "(a+|b)*" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(a+|b){0,}" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(a+|b)+" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(a+|b){1,}" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(a+|b)?" []
-    ["ab"]
-    [Just [" 0: a"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(a+|b){0,1}" []
-    ["ab"]
-    [Just [" 0: a"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "[^ab]*" []
-    ["cde"]
-    [Just [" 0: cde"]]
-,
-
-
-testRegex "abc" []
-    ["*** Failers",
-     "b",
-     ""]
-    [Nothing,
-     Nothing]
-,
-
-
-testRegex "a*" []
-    [""]
-    []
-,
-
-
-testRegex "([abc])*d" []
-    ["abbbcd"]
-    [Just [" 0: abbbcd"],
-     Just [" 1: c"]]
-,
-
-
-testRegex "([abc])*bcd" []
-    ["abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "a|b|c|d|e" []
-    ["e"]
-    [Just [" 0: e"]]
-,
-
-
-testRegex "(a|b|c|d|e)f" []
-    ["ef"]
-    [Just [" 0: ef"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "abcd*efg" []
-    ["abcdefg"]
-    [Just [" 0: abcdefg"]]
-,
-
-
-testRegex "ab*" []
-    ["xabyabbbz",
-     "xayabbbz"]
-    [Just [" 0: ab"],
-     Just [" 0: a"]]
-,
-
-
-testRegex "(ab|cd)e" []
-    ["abcde"]
-    [Just [" 0: cde"],
-     Just [" 1: cd"]]
-,
-
-
-testRegex "[abhgefdc]ij" []
-    ["hij"]
-    [Just [" 0: hij"]]
-,
-
-
-testRegex "^(ab|cd)e" []
-    []
-    []
-,
-
-
-testRegex "(abc|)ef" []
-    ["abcdef"]
-    [Just [" 0: ef"],
-     Just [" 1: "]]
-,
-
-
-testRegex "(a|b)c*d" []
-    ["abcd"]
-    [Just [" 0: bcd"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(ab|ab*)bc" []
-    ["abc"]
-    [Just [" 0: abc"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "a([bc]*)c*" []
-    ["abc"]
-    [Just [" 0: abc"],
-     Just [" 1: bc"]]
-,
-
-
-testRegex "a([bc]*)(c*d)" []
-    ["abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: bc"],
-     Just [" 2: d"]]
-,
-
-
-testRegex "a([bc]+)(c*d)" []
-    ["abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: bc"],
-     Just [" 2: d"]]
-,
-
-
-testRegex "a([bc]*)(c+d)" []
-    ["abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: b"],
-     Just [" 2: cd"]]
-,
-
-
-testRegex "a[bcd]*dcdcde" []
-    ["adcdcde"]
-    [Just [" 0: adcdcde"]]
-,
-
-
-testRegex "a[bcd]+dcdcde" []
-    ["*** Failers",
-     "abcde",
-     "adcdcde"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(ab|a)b*c" []
-    ["abc"]
-    [Just [" 0: abc"],
-     Just [" 1: ab"]]
-,
-
-
-testRegex "((a)(b)c)(d)" []
-    ["abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: abc"],
-     Just [" 2: a"],
-     Just [" 3: b"],
-     Just [" 4: d"]]
-,
-
-
-testRegex "[a-zA-Z_][a-zA-Z0-9_]*" []
-    ["alpha"]
-    [Just [" 0: alpha"]]
-,
-
-
-testRegex "^a(bc+|b[eh])g|.h$" []
-    ["abh"]
-    [Just [" 0: bh"]]
-,
-
-
-testRegex "(bc+d$|ef*g.|h?i(j|k))" []
-    ["effgz",
-     "ij",
-     "reffgz",
-     "*** Failers",
-     "effg",
-     "bcdd"]
-    [Just [" 0: effgz"],
-     Just [" 1: effgz"],
-     Just [" 0: ij"],
-     Just [" 1: ij"],
-     Just [" 2: j"],
-     Just [" 0: effgz"],
-     Just [" 1: effgz"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((((((((((a))))))))))" []
-    ["a"]
-    [Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 5: a"],
-     Just [" 6: a"],
-     Just [" 7: a"],
-     Just [" 8: a"],
-     Just [" 9: a"],
-     Just ["10: a"]]
-,
-
-
-testRegex "((((((((((a))))))))))\\10" []
-    ["aa"]
-    [Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 5: a"],
-     Just [" 6: a"],
-     Just [" 7: a"],
-     Just [" 8: a"],
-     Just [" 9: a"],
-     Just ["10: a"]]
-,
-
-
-testRegex "(((((((((a)))))))))" []
-    ["a"]
-    [Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 5: a"],
-     Just [" 6: a"],
-     Just [" 7: a"],
-     Just [" 8: a"],
-     Just [" 9: a"]]
-,
-
-
-testRegex "multiple words of text" []
-    ["*** Failers",
-     "aa",
-     "uh-uh"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "multiple words" []
-    ["multiple words, yeah"]
-    [Just [" 0: multiple words"]]
-,
-
-
-testRegex "(.*)c(.*)" []
-    ["abcde"]
-    [Just [" 0: abcde"],
-     Just [" 1: ab"],
-     Just [" 2: de"]]
-,
-
-
-testRegex "\\((.*), (.*)\\)" []
-    ["(a, b)"]
-    [Just [" 0: (a, b)"],
-     Just [" 1: a"],
-     Just [" 2: b"]]
-,
-
-
-testRegex "[k]" []
-    []
-    []
-,
-
-
-testRegex "abcd" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-
-
-testRegex "a(bc)d" []
-    ["abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: bc"]]
-,
-
-
-testRegex "a[-]?c" []
-    ["ac"]
-    [Just [" 0: ac"]]
-,
-
-
-testRegex "(abc)\\1" []
-    ["abcabc"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"]]
-,
-
-
-testRegex "([a-c]*)\\1" []
-    ["abcabc"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"]]
-,
-
-
-testRegex "(a)|\\1" []
-    ["a",
-     "*** Failers",
-     "ab",
-     "x"]
-    [Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Nothing]
-,
-
-
-testRegex "(([a-c])b*?\\2)*" []
-    ["ababbbcbc"]
-    [Just [" 0: ababb"],
-     Just [" 1: bb"],
-     Just [" 2: b"]]
-,
-
-
-testRegex "(([a-c])b*?\\2){3}" []
-    ["ababbbcbc"]
-    [Just [" 0: ababbbcbc"],
-     Just [" 1: cbc"],
-     Just [" 2: c"]]
-,
-
-
-testRegex "((\\3|b)\\2(a)x)+" []
-    ["aaaxabaxbaaxbbax"]
-    [Just [" 0: bbax"],
-     Just [" 1: bbax"],
-     Just [" 2: b"],
-     Just [" 3: a"]]
-,
-
-
-testRegex "((\\3|b)\\2(a)){2,}" []
-    ["bbaababbabaaaaabbaaaabba"]
-    [Just [" 0: bbaaaabba"],
-     Just [" 1: bba"],
-     Just [" 2: b"],
-     Just [" 3: a"]]
-,
-
-
-testRegex "abc" [caseless]
-    ["ABC",
-     "XABCY",
-     "ABABC",
-     "*** Failers",
-     "aaxabxbaxbbx",
-     "XBC",
-     "AXC",
-     "ABX"]
-    [Just [" 0: ABC"],
-     Just [" 0: ABC"],
-     Just [" 0: ABC"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ab*c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "ab*bc" [caseless]
-    ["ABC",
-     "ABBC"]
-    [Just [" 0: ABC"],
-     Just [" 0: ABBC"]]
-,
-
-
-testRegex "ab*?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-
-
-testRegex "ab{0,}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-
-
-testRegex "ab+?bc" [caseless]
-    ["ABBC"]
-    [Just [" 0: ABBC"]]
-,
-
-
-testRegex "ab+bc" [caseless]
-    ["*** Failers",
-     "ABC",
-     "ABQ"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ab{1,}bc" [caseless]
-    []
-    []
-,
-
-
-testRegex "ab+bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-
-
-testRegex "ab{1,}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-
-
-testRegex "ab{1,3}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-
-
-testRegex "ab{3,4}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-
-
-testRegex "ab{4,5}?bc" [caseless]
-    ["*** Failers",
-     "ABQ",
-     "ABBBBC"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ab??bc" [caseless]
-    ["ABBC",
-     "ABC"]
-    [Just [" 0: ABBC"],
-     Just [" 0: ABC"]]
-,
-
-
-testRegex "ab{0,1}?bc" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "ab??bc" [caseless]
-    []
-    []
-,
-
-
-testRegex "ab??c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "ab{0,1}?c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "^abc$" [caseless]
-    ["ABC",
-     "*** Failers",
-     "ABBBBC",
-     "ABCC"]
-    [Just [" 0: ABC"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^abc" [caseless]
-    ["ABCC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "^abc$" [caseless]
-    []
-    []
-,
-
-
-testRegex "abc$" [caseless]
-    ["AABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "^" [caseless]
-    ["ABC"]
-    [Just [" 0: "]]
-,
-
-
-testRegex "$" [caseless]
-    ["ABC"]
-    [Just [" 0: "]]
-,
-
-
-testRegex "a.c" [caseless]
-    ["ABC",
-     "AXC"]
-    [Just [" 0: ABC"],
-     Just [" 0: AXC"]]
-,
-
-
-testRegex "a.*?c" [caseless]
-    ["AXYZC"]
-    [Just [" 0: AXYZC"]]
-,
-
-
-testRegex "a.*c" [caseless]
-    ["*** Failers",
-     "AABC",
-     "AXYZD"]
-    [Nothing,
-     Just [" 0: AABC"],
-     Nothing]
-,
-
-
-testRegex "a[bc]d" [caseless]
-    ["ABD"]
-    [Just [" 0: ABD"]]
-,
-
-
-testRegex "a[b-d]e" [caseless]
-    ["ACE",
-     "*** Failers",
-     "ABC",
-     "ABD"]
-    [Just [" 0: ACE"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a[b-d]" [caseless]
-    ["AAC"]
-    [Just [" 0: AC"]]
-,
-
-
-testRegex "a[-b]" [caseless]
-    ["A-"]
-    [Just [" 0: A-"]]
-,
-
-
-testRegex "a[b-]" [caseless]
-    ["A-"]
-    [Just [" 0: A-"]]
-,
-
-
-testRegex "a]" [caseless]
-    ["A]"]
-    [Just [" 0: A]"]]
-,
-
-
-testRegex "a[]]b" [caseless]
-    ["A]B"]
-    [Just [" 0: A]B"]]
-,
-
-
-testRegex "a[^bc]d" [caseless]
-    ["AED"]
-    [Just [" 0: AED"]]
-,
-
-
-testRegex "a[^-b]c" [caseless]
-    ["ADC",
-     "*** Failers",
-     "ABD",
-     "A-C"]
-    [Just [" 0: ADC"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a[^]b]c" [caseless]
-    ["ADC"]
-    [Just [" 0: ADC"]]
-,
-
-
-testRegex "ab|cd" [caseless]
-    ["ABC",
-     "ABCD"]
-    [Just [" 0: AB"],
-     Just [" 0: AB"]]
-,
-
-
-testRegex "()ef" [caseless]
-    ["DEF"]
-    [Just [" 0: EF"],
-     Just [" 1: "]]
-,
-
-
-testRegex "$b" [caseless]
-    ["*** Failers",
-     "A]C",
-     "B"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a\\(b" [caseless]
-    ["A(B"]
-    [Just [" 0: A(B"]]
-,
-
-
-testRegex "a\\(*b" [caseless]
-    ["AB",
-     "A((B"]
-    [Just [" 0: AB"],
-     Just [" 0: A((B"]]
-,
-
-
-testRegex "a\\\\b" [caseless]
-    ["A\\B"]
-    [Nothing]
-,
-
-
-testRegex "((a))" [caseless]
-    ["ABC"]
-    [Just [" 0: A"],
-     Just [" 1: A"],
-     Just [" 2: A"]]
-,
-
-
-testRegex "(a)b(c)" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"],
-     Just [" 1: A"],
-     Just [" 2: C"]]
-,
-
-
-testRegex "a+b+c" [caseless]
-    ["AABBABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "a{1,}b{1,}c" [caseless]
-    ["AABBABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "a.+?c" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "a.*?c" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "a.{0,5}?c" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABC"]]
-,
-
-
-testRegex "(a+|b)*" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(a+|b){0,}" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(a+|b)+" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(a+|b){1,}" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(a+|b)?" [caseless]
-    ["AB"]
-    [Just [" 0: A"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "(a+|b){0,1}" [caseless]
-    ["AB"]
-    [Just [" 0: A"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "(a+|b){0,1}?" [caseless]
-    ["AB"]
-    [Just [" 0: "]]
-,
-
-
-testRegex "[^ab]*" [caseless]
-    ["CDE"]
-    [Just [" 0: CDE"]]
-,
-
-
-testRegex "abc" [caseless]
-    []
-    []
-,
-
-
-testRegex "a*" [caseless]
-    [""]
-    []
-,
-
-
-testRegex "([abc])*d" [caseless]
-    ["ABBBCD"]
-    [Just [" 0: ABBBCD"],
-     Just [" 1: C"]]
-,
-
-
-testRegex "([abc])*bcd" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "a|b|c|d|e" [caseless]
-    ["E"]
-    [Just [" 0: E"]]
-,
-
-
-testRegex "(a|b|c|d|e)f" [caseless]
-    ["EF"]
-    [Just [" 0: EF"],
-     Just [" 1: E"]]
-,
-
-
-testRegex "abcd*efg" [caseless]
-    ["ABCDEFG"]
-    [Just [" 0: ABCDEFG"]]
-,
-
-
-testRegex "ab*" [caseless]
-    ["XABYABBBZ",
-     "XAYABBBZ"]
-    [Just [" 0: AB"],
-     Just [" 0: A"]]
-,
-
-
-testRegex "(ab|cd)e" [caseless]
-    ["ABCDE"]
-    [Just [" 0: CDE"],
-     Just [" 1: CD"]]
-,
-
-
-testRegex "[abhgefdc]ij" [caseless]
-    ["HIJ"]
-    [Just [" 0: HIJ"]]
-,
-
-
-testRegex "^(ab|cd)e" [caseless]
-    ["ABCDE"]
-    [Nothing]
-,
-
-
-testRegex "(abc|)ef" [caseless]
-    ["ABCDEF"]
-    [Just [" 0: EF"],
-     Just [" 1: "]]
-,
-
-
-testRegex "(a|b)c*d" [caseless]
-    ["ABCD"]
-    [Just [" 0: BCD"],
-     Just [" 1: B"]]
-,
-
-
-testRegex "(ab|ab*)bc" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "a([bc]*)c*" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"],
-     Just [" 1: BC"]]
-,
-
-
-testRegex "a([bc]*)(c*d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"],
-     Just [" 1: BC"],
-     Just [" 2: D"]]
-,
-
-
-testRegex "a([bc]+)(c*d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"],
-     Just [" 1: BC"],
-     Just [" 2: D"]]
-,
-
-
-testRegex "a([bc]*)(c+d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"],
-     Just [" 1: B"],
-     Just [" 2: CD"]]
-,
-
-
-testRegex "a[bcd]*dcdcde" [caseless]
-    ["ADCDCDE"]
-    [Just [" 0: ADCDCDE"]]
-,
-
-
-testRegex "a[bcd]+dcdcde" [caseless]
-    []
-    []
-,
-
-
-testRegex "(ab|a)b*c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"],
-     Just [" 1: AB"]]
-,
-
-
-testRegex "((a)(b)c)(d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"],
-     Just [" 1: ABC"],
-     Just [" 2: A"],
-     Just [" 3: B"],
-     Just [" 4: D"]]
-,
-
-
-testRegex "[a-zA-Z_][a-zA-Z0-9_]*" [caseless]
-    ["ALPHA"]
-    [Just [" 0: ALPHA"]]
-,
-
-
-testRegex "^a(bc+|b[eh])g|.h$" [caseless]
-    ["ABH"]
-    [Just [" 0: BH"]]
-,
-
-
-testRegex "(bc+d$|ef*g.|h?i(j|k))" [caseless]
-    ["EFFGZ",
-     "IJ",
-     "REFFGZ",
-     "*** Failers",
-     "ADCDCDE",
-     "EFFG",
-     "BCDD"]
-    [Just [" 0: EFFGZ"],
-     Just [" 1: EFFGZ"],
-     Just [" 0: IJ"],
-     Just [" 1: IJ"],
-     Just [" 2: J"],
-     Just [" 0: EFFGZ"],
-     Just [" 1: EFFGZ"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((((((((((a))))))))))" [caseless]
-    ["A"]
-    [Just [" 0: A"],
-     Just [" 1: A"],
-     Just [" 2: A"],
-     Just [" 3: A"],
-     Just [" 4: A"],
-     Just [" 5: A"],
-     Just [" 6: A"],
-     Just [" 7: A"],
-     Just [" 8: A"],
-     Just [" 9: A"],
-     Just ["10: A"]]
-,
-
-
-testRegex "((((((((((a))))))))))\\10" [caseless]
-    ["AA"]
-    [Just [" 0: AA"],
-     Just [" 1: A"],
-     Just [" 2: A"],
-     Just [" 3: A"],
-     Just [" 4: A"],
-     Just [" 5: A"],
-     Just [" 6: A"],
-     Just [" 7: A"],
-     Just [" 8: A"],
-     Just [" 9: A"],
-     Just ["10: A"]]
-,
-
-
-testRegex "(((((((((a)))))))))" [caseless]
-    ["A"]
-    [Just [" 0: A"],
-     Just [" 1: A"],
-     Just [" 2: A"],
-     Just [" 3: A"],
-     Just [" 4: A"],
-     Just [" 5: A"],
-     Just [" 6: A"],
-     Just [" 7: A"],
-     Just [" 8: A"],
-     Just [" 9: A"]]
-,
-
-
-testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))" [caseless]
-    ["A"]
-    [Just [" 0: A"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))" [caseless]
-    ["C"]
-    [Just [" 0: C"],
-     Just [" 1: C"]]
-,
-
-
-testRegex "multiple words of text" [caseless]
-    ["*** Failers",
-     "AA",
-     "UH-UH"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "multiple words" [caseless]
-    ["MULTIPLE WORDS, YEAH"]
-    [Just [" 0: MULTIPLE WORDS"]]
-,
-
-
-testRegex "(.*)c(.*)" [caseless]
-    ["ABCDE"]
-    [Just [" 0: ABCDE"],
-     Just [" 1: AB"],
-     Just [" 2: DE"]]
-,
-
-
-testRegex "\\((.*), (.*)\\)" [caseless]
-    ["(A, B)"]
-    [Just [" 0: (A, B)"],
-     Just [" 1: A"],
-     Just [" 2: B"]]
-,
-
-
-testRegex "[k]" [caseless]
-    []
-    []
-,
-
-
-testRegex "abcd" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-
-
-testRegex "a(bc)d" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"],
-     Just [" 1: BC"]]
-,
-
-
-testRegex "a[-]?c" [caseless]
-    ["AC"]
-    [Just [" 0: AC"]]
-,
-
-
-testRegex "(abc)\\1" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABCABC"],
-     Just [" 1: ABC"]]
-,
-
-
-testRegex "([a-c]*)\\1" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABCABC"],
-     Just [" 1: ABC"]]
-,
-
-
-testRegex "a(?!b)." []
-    ["abad"]
-    [Just [" 0: ad"]]
-,
-
-
-testRegex "a(?=d)." []
-    ["abad"]
-    [Just [" 0: ad"]]
-,
-
-
-testRegex "a(?=c|d)." []
-    ["abad"]
-    [Just [" 0: ad"]]
-,
-
-
-testRegex "a(?:b|c|d)(.)" []
-    ["ace"]
-    [Just [" 0: ace"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d)*(.)" []
-    ["ace"]
-    [Just [" 0: ace"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d)+?(.)" []
-    ["ace",
-     "acdbcdbe"]
-    [Just [" 0: ace"],
-     Just [" 1: e"],
-     Just [" 0: acd"],
-     Just [" 1: d"]]
-,
-
-
-testRegex "a(?:b|c|d)+(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d){2}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdb"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "a(?:b|c|d){4,5}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdb"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "a(?:b|c|d){4,5}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcd"],
-     Just [" 1: d"]]
-,
-
-
-testRegex "((foo)|(bar))*" []
-    ["foobar"]
-    [Just [" 0: foobar"],
-     Just [" 1: bar"],
-     Just [" 2: foo"],
-     Just [" 3: bar"]]
-,
-
-
-testRegex "a(?:b|c|d){6,7}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d){6,7}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d){5,6}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d){5,6}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdb"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "a(?:b|c|d){5,7}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: e"]]
-,
-
-
-testRegex "a(?:b|c|d){5,7}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdb"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "a(?:b|(c|e){1,2}?|d)+?(.)" []
-    ["ace"]
-    [Just [" 0: ace"],
-     Just [" 1: c"],
-     Just [" 2: e"]]
-,
-
-
-testRegex "^(.+)?B" []
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "^([^a-z])|(\\^)$" []
-    ["."]
-    [Just [" 0: ."],
-     Just [" 1: ."]]
-,
-
-
-testRegex "^[<>]&" []
-    ["<&OUT"]
-    [Just [" 0: <&"]]
-,
-
-
-testRegex "^(a\\1?){4}$" []
-    ["aaaaaaaaaa",
-     "*** Failers",
-     "AB",
-     "aaaaaaaaa",
-     "aaaaaaaaaaa"]
-    [Just [" 0: aaaaaaaaaa"],
-     Just [" 1: aaaa"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(a(?(1)\\1)){4}$" []
-    ["aaaaaaaaaa",
-     "*** Failers",
-     "aaaaaaaaa",
-     "aaaaaaaaaaa"]
-    [Just [" 0: aaaaaaaaaa"],
-     Just [" 1: aaaa"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?:(f)(o)(o)|(b)(a)(r))*" []
-    ["foobar"]
-    [Just [" 0: foobar"],
-     Just [" 1: f"],
-     Just [" 2: o"],
-     Just [" 3: o"],
-     Just [" 4: b"],
-     Just [" 5: a"],
-     Just [" 6: r"]]
-,
-
-
-testRegex "(?<=a)b" []
-    ["ab",
-     "*** Failers",
-     "cb",
-     "b"]
-    [Just [" 0: b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<!c)b" []
-    ["ab",
-     "b",
-     "b"]
-    [Just [" 0: b"],
-     Just [" 0: b"],
-     Just [" 0: b"]]
-,
-
-
-testRegex "(?:..)*a" []
-    ["aba"]
-    [Just [" 0: aba"]]
-,
-
-
-testRegex "(?:..)*?a" []
-    ["aba"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "^(?:b|a(?=(.)))*\\1" []
-    ["abc"]
-    [Just [" 0: ab"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "^(){3,5}" []
-    ["abc"]
-    [Just [" 0: "],
-     Just [" 1: "]]
-,
-
-
-testRegex "^(a+)*ax" []
-    ["aax"]
-    [Just [" 0: aax"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "^((a|b)+)*ax" []
-    ["aax"]
-    [Just [" 0: aax"],
-     Just [" 1: a"],
-     Just [" 2: a"]]
-,
-
-
-testRegex "^((a|bc)+)*ax" []
-    ["aax"]
-    [Just [" 0: aax"],
-     Just [" 1: a"],
-     Just [" 2: a"]]
-,
-
-
-testRegex "(a|x)*ab" []
-    ["cab"]
-    [Just [" 0: ab"]]
-,
-
-
-testRegex "(a)*ab" []
-    ["cab"]
-    [Just [" 0: ab"]]
-,
-
-
-testRegex "(?:(?i)a)b" []
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-
-
-testRegex "((?i)a)b" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?:(?i)a)b" []
-    ["Ab"]
-    [Just [" 0: Ab"]]
-,
-
-
-testRegex "((?i)a)b" []
-    ["Ab"]
-    [Just [" 0: Ab"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "(?:(?i)a)b" []
-    ["*** Failers",
-     "cb",
-     "aB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?i)a)b" []
-    []
-    []
-,
-
-
-testRegex "(?i:a)b" []
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-
-
-testRegex "((?i:a))b" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?i:a)b" []
-    ["Ab"]
-    [Just [" 0: Ab"]]
-,
-
-
-testRegex "((?i:a))b" []
-    ["Ab"]
-    [Just [" 0: Ab"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "(?i:a)b" []
-    ["*** Failers",
-     "aB",
-     "aB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?i:a))b" []
-    []
-    []
-,
-
-
-testRegex "(?:(?-i)a)b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-
-
-testRegex "((?-i)a)b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?:(?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-
-
-testRegex "((?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?:(?-i)a)b" [caseless]
-    ["*** Failers",
-     "aB",
-     "Ab"]
-    [Nothing,
-     Just [" 0: aB"],
-     Nothing]
-,
-
-
-testRegex "((?-i)a)b" [caseless]
-    []
-    []
-,
-
-
-testRegex "(?:(?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-
-
-testRegex "((?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?:(?-i)a)b" [caseless]
-    ["*** Failers",
-     "Ab",
-     "AB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?-i)a)b" [caseless]
-    []
-    []
-,
-
-
-testRegex "(?-i:a)b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-
-
-testRegex "((?-i:a))b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?-i:a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-
-
-testRegex "((?-i:a))b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?-i:a)b" [caseless]
-    ["*** Failers",
-     "AB",
-     "Ab"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?-i:a))b" [caseless]
-    []
-    []
-,
-
-
-testRegex "(?-i:a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-
-
-testRegex "((?-i:a))b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?-i:a)b" [caseless]
-    ["*** Failers",
-     "Ab",
-     "AB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?-i:a))b" [caseless]
-    []
-    []
-,
-
-
-testRegex "((?-i:a.))b" [caseless]
-    ["*** Failers",
-     "AB",
-     "a\\nB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?s-i:a.))b" [caseless]
-    ["a\\nB"]
-    [Just [" 0: a\\x0aB"],
-     Just [" 1: a\\x0a"]]
-,
-
-
-testRegex "(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))" []
-    ["cabbbb"]
-    [Just [" 0: cabbbb"]]
-,
-
-
-testRegex "(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))" []
-    ["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]
-    [Just [" 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]]
-,
-
-
-testRegex "(ab)\\d\\1" [caseless]
-    ["Ab4ab",
-     "ab4Ab"]
-    [Just [" 0: Ab4ab"],
-     Just [" 1: Ab"],
-     Just [" 0: ab4Ab"],
-     Just [" 1: ab"]]
-,
-
-
-testRegex "foo\\w*\\d{4}baz" []
-    ["foobar1234baz"]
-    [Just [" 0: foobar1234baz"]]
-,
-
-
-testRegex "x(~~)*(?:(?:F)?)?" []
-    ["x~~"]
-    [Just [" 0: x~~"],
-     Just [" 1: ~~"]]
-,
-
-
-testRegex "^a(?#xxx){3}c" []
-    ["aaac"]
-    [Just [" 0: aaac"]]
-,
-
-
-testRegex "^a (?#xxx) (?#yyy) {3}c" [ERROR]
-    ["aaac"]
-    [Just [" 0: aaac"]]
-,
-
-
-testRegex "(?<![cd])b" []
-    ["*** Failers",
-     "B\\nB",
-     "dbcb"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<![cd])[ab]" []
-    ["dbaacb"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "(?<!(c|d))b" []
-    []
-    []
-,
-
-
-testRegex "(?<!(c|d))[ab]" []
-    ["dbaacb"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "(?<!cd)[ab]" []
-    ["cdaccb"]
-    [Just [" 0: b"]]
-,
-
-
-testRegex "^(?:a?b?)*$" []
-    ["\\",
-     "a",
-     "ab",
-     "aaa   ",
-     "*** Failers",
-     "dbcb",
-     "a--",
-     "aa-- "]
-    [Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 0: ab"],
-     Just [" 0: aaa"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?s)^a(.))((?m)^b$)" []
-    ["a\\nb\\nc\\n"]
-    [Just [" 0: a\\x0ab"],
-     Just [" 1: a\\x0a"],
-     Just [" 2: \\x0a"],
-     Just [" 3: b"]]
-,
-
-
-testRegex "((?m)^b$)" []
-    ["a\\nb\\nc\\n"]
-    [Just [" 0: b"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(?m)^b" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"]]
-,
-
-
-testRegex "(?m)^(b)" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "((?m)^b)" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "\\n((?m)^b)" []
-    ["a\\nb\\n"]
-    [Just [" 0: \\x0ab"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "((?s).)c(?!.)" []
-    ["a\\nb\\nc\\n",
-     "a\\nb\\nc\\n"]
-    [Just [" 0: \\x0ac"],
-     Just [" 1: \\x0a"],
-     Just [" 0: \\x0ac"],
-     Just [" 1: \\x0a"]]
-,
-
-
-testRegex "((?s)b.)c(?!.)" []
-    ["a\\nb\\nc\\n",
-     "a\\nb\\nc\\n"]
-    [Just [" 0: b\\x0ac"],
-     Just [" 1: b\\x0a"],
-     Just [" 0: b\\x0ac"],
-     Just [" 1: b\\x0a"]]
-,
-
-
-testRegex "^b" []
-    []
-    []
-,
-
-
-testRegex "()^b" []
-    ["*** Failers",
-     "a\\nb\\nc\\n",
-     "a\\nb\\nc\\n"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?m)^b)" []
-    ["a\\nb\\nc\\n"]
-    [Just [" 0: b"],
-     Just [" 1: b"]]
-,
-
-
-testRegex "(?(1)a|b)" []
-    []
-    []
-,
-
-
-testRegex "(?(1)b|a)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "(x)?(?(1)a|b)" []
-    ["*** Failers",
-     "a",
-     "a"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(x)?(?(1)b|a)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "()?(?(1)b|a)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "()(?(1)b|a)" []
-    []
-    []
-,
-
-
-testRegex "()?(?(1)a|b)" []
-    ["a"]
-    [Just [" 0: a"],
-     Just [" 1: "]]
-,
-
-
-testRegex "^(\\()?blah(?(1)(\\)))$" []
-    ["(blah)",
-     "blah",
-     "*** Failers",
-     "a",
-     "blah)",
-     "(blah"]
-    [Just [" 0: (blah)"],
-     Just [" 1: ("],
-     Just [" 2: )"],
-     Just [" 0: blah"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^(\\(+)?blah(?(1)(\\)))$" []
-    ["(blah)",
-     "blah",
-     "*** Failers",
-     "blah)",
-     "(blah"]
-    [Just [" 0: (blah)"],
-     Just [" 1: ("],
-     Just [" 2: )"],
-     Just [" 0: blah"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?(?!a)a|b)" []
-    []
-    []
-,
-
-
-testRegex "(?(?!a)b|a)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "(?(?=a)b|a)" []
-    ["*** Failers",
-     "a",
-     "a"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?(?=a)a|b)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "(?=(a+?))(\\1ab)" []
-    ["aaab"]
-    [Just [" 0: aab"],
-     Just [" 1: a"],
-     Just [" 2: aab"]]
-,
-
-
-testRegex "^(?=(a+?))\\1ab" []
-    []
-    []
-,
-
-
-testRegex "(\\w+:)+" []
-    ["one:"]
-    [Just [" 0: one:"],
-     Just [" 1: one:"]]
-,
-
-
-testRegex "$(?<=^(a))" []
-    ["a"]
-    [Just [" 0: "],
-     Just [" 1: a"]]
-,
-
-
-testRegex "(?=(a+?))(\\1ab)" []
-    ["aaab"]
-    [Just [" 0: aab"],
-     Just [" 1: a"],
-     Just [" 2: aab"]]
-,
-
-
-testRegex "^(?=(a+?))\\1ab" []
-    ["*** Failers",
-     "aaab",
-     "aaab"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "([\\w:]+::)?(\\w+)$" []
-    ["abcd",
-     "xy:z:::abcd"]
-    [Just [" 0: abcd"],
-     Just [" 1: <unset>"],
-     Just [" 2: abcd"],
-     Just [" 0: xy:z:::abcd"],
-     Just [" 1: xy:z:::"],
-     Just [" 2: abcd"]]
-,
-
-
-testRegex "^[^bcd]*(c+)" []
-    ["aexycd"]
-    [Just [" 0: aexyc"],
-     Just [" 1: c"]]
-,
-
-
-testRegex "(a*)b+" []
-    ["caab"]
-    [Just [" 0: aab"],
-     Just [" 1: aa"]]
-,
-
-
-testRegex "([\\w:]+::)?(\\w+)$" []
-    ["abcd",
-     "xy:z:::abcd",
-     "*** Failers",
-     "abcd:",
-     "abcd:"]
-    [Just [" 0: abcd"],
-     Just [" 1: <unset>"],
-     Just [" 2: abcd"],
-     Just [" 0: xy:z:::abcd"],
-     Just [" 1: xy:z:::"],
-     Just [" 2: abcd"],
-     Just [" 0: Failers"],
-     Just [" 1: <unset>"],
-     Just [" 2: Failers"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^[^bcd]*(c+)" []
-    ["aexycd"]
-    [Just [" 0: aexyc"],
-     Just [" 1: c"]]
-,
-
-
-testRegex "(>a+)ab" []
-    []
-    []
-,
-
-
-testRegex "(?>a+)b" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-
-
-testRegex "([[:]+)" []
-    ["a:[b]:"]
-    [Just [" 0: :["],
-     Just [" 1: :["]]
-,
-
-
-testRegex "([[=]+)" []
-    ["a=[b]="]
-    [Just [" 0: =["],
-     Just [" 1: =["]]
-,
-
-
-testRegex "([[.]+)" []
-    ["a.[b]."]
-    [Just [" 0: .["],
-     Just [" 1: .["]]
-,
-
-
-testRegex "((?>a+)b)" []
-    ["aaab"]
-    [Just [" 0: aaab"],
-     Just [" 1: aaab"]]
-,
-
-
-testRegex "(?>(a+))b" []
-    ["aaab"]
-    [Just [" 0: aaab"],
-     Just [" 1: aaa"]]
-,
-
-
-testRegex "((?>[^()]+)|\\([^()]*\\))+" []
-    ["((abc(ade)ufh()()x"]
-    [Just [" 0: abc(ade)ufh()()x"],
-     Just [" 1: x"]]
-,
-
-
-testRegex "a\\Z" []
-    ["*** Failers",
-     "aaab",
-     "a\\nb\\n"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "b\\Z" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"]]
-,
-
-
-testRegex "b\\z" []
-    []
-    []
-,
-
-
-testRegex "b\\Z" []
-    ["a\\nb"]
-    [Just [" 0: b"]]
-,
-
-
-testRegex "b\\z" []
-    ["a\\nb",
-     "*** Failers",
-     "",
-     "/^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$/",
-     "a",
-     "abc",
-     "a-b",
-     "0-9 ",
-     "a.b",
-     "5.6.7  ",
-     "the.quick.brown.fox",
-     "a100.b200.300c  ",
-     "12-ab.1245 ",
-     "*** Failers",
-     "\\",
-     ".a",
-     "-a",
-     "a-",
-     "a.  ",
-     "a_b ",
-     "a.-",
-     "a..  ",
-     "ab..bc ",
-     "the.quick.brown.fox-",
-     "the.quick.brown.fox.",
-     "the.quick.brown.fox_",
-     "the.quick.brown.fox+       "]
-    [Just [" 0: b"],
-     Nothing,
-     Just ["/^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: abc"],
-     Just [" 1: "],
-     Just [" 0: a-b"],
-     Just [" 1: "],
-     Just [" 0: 0-9"],
-     Just [" 1: "],
-     Just [" 0: a.b"],
-     Just [" 1: "],
-     Just [" 0: 5.6.7"],
-     Just [" 1: "],
-     Just [" 0: the.quick.brown.fox"],
-     Just [" 1: "],
-     Just [" 0: a100.b200.300c"],
-     Just [" 1: "],
-     Just [" 0: 12-ab.1245"],
-     Just [" 1: "],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?>.*)(?<=(abcd|wxyz))" []
-    ["alphabetabcd",
-     "endingwxyz",
-     "*** Failers",
-     "a rather long string that doesn't end with one of them"]
-    [Just [" 0: alphabetabcd"],
-     Just [" 1: abcd"],
-     Just [" 0: endingwxyz"],
-     Just [" 1: wxyz"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" []
-    ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
-     "word cat dog elephant mussel cow horse canary baboon snake shark",
-     "",
-     "/word (?>[a-zA-Z0-9]+ ){0,30}otherword/",
-     "word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
-    [Just [" 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
-     Nothing,
-     Just ["/word (?>[a-zA-Z0-9]+ ){0,30}otherword/"],
-     Nothing]
-,
-
-
-testRegex "(?<=\\d{3}(?!999))foo" []
-    ["999foo",
-     "123999foo ",
-     "*** Failers",
-     "123abcfoo",
-     "",
-     "/(?<=(?!...999)\\d{3})foo/",
-     "999foo",
-     "123999foo ",
-     "*** Failers",
-     "123abcfoo"]
-    [Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Just ["/(?<=(?!...999)\\d{3})foo/"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<=\\d{3}(?!999)...)foo" []
-    ["123abcfoo",
-     "123456foo ",
-     "*** Failers",
-     "123999foo  ",
-     "",
-     "/(?<=\\d{3}...)(?<!999)foo/",
-     "123abcfoo   ",
-     "123456foo ",
-     "*** Failers",
-     "123999foo  "]
-    [Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Just ["/(?<=\\d{3}...)(?<!999)foo/"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "ERROR" []
-    ["([\\\"\\'])?                       # find single or double quote",
-     "(?(1) (.*?)\\1 | ([^\\s]+))       # if quote found, match up to next matching",
-     "# quote, otherwise match up to next space",
-     "/isx",
-     "<a href=abcd xyz",
-     "<a href=\\\"abcd xyz pqr\\\" cats",
-     "<a href=\\'abcd xyz pqr\\' cats"]
-    [Just [" ([\\\"\\'])?                       # find single or double quote"],
-     Just [" (?(1) (.*?)\\1 | ([^\\s]+))       # if quote found, match up to next matching"],
-     Just ["/isx"],
-     Just [" 0: <a href=abcd"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: abcd"],
-     Just [" 0: <a href=\"abcd xyz pqr\""],
-     Just [" 1: \""],
-     Just [" 2: abcd xyz pqr"],
-     Just [" 0: <a href='abcd xyz pqr'"],
-     Just [" 1: '"],
-     Just [" 2: abcd xyz pqr"]]
-,
-
-
-testRegex "ERROR" []
-    ["([\"'])?                         # find single or double quote",
-     "(?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching",
-     "# quote, otherwise match up to next space",
-     "/isx",
-     "<a href=abcd xyz",
-     "<a href=\\\"abcd xyz pqr\\\" cats",
-     "<a href       =       \\'abcd xyz pqr\\' cats"]
-    [Just [" ([\"'])?                         # find single or double quote"],
-     Just [" (?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching"],
-     Just ["/isx"],
-     Just [" 0: <a href=abcd"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: abcd"],
-     Just [" 0: <a href=\"abcd xyz pqr\""],
-     Just [" 1: \""],
-     Just [" 2: abcd xyz pqr"],
-     Just [" 0: <a href       =       'abcd xyz pqr'"],
-     Just [" 1: '"],
-     Just [" 2: abcd xyz pqr"]]
-,
-
-
-testRegex "ERROR" []
-    ["([\"'])?                         # find single or double quote",
-     "(?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching",
-     "# quote, otherwise match up to next space",
-     "/isx",
-     "<a href=abcd xyz",
-     "<a href=\\\"abcd xyz pqr\\\" cats",
-     "<a href       =       \\'abcd xyz pqr\\' cats"]
-    [Just [" ([\"'])?                         # find single or double quote"],
-     Just [" (?(1) (.*?)\\1 | (\\S+))          # if quote found, match up to next matching"],
-     Just ["/isx"],
-     Just [" 0: <a href=abcd"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: abcd"],
-     Just [" 0: <a href=\"abcd xyz pqr\""],
-     Just [" 1: \""],
-     Just [" 2: abcd xyz pqr"],
-     Just [" 0: <a href       =       'abcd xyz pqr'"],
-     Just [" 1: '"],
-     Just [" 2: abcd xyz pqr"]]
-,
-
-
-testRegex "((Z)+|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: A"],
-     Just [" 2: Z"]]
-,
-
-
-testRegex "(Z()|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: A"],
-     Just [" 2: "]]
-,
-
-
-testRegex "(Z(())|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: A"],
-     Just [" 2: "],
-     Just [" 3: "]]
-,
-
-
-testRegex "((?>Z)+|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: A"]]
-,
-
-
-testRegex "((?>)+|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: "],
-     Just [" 1: "]]
-,
-
-
-testRegex "a*" [ERROR]
-    ["abbab"]
-    [Just [" 0: a"],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 0: "],
-     Just [" 0: "]]
-,
-
-
-testRegex "^[a-\\d]" []
-    ["abcde",
-     "-things",
-     "0digit",
-     "*** Failers",
-     "bcdef    "]
-    [Just [" 0: a"],
-     Just [" 0: -"],
-     Just [" 0: 0"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^[\\d-a]" []
-    ["abcde",
-     "-things",
-     "0digit",
-     "*** Failers",
-     "bcdef    ",
-     "",
-     "/[[:space:]]+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/[[:blank:]]+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/[\\s]+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/\\s+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/a\vb/x",
-     "ab"]
-    [Just [" 0: a"],
-     Just [" 0: -"],
-     Just [" 0: 0"],
-     Nothing,
-     Nothing,
-     Just ["/[[:space:]]+/"],
-     Just [" 0:  \\x09\\x0a\\x0c\\x0d\\x0b"],
-     Just ["/[[:blank:]]+/"],
-     Just [" 0:  \\x09"],
-     Just ["/[\\s]+/"],
-     Just [" 0:  \\x09\\x0a\\x0c\\x0d"],
-     Just ["/\\s+/"],
-     Just [" 0:  \\x09\\x0a\\x0c\\x0d"],
-     Just ["/a\vb/x"],
-     Nothing]
-,
-
-
-testRegex "(?!\\A)x" [ERROR]
-    ["a\\nxb\\n"]
-    [Just [" 0: x"]]
-,
-
-
-testRegex "(?!^)x" [ERROR]
-    ["a\\nxb\\n"]
-    [Nothing]
-,
-
-
-testRegex "abc\\Qabc\\Eabc" []
-    ["abcabcabc",
-     "",
-     "/abc\\Q(*+|\\Eabc/",
-     "abc(*+|abc "]
-    [Just [" 0: abcabcabc"],
-     Just ["/abc\\Q(*+|\\Eabc/"],
-     Just [" 0: abc(*+|abc"]]
-,
-
-
-testRegex "   abc\\Q abc\\Eabc" [ERROR]
-    ["abc abcabc",
-     "*** Failers",
-     "abcabcabc  ",
-     "",
-     "/abc#comment",
-     "\\Q#not comment",
-     "literal\\E/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc abcabc"],
-     Nothing,
-     Nothing,
-     Just ["/abc#comment"],
-     Just [" 0: abc#not comment\\x0a    literal"]]
-,
-
-
-testRegex "ERROR" []
-    ["\\Q#not comment",
-     "literal/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc#not comment\\x0a    literal"]]
-,
-
-
-testRegex "ERROR" []
-    ["\\Q#not comment",
-     "literal\\E #more comment",
-     "/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc#not comment\\x0a    literal"]]
-,
-
-
-testRegex "ERROR" []
-    ["\\Q#not comment",
-     "literal\\E #more comment/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc#not comment\\x0a    literal"]]
-,
-
-
-testRegex "\\Qabc\\$xyz\\E" []
-    ["abc\\\\\\$xyz"]
-    [Just [" 0: abc\\$xyz"]]
-,
-
-
-testRegex "\\Qabc\\E\\$\\Qxyz\\E" []
-    ["abc\\$xyz"]
-    [Just [" 0: abc$xyz"]]
-,
-
-
-testRegex "\\Gabc" []
-    ["abc",
-     "*** Failers",
-     "xyzabc  "]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "\\Gabc." [ERROR]
-    ["abc1abc2xyzabc3"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"]]
-,
-
-
-testRegex "abc." [ERROR]
-    ["abc1abc2xyzabc3 "]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"]]
-,
-
-
-testRegex "a(?x: b c )d" []
-    ["XabcdY",
-     "*** Failers ",
-     "Xa b c d Y "]
-    [Just [" 0: abcd"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?x)x y z | a b c)" []
-    ["XabcY",
-     "AxyzB "]
-    [Just [" 0: abc"],
-     Just [" 1: abc"],
-     Just [" 0: xyz"],
-     Just [" 1: xyz"]]
-,
-
-
-testRegex "(?i)AB(?-i)C" []
-    ["XabCY",
-     "*** Failers",
-     "XabcY  "]
-    [Just [" 0: abC"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "((?i)AB(?-i)C|D)E" []
-    ["abCE",
-     "DE",
-     "*** Failers",
-     "abcE",
-     "abCe  ",
-     "dE",
-     "De    "]
-    [Just [" 0: abCE"],
-     Just [" 1: abC"],
-     Just [" 0: DE"],
-     Just [" 1: D"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(.*)\\d+\\1" []
-    ["abc123abc",
-     "abc123bc "]
-    [Just [" 0: abc123abc"],
-     Just [" 1: abc"],
-     Just [" 0: bc123bc"],
-     Just [" 1: bc"]]
-,
-
-
-testRegex "(.*)\\d+\\1" [ERROR]
-    ["abc123abc",
-     "abc123bc ",
-     "",
-     "/((.*))\\d+\\1/",
-     "abc123abc",
-     "abc123bc  "]
-    [Just [" 0: abc123abc"],
-     Just [" 1: abc"],
-     Just [" 0: bc123bc"],
-     Just [" 1: bc"],
-     Just ["/((.*))\\d+\\1/"],
-     Just [" 0: abc123abc"],
-     Just [" 1: abc"],
-     Just [" 2: abc"],
-     Just [" 0: bc123bc"],
-     Just [" 1: bc"],
-     Just [" 2: bc"]]
-,
-
-
-testRegex "-- This tests for an IPv6 address in the form where it can have up to --" []
-    ["/-- eight components, one and only one of which is empty. This must be --/",
-     "/-- an internal component. --/"]
-    [Just ["/-- eight components, one and only one of which is empty. This must be --/"],
-     Nothing,
-     Just ["/-- an internal component. --/"],
-     Nothing]
-,
-
-
-testRegex "ERROR" []
-    ["(?:                         # start of item",
-     "(?: [0-9a-f]{1,4} |       # 1-4 hex digits or",
-     "(?(1)0 | () ) )           # if null previously matched, fail; else null",
-     ":                         # followed by colon",
-     "){1,7}                      # end item; 1-7 of them required               ",
-     "[0-9a-f]{1,4} $             # final hex number at end of string",
-     "(?(1)|.)                    # check that there was an empty component",
-     "/xi",
-     "a123::a123",
-     "a123:b342::abcd",
-     "a123:b342::324e:abcd",
-     "a123:ddde:b342::324e:abcd",
-     "a123:ddde:b342::324e:dcba:abcd",
-     "a123:ddde:9999:b342::324e:dcba:abcd",
-     "*** Failers",
-     "1:2:3:4:5:6:7:8",
-     "a123:bce:ddde:9999:b342::324e:dcba:abcd",
-     "a123::9999:b342::324e:dcba:abcd",
-     "abcde:2:3:4:5:6:7:8",
-     "::1",
-     "abcd:fee0:123::   ",
-     ":1",
-     "1:  "]
-    [Just [" 0: a123::a123"],
-     Just [" 1: "],
-     Just [" 0: a123:b342::abcd"],
-     Just [" 1: "],
-     Just [" 0: a123:b342::324e:abcd"],
-     Just [" 1: "],
-     Just [" 0: a123:ddde:b342::324e:abcd"],
-     Just [" 1: "],
-     Just [" 0: a123:ddde:b342::324e:dcba:abcd"],
-     Just [" 1: "],
-     Just [" 0: a123:ddde:9999:b342::324e:dcba:abcd"],
-     Just [" 1: "],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "[z\\Qa-d]\\E]" []
-    ["z",
-     "a",
-     "-",
-     "d",
-     "] ",
-     "*** Failers",
-     "b     "]
-    [Just [" 0: z"],
-     Just [" 0: a"],
-     Just [" 0: -"],
-     Just [" 0: d"],
-     Just [" 0: ]"],
-     Just [" 0: a"],
-     Nothing]
-,
-
-
-testRegex "[\\z\\C]" []
-    ["z",
-     "C ",
-     "",
-     "/\\M/",
-     "M ",
-     "",
-     "/(a+)*b/",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
-     "",
-     "/(?i)reg(?:ul(?:[a\228]|ae)r|ex)/",
-     "REGular",
-     "regulaer",
-     "Regex  ",
-     "regul\228r "]
-    [Just [" 0: z"],
-     Just [" 0: C"],
-     Just ["/\\M/"],
-     Just [" 0: M"],
-     Just ["/(a+)*b/"],
-     Nothing,
-     Just ["/(?i)reg(?:ul(?:[a\228]|ae)r|ex)/"],
-     Just [" 0: REGular"],
-     Just [" 0: regulaer"],
-     Just [" 0: Regex"],
-     Just [" 0: regul\\xe4r"]]
-,
-
-
-testRegex "\197\230\229\228[\224-\255\192-\223]+" []
-    ["\197\230\229\228\224",
-     "\197\230\229\228\255",
-     "\197\230\229\228\192",
-     "\197\230\229\228\223"]
-    [Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xe0"],
-     Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xff"],
-     Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xc0"],
-     Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xdf"]]
-,
-
-
-testRegex "(?<=Z)X." []
-    ["\\x84XAZXB"]
-    [Just [" 0: XB"]]
-,
-
-
-testRegex "ab cd (?x) de fg" []
-    ["ab cd defg"]
-    [Just [" 0: ab cd defg"]]
-,
-
-
-testRegex "ab cd(?x) de fg" []
-    ["ab cddefg",
-     "** Failers ",
-     "abcddefg"]
-    [Just [" 0: ab cddefg"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<![^f]oo)(bar)" []
-    ["foobarX ",
-     "** Failers ",
-     "boobarX"]
-    [Just [" 0: bar"],
-     Just [" 1: bar"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<![^f])X" []
-    ["offX",
-     "** Failers",
-     "onyX  "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?<=[^f])X" []
-    ["onyX",
-     "** Failers",
-     "offX "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^" [ERROR]
-    ["a\\nb\\nc\\n",
-     "\\ ",
-     "",
-     "/(?<=C\\n)^/mg",
-     "A\\nC\\nC\\n "]
-    [Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just ["/(?<=C\\n)^/mg"],
-     Just [" 0: "]]
-,
-
-
-testRegex "(?:(?(1)a|b)(X))+" []
-    ["bXaX"]
-    [Just [" 0: bXaX"],
-     Just [" 1: X"]]
-,
-
-
-testRegex "(?:(?(1)\\1a|b)(X|Y))+" []
-    ["bXXaYYaY",
-     "bXYaXXaX  "]
-    [Just [" 0: bXXaYYaY"],
-     Just [" 1: Y"],
-     Just [" 0: bX"],
-     Just [" 1: X"]]
-,
-
-
-testRegex "()()()()()()()()()(?:(?(10)\\10a|b)(X|Y))+" []
-    ["bXXaYYaY"]
-    [Just [" 0: bX"],
-     Just [" 1: "],
-     Just [" 2: "],
-     Just [" 3: "],
-     Just [" 4: "],
-     Just [" 5: "],
-     Just [" 6: "],
-     Just [" 7: "],
-     Just [" 8: "],
-     Just [" 9: "],
-     Just ["10: X"]]
-,
-
-
-testRegex "[[,abc,]+]" []
-    ["abc]",
-     "a,b]",
-     "[a,b,c]  "]
-    [Just [" 0: abc]"],
-     Just [" 0: a,b]"],
-     Just [" 0: [a,b,c]"]]
-,
-
-
-testRegex "(?-x: )" [ERROR]
-    ["A\\x20B",
-     "",
-     "\"(?x)(?-x: \\s*#\\s*)\"",
-     "A # B",
-     "** Failers",
-     "#  "]
-    [Just [" 0:  "],
-     Just ["\"(?x)(?-x: \\s*#\\s*)\""],
-     Just [" 0:  # "],
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "(?x-is)(?:(?-ixs) \\s*#\\s*) include" [ERROR]
-    ["A #include",
-     "** Failers",
-     "A#include  ",
-     "A #Include"]
-    [Just [" 0:  #include"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "a*b*\\w" []
-    ["aaabbbb",
-     "aaaa",
-     "a"]
-    [Just [" 0: aaabbbb"],
-     Just [" 0: aaaa"],
-     Just [" 0: a"]]
-,
-
-
-testRegex "a*b?\\w" []
-    ["aaabbbb",
-     "aaaa",
-     "a"]
-    [Just [" 0: aaabb"],
-     Just [" 0: aaaa"],
-     Just [" 0: a"]]
-,
-
-
-testRegex "a*b{0,4}\\w" []
-    ["aaabbbb",
-     "aaaa",
-     "a"]
-    [Just [" 0: aaabbbb"],
-     Just [" 0: aaaa"],
-     Just [" 0: a"]]
-,
-
-
-testRegex "a*b{0,}\\w" []
-    ["aaabbbb",
-     "aaaa",
-     "a",
-     "",
-     "/a*\\d*\\w/",
-     "0a",
-     "a ",
-     "",
-     "/a*b *\\w/x",
-     "a "]
-    [Just [" 0: aaabbbb"],
-     Just [" 0: aaaa"],
-     Just [" 0: a"],
-     Just ["/a*\\d*\\w/"],
-     Just [" 0: 0a"],
-     Just [" 0: a"],
-     Just ["/a*b *\\w/x"],
-     Just [" 0: a"]]
-,
-
-
-testRegex "ERROR" []
-    ["*\\w/x",
-     "a "]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "a* b *\\w" [ERROR]
-    ["a "]
-    [Just [" 0: a"]]
-,
-
-
-testRegex "^\\w+=.*(\\\\\\n.*)*" []
-    ["abc=xyz\\\\\\npqr"]
-    [Just [" 0: abc=xyz\\"]]
-,
-
-
-testRegex "(?=(\\w+))\\1:" []
-    ["abcd:"]
-    [Just [" 0: abcd:"],
-     Just [" 1: abcd"]]
-,
-
-
-testRegex "^(?=(\\w+))\\1:" []
-    ["abcd:"]
-    [Just [" 0: abcd:"],
-     Just [" 1: abcd"]]
-,
-
-
-testRegex "^\\Eabc" []
-    ["abc",
-     "",
-     "/^[\\Eabc]/",
-     "a",
-     "** Failers ",
-     "E ",
-     "",
-     "/^[a-\\Ec]/",
-     "b",
-     "** Failers",
-     "-",
-     "E    "]
-    [Just [" 0: abc"],
-     Just ["/^[\\Eabc]/"],
-     Just [" 0: a"],
-     Nothing,
-     Nothing,
-     Just ["/^[a-\\Ec]/"],
-     Just [" 0: b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^[a\\E\\E-\\Ec]" []
-    ["b",
-     "** Failers",
-     "-",
-     "E    "]
-    [Just [" 0: b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-
-
-testRegex "^[\\E\\Qa\\E-\\Qz\\E]+" []
-    ["b",
-     "** Failers",
-     "-  ",
-     "",
-     "/^[a\\Q]bc\\E]/",
-     "a",
-     "]",
-     "c",
-     "",
-     "/^[a-\\Q\\E]/",
-     "a",
-     "-     "]
-    [Just [" 0: b"],
-     Nothing,
-     Nothing,
-     Just ["/^[a\\Q]bc\\E]/"],
-     Just [" 0: a"],
-     Just [" 0: ]"],
-     Just [" 0: c"],
-     Just ["/^[a-\\Q\\E]/"],
-     Just [" 0: a"],
-     Just [" 0: -"]]
-,
-
-
-
-
-
-
-testRegex "(a){0,3}(?(1)b|(c|))*D" []
-    ["abbD",
-     "ccccD",
-     "D  "]
-    [Just [" 0: abbD"],
-     Just [" 1: a"],
-     Just [" 0: ccccD"],
-     Just [" 1: <unset>"],
-     Just [" 2: "],
-     Just [" 0: D"],
-     Just [" 1: <unset>"],
-     Just [" 2: "]]
-,
-
-
-testRegex "(a|)*\\d" []
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"],
-     Just [" 1: "]]
-,
-
-
-testRegex "(?>a|)*\\d" []
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
-,
-
-
-
-
-
-
-testRegex "( (A | (?(1)0|) )*   )" [ERROR]
-    ["abcd"]
-    [Just [" 0: "],
-     Just [" 1: "],
-     Just [" 2: "]]
-,
-
-
-testRegex "( ( (?(1)0|) )*   )" [ERROR]
-    ["abcd"]
-    [Just [" 0: "],
-     Just [" 1: "],
-     Just [" 2: "]]
-,
-
-
-testRegex "(  (?(1)0|)*   )" [ERROR]
-    ["abcd"]
-    [Just [" 0: "],
-     Just [" 1: "]]
diff --git a/tests/testdata/regex10.tests b/tests/testdata/regex10.tests
deleted file mode 100644
--- a/tests/testdata/regex10.tests
+++ /dev/null
@@ -1,558 +0,0 @@
-testRegex "ERROR" []
-    ["shown when the link size is 2. This is just a doublecheck test to ensure the ",
-     "sizes don't go horribly wrong when something is changed. The pattern contents ",
-     "are all themselves checked in other tests. --/"]
-    [Just ["shown when the link size is 2. This is just a doublecheck test to ensure the "],
-     Just ["sizes don't go horribly wrong when something is changed. The pattern contents "],
-     Just ["are all themselves checked in other tests. --/"]]
-,
-testRegex "((?i)b)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 21"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10  NC b"],
-     Just [" 12   9 Ket"],
-     Just [" 15  00 Opt"],
-     Just [" 17  17 Ket"],
-     Just [" 20     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(?s)(.*X|^B)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 25"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10     X"],
-     Just [" 12   6 Alt"],
-     Just [" 15     ^"],
-     Just [" 16     B"],
-     Just [" 18  15 Ket"],
-     Just [" 21  21 Ket"],
-     Just [" 24     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(?s:.*X|^B)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 29"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10     X"],
-     Just [" 12   8 Alt"],
-     Just [" 15  04 Opt"],
-     Just [" 17     ^"],
-     Just [" 18     B"],
-     Just [" 20  17 Ket"],
-     Just [" 23  00 Opt"],
-     Just [" 25  25 Ket"],
-     Just [" 28     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^[[:alnum:]]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 41"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 37  37 Ket"],
-     Just [" 40     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "#" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 7"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: extended"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "a#" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: extended"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "x?+" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "x++" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "x{1,3}+" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 19"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 12   9 Ket"],
-     Just [" 15  15 Ket"],
-     Just [" 18     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(x)*+" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 24"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 12     x"],
-     Just [" 14   7 KetRmax"],
-     Just [" 17  14 Ket"],
-     Just [" 20  20 Ket"],
-     Just [" 23     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 120"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 14     a+"],
-     Just [" 16   7 Ket"],
-     Just [" 19  39 CBra 3"],
-     Just [" 24     [ab]+?"],
-     Just [" 58  39 Ket"],
-     Just [" 61  39 CBra 4"],
-     Just [" 66     [bc]+"],
-     Just ["100  39 Ket"],
-     Just ["103   7 CBra 5"],
-     Just ["108     \\w*"],
-     Just ["110   7 Ket"],
-     Just ["113 109 Ket"],
-     Just ["116 116 Ket"],
-     Just ["119     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "ERROR" []
-    []
-    [Just ["Memory allocation (code space): 826"],
-     Just ["------------------------------------------------------------------"],
-     Just ["821     \\b"],
-     Just ["822 822 Ket"],
-     Just ["825     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "ERROR" []
-    []
-    [Just ["Memory allocation (code space): 816"],
-     Just ["------------------------------------------------------------------"],
-     Just ["811     \\b"],
-     Just ["812 812 Ket"],
-     Just ["815     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(a(?1)b)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 28"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10   6 Once"],
-     Just [" 13   3 Recurse"],
-     Just [" 16   6 Ket"],
-     Just [" 19     b"],
-     Just [" 21  18 Ket"],
-     Just [" 24  24 Ket"],
-     Just [" 27     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(a(?1)+b)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 28"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10   6 Once"],
-     Just [" 13   3 Recurse"],
-     Just [" 16   6 KetRmax"],
-     Just [" 19     b"],
-     Just [" 21  18 Ket"],
-     Just [" 24  24 Ket"],
-     Just [" 27     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a(?P<name1>b|c)d(?P<longername2>e)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 42"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10     b"],
-     Just [" 12   5 Alt"],
-     Just [" 15     c"],
-     Just [" 17  12 Ket"],
-     Just [" 20     d"],
-     Just [" 22   7 CBra 2"],
-     Just [" 27     e"],
-     Just [" 29   7 Ket"],
-     Just [" 32  32 Ket"],
-     Just [" 35     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(?:a(?P<c>c(?P<d>d)))(?P<a>a)" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 54"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 13     c"],
-     Just [" 15   7 CBra 2"],
-     Just [" 20     d"],
-     Just [" 22   7 Ket"],
-     Just [" 25  17 Ket"],
-     Just [" 28  25 Ket"],
-     Just [" 31   7 CBra 3"],
-     Just [" 36     a"],
-     Just [" 38   7 Ket"],
-     Just [" 41  41 Ket"],
-     Just [" 44     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(?P<a>a)...(?P=a)bbb(?P>a)d" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 43"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10   7 Ket"],
-     Just [" 13     Any"],
-     Just [" 14     Any"],
-     Just [" 15     Any"],
-     Just [" 16     \\1"],
-     Just [" 19     bbb"],
-     Just [" 25   6 Once"],
-     Just [" 28   3 Recurse"],
-     Just [" 31   6 Ket"],
-     Just [" 34     d"],
-     Just [" 36  36 Ket"],
-     Just [" 39     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "abc(?C255)de(?C)f" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 31"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 15     de"],
-     Just [" 19     Callout 0 16 1"],
-     Just [" 25     f"],
-     Just [" 27  27 Ket"],
-     Just [" 30     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "abcde" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 53"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11     Callout 255 1 1"],
-     Just [" 17     b"],
-     Just [" 19     Callout 255 2 1"],
-     Just [" 25     c"],
-     Just [" 27     Callout 255 3 1"],
-     Just [" 33     d"],
-     Just [" 35     Callout 255 4 1"],
-     Just [" 41     e"],
-     Just [" 43     Callout 255 5 0"],
-     Just [" 49  49 Ket"],
-     Just [" 52     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{100}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 10"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{1000}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 11"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{10000}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 12"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{100000}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 12"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{1000000}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 13"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 12     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{4000000}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 14"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10  10 Ket"],
-     Just [" 13     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{7fffFFFF}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 14"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 10  10 Ket"],
-     Just [" 13     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\x{ff}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 10"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\x{100}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x80" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 10"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\xff" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 10"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x{0041}\\x{2262}\\x{0391}\\x{002e}" [ERROR]
-    ["",
-     "/\\x{D55c}\\x{ad6d}\\x{C5B4}/D8M "]
-    [Just ["Memory allocation (code space): 18"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 14  14 Ket"],
-     Just [" 17     End"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["First char = 'A'"],
-     Just ["Need char = '.'"],
-     Just ["/\\x{D55c}\\x{ad6d}\\x{C5B4}/D8M "],
-     Just ["Memory allocation (code space): 19"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 15  15 Ket"],
-     Just [" 18     End"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["First char = 237"],
-     Just ["Need char = 180"]]
-,
-testRegex "\\x{65e5}\\x{672c}\\x{8a9e}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 19"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 15  15 Ket"],
-     Just [" 18     End"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["First char = 230"],
-     Just ["Need char = 158"]]
-,
-testRegex "[\\x{100}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[Z\\x{100}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 47"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 43  43 Ket"],
-     Just [" 46     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^[\\x{100}\\E-\\Q\\E\\x{150}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 18"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 14  14 Ket"],
-     Just [" 17     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^[\\Q\196\128\\E-\\Q\197\144\\E]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 18"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 14  14 Ket"],
-     Just [" 17     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^[\\Q\196\128\\E-\\Q\197\144\\E" [ERROR]
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 15"]]
-,
-testRegex "[\\p{L}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\p{^L}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\P{L}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\P{^L}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[abc\\p{L}\\x{0660}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 50"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 46  46 Ket"],
-     Just [" 49     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\p{Nd}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 15"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 11  11 Ket"],
-     Just [" 14     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\p{Nd}+-]+" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 48"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 44  44 Ket"],
-     Just [" 47     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 25"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 21  21 Ket"],
-     Just [" 24     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 25"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 21  21 Ket"],
-     Just [" 24     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\x{105}-\\x{109}]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 17"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 13  13 Ket"],
-     Just [" 16     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "( ( (?(1)0|) )*   )" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 38"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 14   8 Cond"],
-     Just [" 17   1 Cond ref"],
-     Just [" 20     0"],
-     Just [" 22   3 Alt"],
-     Just [" 25  11 Ket"],
-     Just [" 28  19 KetRmax"],
-     Just [" 31  28 Ket"],
-     Just [" 34  34 Ket"],
-     Just [" 37     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(  (?(1)0|)*   )" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 30"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 12   1 Cond ref"],
-     Just [" 15     0"],
-     Just [" 17   3 Alt"],
-     Just [" 20  11 KetRmax"],
-     Just [" 23  20 Ket"],
-     Just [" 26  26 Ket"],
-     Just [" 29     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[a]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[a]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\xaa]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\xaa]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 10"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^\\xaa]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 9"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^\\xaa]" [ERROR]
-    []
-    [Just ["Memory allocation (code space): 40"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 36  36 Ket"],
-     Just [" 39     End"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex " End of testinput10 " []
-    []
-    []
diff --git a/tests/testdata/regex2.tests b/tests/testdata/regex2.tests
deleted file mode 100644
--- a/tests/testdata/regex2.tests
+++ /dev/null
@@ -1,8104 +0,0 @@
-testRegex "(a)b|" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "abc" [ERROR]
-    ["abc",
-     "defabc",
-     "\\Aabc",
-     "*** Failers",
-     "\\Adefabc",
-     "ABC"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" [ERROR]
-    ["abc",
-     "\\Aabc",
-     "*** Failers",
-     "defabc",
-     "\\Adefabc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a+bc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "a*bc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "a{3}bc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(abc|a+z)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "^abc$" [ERROR]
-    ["abc",
-     "*** Failers",
-     "def\\nabc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "ab\\idef" [ERROR]
-    []
-    [Just ["Failed: unrecognized character follows \\ at offset 3"]]
-,
-testRegex "(?X)ab\\idef" [ERROR]
-    []
-    [Just ["Failed: unrecognized character follows \\ at offset 7"]]
-,
-testRegex "x{5,4}" []
-    []
-    [Just ["Failed: numbers out of order in {} quantifier at offset 5"]]
-,
-testRegex "z{65536}" []
-    []
-    [Just ["Failed: number too big in {} quantifier at offset 7"]]
-,
-testRegex "[abcd" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 5"]]
-,
-testRegex "(?X)[\\B]" []
-    []
-    [Just ["Failed: invalid escape sequence in character class at offset 6"]]
-,
-testRegex "[z-a]" []
-    []
-    [Just ["Failed: range out of order in character class at offset 3"]]
-,
-testRegex "^*" []
-    []
-    [Just ["Failed: nothing to repeat at offset 1"]]
-,
-testRegex "(abc" []
-    []
-    [Just ["Failed: missing ) at offset 4"]]
-,
-testRegex "(?# abc" []
-    []
-    [Just ["Failed: missing ) after comment at offset 7"]]
-,
-testRegex "(?z)abc" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 2"]]
-,
-testRegex ".*b" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'b'"]]
-,
-testRegex ".*?b" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "cat|dog|elephant" [ERROR]
-    ["this sentence eventually mentions a cat",
-     "this sentences rambles on and on for a while and then reaches elephant"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: cat"],
-     Just [" 0: elephant"]]
-,
-testRegex "cat|dog|elephant" [ERROR]
-    ["this sentence eventually mentions a cat",
-     "this sentences rambles on and on for a while and then reaches elephant"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: c d e "],
-     Just [" 0: cat"],
-     Just [" 0: elephant"]]
-,
-testRegex "cat|dog|elephant" [ERROR]
-    ["this sentence eventually mentions a CAT cat",
-     "this sentences rambles on and on for a while to elephant ElePhant"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: C D E c d e "],
-     Just [" 0: CAT"],
-     Just [" 0: elephant"]]
-,
-testRegex "a|[bcd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "(a|[^\\dZ])" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: \\x00 \\x01 \\x02 \\x03 \\x04 \\x05 \\x06 \\x07 \\x08 \\x09 \\x0a "]]
-,
-testRegex "(a|b)*[\\s]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: \\x09 \\x0a \\x0c \\x0d \\x20 a b "]]
-,
-testRegex "(ab\\2)" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 6"]]
-,
-testRegex "{4,5}abc" []
-    []
-    [Just ["Failed: nothing to repeat at offset 4"]]
-,
-testRegex "(a)(b)(c)\\2" [ERROR]
-    ["abcb",
-     "\\O0abcb",
-     "\\O3abcb",
-     "\\O6abcb",
-     "\\O9abcb",
-     "\\O12abcb"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 2"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abcb"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 3: c"],
-     Just ["Matched, but too many substrings"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: abcb"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: abcb"],
-     Just [" 1: a"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: abcb"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 0: abcb"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 3: c"]]
-,
-testRegex "(a)bc|(a)(b)\\2" [ERROR]
-    ["abc",
-     "\\O0abc",
-     "\\O3abc",
-     "\\O6abc",
-     "aba",
-     "\\O0aba",
-     "\\O3aba",
-     "\\O6aba",
-     "\\O9aba",
-     "\\O12aba"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 2"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"],
-     Just [" 0: abc"],
-     Just [" 1: a"],
-     Just ["Matched, but too many substrings"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 1: a"],
-     Just [" 0: aba"],
-     Just [" 1: <unset>"],
-     Just [" 2: a"],
-     Just [" 3: b"],
-     Just ["Matched, but too many substrings"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: aba"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: aba"],
-     Just [" 1: <unset>"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: aba"],
-     Just [" 1: <unset>"],
-     Just [" 2: a"],
-     Just [" 0: aba"],
-     Just [" 1: <unset>"],
-     Just [" 2: a"],
-     Just [" 3: b"]]
-,
-testRegex "abc$" [ERROR]
-    ["abc",
-     "*** Failers",
-     "abc\\n",
-     "abc\\ndef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: dollar_endonly"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(a)(b)(c)(d)(e)\\6" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 17"]]
-,
-testRegex "the quick brown fox" [ERROR]
-    ["the quick brown fox",
-     "this is a line with the quick brown fox"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 't'"],
-     Just ["Need char = 'x'"],
-     Just [" 0: the quick brown fox"],
-     Just [" 0: the quick brown fox"]]
-,
-testRegex "the quick brown fox" [ERROR]
-    ["the quick brown fox",
-     "*** Failers",
-     "this is a line with the quick brown fox"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: the quick brown fox"],
-     Nothing,
-     Nothing]
-,
-testRegex "ab(?z)cd" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 4"]]
-,
-testRegex "^abc|def" [ERROR]
-    ["abcdef",
-     "abcdef\\B"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abc"],
-     Just [" 0: def"]]
-,
-testRegex ".*((abc)$|(def))" [ERROR]
-    ["defabc",
-     "\\Zdefabc"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"],
-     Just [" 0: defabc"],
-     Just [" 1: abc"],
-     Just [" 2: abc"],
-     Just [" 0: def"],
-     Just [" 1: def"],
-     Just [" 2: <unset>"],
-     Just [" 3: def"]]
-,
-testRegex "abc" [ERROR]
-    ["abc",
-     "*** Failers"]
-    [Just [" 0: abc"],
-     Just ["No match: POSIX code 17: match failed"]]
-,
-testRegex "^abc|def" [ERROR]
-    ["abcdef",
-     "abcdef\\B"]
-    [Just [" 0: abc"],
-     Just [" 0: def"]]
-,
-testRegex ".*((abc)$|(def))" [ERROR]
-    ["defabc",
-     "\\Zdefabc"]
-    [Just [" 0: defabc"],
-     Just [" 1: abc"],
-     Just [" 2: abc"],
-     Just [" 0: def"],
-     Just [" 1: def"],
-     Just [" 3: def"]]
-,
-testRegex "the quick brown fox" [ERROR]
-    ["the quick brown fox",
-     "*** Failers",
-     "The Quick Brown Fox"]
-    [Just [" 0: the quick brown fox"],
-     Just ["No match: POSIX code 17: match failed"],
-     Just ["No match: POSIX code 17: match failed"]]
-,
-testRegex "the quick brown fox" [caseless]
-    ["the quick brown fox",
-     "The Quick Brown Fox"]
-    [Just [" 0: the quick brown fox"],
-     Just [" 0: The Quick Brown Fox"]]
-,
-testRegex "abc.def" [ERROR]
-    ["*** Failers",
-     "abc\\ndef"]
-    [Just ["No match: POSIX code 17: match failed"],
-     Just ["No match: POSIX code 17: match failed"]]
-,
-testRegex "abc$" [ERROR]
-    ["abc",
-     "abc\\n"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"]]
-,
-testRegex "(abc)\\2" [ERROR]
-    []
-    [Just ["Failed: POSIX code 15: bad back reference at offset 7     "]]
-,
-testRegex "(abc\\1)" [ERROR]
-    ["abc"]
-    [Just ["No match: POSIX code 17: match failed"]]
-,
-testRegex ")" []
-    []
-    [Just ["Failed: unmatched parentheses at offset 0"]]
-,
-testRegex "a[]b" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 4"]]
-,
-testRegex "[^aeiou ]{3,}" [ERROR]
-    ["co-processors, and for"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: -pr"]]
-,
-testRegex "<.*>" [ERROR]
-    ["abc<def>ghi<klm>nop"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <def>ghi<klm>"]]
-,
-testRegex "<.*?>" [ERROR]
-    ["abc<def>ghi<klm>nop"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <def>"]]
-,
-testRegex "<.*>" [ERROR]
-    ["abc<def>ghi<klm>nop"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: ungreedy"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <def>"]]
-,
-testRegex "(?U)<.*>" [ERROR]
-    ["abc<def>ghi<klm>nop"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: ungreedy"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <def>"]]
-,
-testRegex "<.*?>" [ERROR]
-    ["abc<def>ghi<klm>nop"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: ungreedy"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <def>ghi<klm>"]]
-,
-testRegex "={3,}" [ERROR]
-    ["abc========def"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: ungreedy"],
-     Just ["First char = '='"],
-     Just ["Need char = '='"],
-     Just [" 0: ==="]]
-,
-testRegex "(?U)={3,}?" [ERROR]
-    ["abc========def"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: ungreedy"],
-     Just ["First char = '='"],
-     Just ["Need char = '='"],
-     Just [" 0: ========"]]
-,
-testRegex "(?<!bar|cattle)foo" [ERROR]
-    ["foo",
-     "catfoo",
-     "*** Failers",
-     "the barfoo",
-     "and cattlefoo"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'f'"],
-     Just ["Need char = 'o'"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=a+)b" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 6"]]
-,
-testRegex "(?<=aaa|b{0,3})b" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 14"]]
-,
-testRegex "(?<!(foo)a\\1)bar" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 12"]]
-,
-testRegex "(?i)abc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["First char = 'a' (caseless)"],
-     Just ["Need char = 'c' (caseless)"]]
-,
-testRegex "(a|(?m)a)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(?i)^1234" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored caseless"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(^b|(?i)^d)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?s).*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[abcd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "(?i)[abcd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: A B C D a b c d "]]
-,
-testRegex "(?m)[xy]|(b|c)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: multiline"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: b c x y "]]
-,
-testRegex "(^a|^b)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"]]
-,
-testRegex "(?i)(^a|^b)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: caseless multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"]]
-,
-testRegex "(a)(?(1)a|b|c)" []
-    []
-    [Just ["Failed: conditional group contains more than two branches at offset 13"]]
-,
-testRegex "(?(?=a)a|b|c)" []
-    []
-    [Just ["Failed: conditional group contains more than two branches at offset 12"]]
-,
-testRegex "(?(1a)" []
-    []
-    [Just ["Failed: missing ) at offset 6"]]
-,
-testRegex "(?(1a))" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 6"]]
-,
-testRegex "(?(?i))" []
-    []
-    [Just ["Failed: assertion expected after (?( at offset 3"]]
-,
-testRegex "(?(abc))" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 7"]]
-,
-testRegex "(?(?<ab))" []
-    []
-    [Just ["Failed: syntax error in subpattern name (missing terminator) at offset 7"]]
-,
-testRegex "((?s)blah)\\s+\\1" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'b'"],
-     Just ["Need char = 'h'"]]
-,
-testRegex "((?i)blah)\\s+\\1" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'b' (caseless)"],
-     Just ["Need char = 'h' (caseless)"]]
-,
-testRegex "((?i)b)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'b' (caseless)"],
-     Just ["No need char"],
-     Just ["Study returned NULL"]]
-,
-testRegex "(a*b|(?i:c*(?-i)d))" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: C a b c d "]]
-,
-testRegex "a$" [ERROR]
-    ["a",
-     "a\\n",
-     "*** Failers",
-     "\\Za",
-     "\\Za\\n"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a$" [ERROR]
-    ["a",
-     "a\\n",
-     "\\Za\\n",
-     "*** Failers",
-     "\\Za"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["First char = 'a'"],
-     Just ["No need char"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\Aabc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored multiline"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^abc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))" [ERROR]
-    ["aaaaabbbbbcccccdef"]
-    [Just ["Capturing subpattern count = 5"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aaaaabbbbbcccccdef"],
-     Just [" 1: aaaaabbbbbcccccdef"],
-     Just [" 2: aaaaa"],
-     Just [" 3: b"],
-     Just [" 4: bbbbccccc"],
-     Just [" 5: def"]]
-,
-testRegex "(?<=foo)[ab]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "(?<!foo)(alpha|omega)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'a'"],
-     Just ["Starting byte set: a o "]]
-,
-testRegex "(?!alphabet)[ab]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "(?<=foo\\n)^bar" [ERROR]
-    ["foo\\nbarbar",
-     "***Failers",
-     "rhubarb",
-     "barbell",
-     "abc\\nbarton"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["Options: multiline"],
-     Just ["No first char"],
-     Just ["Need char = 'r'"],
-     Just [" 0: bar"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(?<=foo\\n)bar" [ERROR]
-    ["foo\\nbarbar",
-     "***Failers",
-     "rhubarb",
-     "barbell",
-     "abc\\nbarton"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'r'"],
-     Just [" 0: bar"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?>^abc)" [ERROR]
-    ["abc",
-     "def\\nabc",
-     "*** Failers",
-     "defabc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=ab(c+)d)ef" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 11"]]
-,
-testRegex "(?<=ab(?<=c+)d)ef" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 12"]]
-,
-testRegex "(?<=ab(c|de)f)g" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 13"]]
-,
-testRegex "The next three are in testinput2 because they have variable length branches" []
-    []
-    []
-,
-testRegex "(?<=bullock|donkey)-cart" [ERROR]
-    ["the bullock-cart",
-     "a donkey-cart race",
-     "*** Failers",
-     "cart",
-     "horse-and-cart"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = '-'"],
-     Just ["Need char = 't'"],
-     Just [" 0: -cart"],
-     Just [" 0: -cart"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=ab(?i)x|y|z)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?>.*)(?<=(abcd)|(xyz))" [ERROR]
-    ["alphabetabcd",
-     "endingxyz"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"],
-     Just [" 0: alphabetabcd"],
-     Just [" 1: abcd"],
-     Just [" 0: endingxyz"],
-     Just [" 1: <unset>"],
-     Just [" 2: xyz"]]
-,
-testRegex "(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ" [ERROR]
-    ["abxyZZ",
-     "abXyZZ",
-     "ZZZ",
-     "zZZ",
-     "bZZ",
-     "BZZ",
-     "*** Failers",
-     "ZZ",
-     "abXYZZ",
-     "zzz",
-     "bzz"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'Z'"],
-     Just ["Need char = 'Z'"],
-     Just [" 0: ZZ"],
-     Just [" 0: ZZ"],
-     Just [" 0: ZZ"],
-     Just [" 0: ZZ"],
-     Just [" 0: ZZ"],
-     Just [" 0: ZZ"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<!(foo)a)bar" [ERROR]
-    ["bar",
-     "foobbar",
-     "*** Failers",
-     "fooabar"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'b'"],
-     Just ["Need char = 'r'"],
-     Just [" 0: bar"],
-     Just [" 0: bar"],
-     Nothing,
-     Nothing]
-,
-testRegex "This one is here because Perl 5.005_02 doesn't fail it" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'T'"],
-     Just ["Need char = 't'"]]
-,
-testRegex "^(a)?(?(1)a|b)+$" [ERROR]
-    ["*** Failers",
-     "a"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Nothing,
-     Nothing]
-,
-testRegex "This one is here because I think Perl 5.005_02 gets the setting of $1 wrong" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'T'"],
-     Just ["Need char = 'g'"]]
-,
-testRegex "^(a\\1?){4}$" [ERROR]
-    ["aaaaaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aaaaaa"],
-     Just [" 1: aa"]]
-,
-testRegex "These are syntax tests from Perl 5.005" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'T'"],
-     Just ["Need char = '5'"]]
-,
-testRegex "a[b-a]" []
-    []
-    [Just ["Failed: range out of order in character class at offset 4"]]
-,
-testRegex "a[]b" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 4"]]
-,
-testRegex "a[" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 2"]]
-,
-testRegex "*a" []
-    []
-    [Just ["Failed: nothing to repeat at offset 0"]]
-,
-testRegex "(*)b" []
-    []
-    [Just ["Failed: nothing to repeat at offset 1"]]
-,
-testRegex "abc)" []
-    []
-    [Just ["Failed: unmatched parentheses at offset 3"]]
-,
-testRegex "(abc" []
-    []
-    [Just ["Failed: missing ) at offset 4"]]
-,
-testRegex "a**" []
-    []
-    [Just ["Failed: nothing to repeat at offset 2"]]
-,
-testRegex ")(" []
-    []
-    [Just ["Failed: unmatched parentheses at offset 0"]]
-,
-testRegex "\\1" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 2"]]
-,
-testRegex "\\2" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 2"]]
-,
-testRegex "(a)|\\2" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 6"]]
-,
-testRegex "a[b-a]" [caseless]
-    []
-    [Just ["Failed: range out of order in character class at offset 4"]]
-,
-testRegex "a[]b" [caseless]
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 4"]]
-,
-testRegex "a[" [caseless]
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 2"]]
-,
-testRegex "*a" [caseless]
-    []
-    [Just ["Failed: nothing to repeat at offset 0"]]
-,
-testRegex "(*)b" [caseless]
-    []
-    [Just ["Failed: nothing to repeat at offset 1"]]
-,
-testRegex "abc)" [caseless]
-    []
-    [Just ["Failed: unmatched parentheses at offset 3"]]
-,
-testRegex "(abc" [caseless]
-    []
-    [Just ["Failed: missing ) at offset 4"]]
-,
-testRegex "a**" [caseless]
-    []
-    [Just ["Failed: nothing to repeat at offset 2"]]
-,
-testRegex ")(" [caseless]
-    []
-    [Just ["Failed: unmatched parentheses at offset 0"]]
-,
-testRegex ":(?:" []
-    []
-    [Just ["Failed: missing ) at offset 4"]]
-,
-testRegex "(?<%)b" []
-    []
-    [Just ["Failed: unrecognized character after (?< at offset 3"]]
-,
-testRegex "a(?{)b" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 3"]]
-,
-testRegex "a(?{{})b" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 3"]]
-,
-testRegex "a(?{}})b" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 3"]]
-,
-testRegex "a(?{\"{\"})b" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 3"]]
-,
-testRegex "a(?{\"{\"}})b" []
-    []
-    [Just ["Failed: unrecognized character after (? at offset 3"]]
-,
-testRegex "(?(1?)a|b)" []
-    []
-    [Just ["Failed: malformed number or name after (?( at offset 4"]]
-,
-testRegex "(?(1)a|b|c)" []
-    []
-    [Just ["Failed: conditional group contains more than two branches at offset 10"]]
-,
-testRegex "[a[:xyz:" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 8"]]
-,
-testRegex "(?<=x+)y" []
-    []
-    [Just ["Failed: lookbehind assertion is not fixed length at offset 6"]]
-,
-testRegex "a{37,17}" []
-    []
-    [Just ["Failed: numbers out of order in {} quantifier at offset 7"]]
-,
-testRegex "abc" [ERROR]
-    []
-    [Just ["Failed: \\ at end of pattern at offset 4"]]
-,
-testRegex "abc" [ERROR]
-    []
-    [Just ["Failed: POSIX code 9: bad escape sequence at offset 4     "]]
-,
-testRegex "abc" [caseless]
-    []
-    [Just ["Failed: \\ at end of pattern at offset 4"]]
-,
-testRegex "(a)bc(d)" [ERROR]
-    ["abcd",
-     "abcd\\C2",
-     "abcd\\C5"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'd'"],
-     Just [" 0: abcd"],
-     Just [" 1: a"],
-     Just [" 2: d"],
-     Just [" 0: abcd"],
-     Just [" 1: a"],
-     Just [" 2: d"],
-     Just [" 2C d (1)"],
-     Just [" 0: abcd"],
-     Just [" 1: a"],
-     Just [" 2: d"],
-     Just ["copy substring 5 failed -7"]]
-,
-testRegex "(.{20})" [ERROR]
-    ["abcdefghijklmnopqrstuvwxyz",
-     "abcdefghijklmnopqrstuvwxyz\\C1",
-     "abcdefghijklmnopqrstuvwxyz\\G1"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abcdefghijklmnopqrst"],
-     Just [" 1: abcdefghijklmnopqrst"],
-     Just [" 0: abcdefghijklmnopqrst"],
-     Just [" 1: abcdefghijklmnopqrst"],
-     Just [" 1C abcdefghijklmnopqrst (20)"],
-     Just [" 0: abcdefghijklmnopqrst"],
-     Just [" 1: abcdefghijklmnopqrst"],
-     Just [" 1G abcdefghijklmnopqrst (20)"]]
-,
-testRegex "(.{15})" [ERROR]
-    ["abcdefghijklmnopqrstuvwxyz",
-     "abcdefghijklmnopqrstuvwxyz\\C1\\G1"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abcdefghijklmno"],
-     Just [" 1: abcdefghijklmno"],
-     Just [" 0: abcdefghijklmno"],
-     Just [" 1: abcdefghijklmno"],
-     Just [" 1C abcdefghijklmno (15)"],
-     Just [" 1G abcdefghijklmno (15)"]]
-,
-testRegex "(.{16})" [ERROR]
-    ["abcdefghijklmnopqrstuvwxyz",
-     "abcdefghijklmnopqrstuvwxyz\\C1\\G1\\L"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abcdefghijklmnop"],
-     Just [" 1: abcdefghijklmnop"],
-     Just [" 0: abcdefghijklmnop"],
-     Just [" 1: abcdefghijklmnop"],
-     Just [" 1C abcdefghijklmnop (16)"],
-     Just [" 1G abcdefghijklmnop (16)"],
-     Just [" 0L abcdefghijklmnop"],
-     Just [" 1L abcdefghijklmnop"]]
-,
-testRegex "^(a|(bc))de(f)" [ERROR]
-    ["adef\\G1\\G2\\G3\\G4\\L",
-     "bcdef\\G1\\G2\\G3\\G4\\L",
-     "adefghijk\\C0"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: adef"],
-     Just [" 1: a"],
-     Just [" 2: <unset>"],
-     Just [" 3: f"],
-     Just [" 1G a (1)"],
-     Just [" 2G  (0)"],
-     Just [" 3G f (1)"],
-     Just ["get substring 4 failed -7"],
-     Just [" 0L adef"],
-     Just [" 1L a"],
-     Just [" 2L "],
-     Just [" 3L f"],
-     Just [" 0: bcdef"],
-     Just [" 1: bc"],
-     Just [" 2: bc"],
-     Just [" 3: f"],
-     Just [" 1G bc (2)"],
-     Just [" 2G bc (2)"],
-     Just [" 3G f (1)"],
-     Just ["get substring 4 failed -7"],
-     Just [" 0L bcdef"],
-     Just [" 1L bc"],
-     Just [" 2L bc"],
-     Just [" 3L f"],
-     Just [" 0: adef"],
-     Just [" 1: a"],
-     Just [" 2: <unset>"],
-     Just [" 3: f"],
-     Just [" 0C adef (4)"]]
-,
-testRegex "^abc\\00def" [ERROR]
-    ["abc\\00def\\L\\C0"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abc\\x00def"],
-     Just [" 0C abc (7)"],
-     Just [" 0L abc"]]
-,
-testRegex "ERROR" []
-    [")((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+",
-     ")?)?)?)?)?)?)?)?)?otherword/I"]
-    [Just [")((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+"],
-     Just [")?)?)?)?)?)?)?)?)?otherword/I"],
-     Just ["Capturing subpattern count = 8"],
-     Just ["Partial matching not supported"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["No options"],
-     Just ["First char = 'w'"],
-     Just ["Need char = 'd'"]]
-,
-testRegex ".*X" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'X'"]]
-,
-testRegex ".*X" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'X'"]]
-,
-testRegex "(.*X|^B)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"]]
-,
-testRegex "(.*X|^B)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?s)(.*X|^B)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?s:.*X|^B)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"]]
-,
-testRegex "\\Biss\\B" [ERROR]
-    ["Mississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'i'"],
-     Just ["Need char = 's'"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"]]
-,
-testRegex "\\Biss\\B" [ERROR]
-    ["Mississippi"]
-    [Just [" 0: iss"],
-     Just [" 0+ issippi"]]
-,
-testRegex "iss" [ERROR]
-    ["Mississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'i'"],
-     Just ["Need char = 's'"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"],
-     Just [" 0: iss"],
-     Just [" 0+ ippi"]]
-,
-testRegex "\\Biss\\B" [ERROR]
-    ["Mississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'i'"],
-     Just ["Need char = 's'"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"]]
-,
-testRegex "\\Biss\\B" [ERROR]
-    ["Mississippi",
-     "*** Failers",
-     "Mississippi\\A"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'i'"],
-     Just ["Need char = 's'"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"],
-     Just [" 0: iss"],
-     Just [" 0+ ippi"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=[Ms])iss" [ERROR]
-    ["Mississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'i'"],
-     Just ["Need char = 's'"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"],
-     Just [" 0: iss"],
-     Just [" 0+ ippi"]]
-,
-testRegex "(?<=[Ms])iss" [ERROR]
-    ["Mississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'i'"],
-     Just ["Need char = 's'"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"]]
-,
-testRegex "^iss" [ERROR]
-    ["ississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: iss"],
-     Just [" 0+ issippi"]]
-,
-testRegex ".*iss" [ERROR]
-    ["abciss\\nxyzisspqr"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 's'"],
-     Just [" 0: abciss"],
-     Just [" 0+ \\x0axyzisspqr"],
-     Just [" 0: xyziss"],
-     Just [" 0+ pqr"]]
-,
-testRegex ".i." [ERROR]
-    ["Mississippi",
-     "Mississippi\\A",
-     "Missouri river",
-     "Missouri river\\A"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'i'"],
-     Just [" 0: Mis"],
-     Just [" 0+ sissippi"],
-     Just [" 0: sis"],
-     Just [" 0+ sippi"],
-     Just [" 0: sip"],
-     Just [" 0+ pi"],
-     Just [" 0: Mis"],
-     Just [" 0+ sissippi"],
-     Just [" 0: sis"],
-     Just [" 0+ sippi"],
-     Just [" 0: sip"],
-     Just [" 0+ pi"],
-     Just [" 0: Mis"],
-     Just [" 0+ souri river"],
-     Just [" 0: ri "],
-     Just [" 0+ river"],
-     Just [" 0: riv"],
-     Just [" 0+ er"],
-     Just [" 0: Mis"],
-     Just [" 0+ souri river"]]
-,
-testRegex "^.is" [ERROR]
-    ["Mississippi"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: Mis"],
-     Just [" 0+ sissippi"]]
-,
-testRegex "^ab\\n" [ERROR]
-    ["ab\\nab\\ncd"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: ab\\x0a"],
-     Just [" 0+ ab\\x0acd"]]
-,
-testRegex "^ab\\n" [ERROR]
-    ["ab\\nab\\ncd"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 10"],
-     Just [" 0: ab\\x0a"],
-     Just [" 0+ ab\\x0acd"],
-     Just [" 0: ab\\x0a"],
-     Just [" 0+ cd"]]
-,
-testRegex "abc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "abc|bac" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(abc|bac)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(abc|(c|dc))" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(abc|(d|de)c)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "a*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "a+" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(baa|a+)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "a{0,3}" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "baa{3,}" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'b'"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "\"([^\\\\\"]+|\\\\.)*\"" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = '\"'"],
-     Just ["Need char = '\"'"]]
-,
-testRegex "(abc|ab[cd])" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(a|.)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "a|ba|\\w" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "abc(?=pqr)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'r'"]]
-,
-testRegex "...(?<=abc)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "abc(?!pqr)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "ab." [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "ab[xyz]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "abc*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "ab.c*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "a.c*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex ".c*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "ac*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(a.c*|b.c*)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "a.c*|aba" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex ".+a" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(?=abcda)a.*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(?=a)a.*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "a(b)*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "a\\d*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "ab\\d*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "a(\\d)*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "abcde{0,0}" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'd'"]]
-,
-testRegex "ab\\d+" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "a(?(1)b)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "a(?(1)bag|big)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'g'"]]
-,
-testRegex "a(?(1)bag|big)*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "a(?(1)bag|big)+" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'g'"]]
-,
-testRegex "a(?(1)b..|b..)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "ab\\d{0}e" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'e'"]]
-,
-testRegex "a?b?" [ERROR]
-    ["a",
-     "b",
-     "ab",
-     "\\",
-     "*** Failers",
-     "\\N"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a"],
-     Just [" 0: b"],
-     Just [" 0: ab"],
-     Just [" 0: "],
-     Just [" 0: "],
-     Nothing]
-,
-testRegex "|-" [ERROR]
-    ["abcd",
-     "-abc",
-     "\\Nab-c",
-     "*** Failers",
-     "\\Nabc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: -"],
-     Just [" 0: "],
-     Nothing]
-,
-testRegex "a*(b+)(z)(z)" [ERROR]
-    ["aaaabbbbzzzz",
-     "aaaabbbbzzzz\\O0",
-     "aaaabbbbzzzz\\O1",
-     "aaaabbbbzzzz\\O2",
-     "aaaabbbbzzzz\\O3",
-     "aaaabbbbzzzz\\O4",
-     "aaaabbbbzzzz\\O5"]
-    [Just [" 0: aaaabbbbzz"],
-     Just [" 1: bbbb"],
-     Just [" 2: z"],
-     Just [" 3: z"],
-     Just [" 0: aaaabbbbzz"],
-     Just [" 0: aaaabbbbzz"],
-     Just [" 1: bbbb"],
-     Just [" 0: aaaabbbbzz"],
-     Just [" 1: bbbb"],
-     Just [" 2: z"],
-     Just [" 0: aaaabbbbzz"],
-     Just [" 1: bbbb"],
-     Just [" 2: z"],
-     Just [" 3: z"],
-     Just [" 0: aaaabbbbzz"],
-     Just [" 1: bbbb"],
-     Just [" 2: z"],
-     Just [" 3: z"]]
-,
-testRegex "^.?abcd" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'd'"],
-     Just ["Study returned NULL"]]
-,
-testRegex "ERROR" []
-    ["(?:           # Non-capturing bracket",
-     "(?>[^()]+)    # Either a sequence of non-brackets (no backtracking)",
-     "|             # Or",
-     "(?R)          # Recurse - i.e. nested bracketed string",
-     ")*            # Zero or more contents",
-     "\\)            # Closing )",
-     "/Ix",
-     "(abcd)",
-     "(abcd)xyz",
-     "xyz(abcd)",
-     "(ab(xy)cd)pqr",
-     "(ab(xycd)pqr",
-     "() abc ()",
-     "12(abcde(fsh)xyz(foo(bar))lmno)89",
-     "*** Failers",
-     "abcd",
-     "abcd)",
-     "(abcd"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (abcd)"],
-     Just [" 0: (abcd)"],
-     Just [" 0: (abcd)"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 0: (xycd)"],
-     Just [" 0: ()"],
-     Just [" 0: (abcde(fsh)xyz(foo(bar))lmno)"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\(  ( (?>[^()]+) | (?R) )* \\) " [ERROR]
-    ["(ab(xy)cd)pqr",
-     "1(abcd)(x(y)z)pqr"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 1: cd"],
-     Just [" 0: (abcd)"],
-     Just [" 1: abcd"],
-     Just [" 0: (x(y)z)"],
-     Just [" 1: z"]]
-,
-testRegex "\\(  (?: (?>[^()]+) | (?R) ) \\) " [ERROR]
-    ["(abcd)",
-     "(ab(xy)cd)",
-     "(a(b(c)d)e)",
-     "((ab))",
-     "*** Failers",
-     "()"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (abcd)"],
-     Just [" 0: (xy)"],
-     Just [" 0: (c)"],
-     Just [" 0: ((ab))"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\(  (?: (?>[^()]+) | (?R) )? \\) " [ERROR]
-    ["()",
-     "12(abcde(fsh)xyz(foo(bar))lmno)89"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: ()"],
-     Just [" 0: (fsh)"]]
-,
-testRegex "\\(  ( (?>[^()]+) | (?R) )* \\) " [ERROR]
-    ["(ab(xy)cd)"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 1: cd"]]
-,
-testRegex "\\( ( ( (?>[^()]+) | (?R) )* ) \\) " [ERROR]
-    ["(ab(xy)cd)"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 1: ab(xy)cd"],
-     Just [" 2: cd"]]
-,
-testRegex "\\( (123)? ( ( (?>[^()]+) | (?R) )* ) \\) " [ERROR]
-    ["(ab(xy)cd)",
-     "(123ab(xy)cd)"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 1: <unset>"],
-     Just [" 2: ab(xy)cd"],
-     Just [" 3: cd"],
-     Just [" 0: (123ab(xy)cd)"],
-     Just [" 1: 123"],
-     Just [" 2: ab(xy)cd"],
-     Just [" 3: cd"]]
-,
-testRegex "\\( ( (123)? ( (?>[^()]+) | (?R) )* ) \\) " [ERROR]
-    ["(ab(xy)cd)",
-     "(123ab(xy)cd)"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 1: ab(xy)cd"],
-     Just [" 2: <unset>"],
-     Just [" 3: cd"],
-     Just [" 0: (123ab(xy)cd)"],
-     Just [" 1: 123ab(xy)cd"],
-     Just [" 2: 123"],
-     Just [" 3: cd"]]
-,
-testRegex "\\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \\) " [ERROR]
-    ["(ab(xy)cd)"]
-    [Just ["Capturing subpattern count = 11"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(xy)cd)"],
-     Just [" 1: ab(xy)cd"],
-     Just [" 2: ab(xy)cd"],
-     Just [" 3: ab(xy)cd"],
-     Just [" 4: ab(xy)cd"],
-     Just [" 5: ab(xy)cd"],
-     Just [" 6: ab(xy)cd"],
-     Just [" 7: ab(xy)cd"],
-     Just [" 8: ab(xy)cd"],
-     Just [" 9: ab(xy)cd"],
-     Just ["10: ab(xy)cd"],
-     Just ["11: cd"]]
-,
-testRegex "\\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \\) " [ERROR]
-    ["(abcd(xyz<p>qrs)123)"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (abcd(xyz<p>qrs)123)"],
-     Just [" 1: abcd(xyz<p>qrs)123"],
-     Just [" 2: 123"],
-     Just [" 3: <unset>"]]
-,
-testRegex "\\( ( ( (?>[^()]+) | ((?R)) )* ) \\) " [ERROR]
-    ["(ab(cd)ef)",
-     "(ab(cd(ef)gh)ij)"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (ab(cd)ef)"],
-     Just [" 1: ab(cd)ef"],
-     Just [" 2: ef"],
-     Just [" 3: (cd)"],
-     Just [" 0: (ab(cd(ef)gh)ij)"],
-     Just [" 1: ab(cd(ef)gh)ij"],
-     Just [" 2: ij"],
-     Just [" 3: (cd(ef)gh)"]]
-,
-testRegex "^[[:alnum:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:^alnum:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:alpha:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:^alpha:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[_[:alpha:]]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z "]]
-,
-testRegex "^[[:ascii:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:^ascii:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:blank:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:^blank:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[\\n\\x0b\\x0c\\x0d[:blank:]]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: \\x09 \\x0a \\x0b \\x0c \\x0d \\x20 "]]
-,
-testRegex "^[[:cntrl:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:digit:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:graph:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:lower:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:print:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:punct:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:space:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:upper:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:xdigit:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:word:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:^cntrl:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[12[:^digit:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^[[:^blank:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[01[:alpha:]%]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[[.ch.]]" [ERROR]
-    []
-    [Just ["Failed: POSIX collating elements are not supported at offset 1"]]
-,
-testRegex "[[=ch=]]" [ERROR]
-    []
-    [Just ["Failed: POSIX collating elements are not supported at offset 1"]]
-,
-testRegex "[[:rhubarb:]]" [ERROR]
-    []
-    [Just ["Failed: unknown POSIX class name at offset 3"]]
-,
-testRegex "[[:upper:]]" [caseless]
-    ["A",
-     "a"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: A"],
-     Just [" 0: a"]]
-,
-testRegex "[[:lower:]]" [caseless]
-    ["A",
-     "a"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: A"],
-     Just [" 0: a"]]
-,
-testRegex "((?-i)[[:lower:]])[[:lower:]]" [caseless]
-    ["ab",
-     "aB",
-     "*** Failers",
-     "Ab",
-     "AB"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 0: aB"],
-     Just [" 1: a"],
-     Just [" 0: ai"],
-     Just [" 1: a"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\200-\\110]" [ERROR]
-    []
-    [Just ["Failed: range out of order in character class at offset 9"]]
-,
-testRegex "^(?(0)f|b)oo" [ERROR]
-    []
-    [Just ["Failed: invalid condition (?(0) at offset 6"]]
-,
-testRegex "This one's here because of the large output vector needed" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'T'"],
-     Just ["Need char = 'd'"]]
-,
-testRegex "(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\d+(?:\\s|$))(\\w+)\\s+(\\270)" [ERROR]
-    ["\\O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC"]
-    [Just ["Capturing subpattern count = 271"],
-     Just ["Max back reference = 270"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC"],
-     Just [" 1: 1 "],
-     Just [" 2: 2 "],
-     Just [" 3: 3 "],
-     Just [" 4: 4 "],
-     Just [" 5: 5 "],
-     Just [" 6: 6 "],
-     Just [" 7: 7 "],
-     Just [" 8: 8 "],
-     Just [" 9: 9 "],
-     Just ["10: 10 "],
-     Just ["11: 11 "],
-     Just ["12: 12 "],
-     Just ["13: 13 "],
-     Just ["14: 14 "],
-     Just ["15: 15 "],
-     Just ["16: 16 "],
-     Just ["17: 17 "],
-     Just ["18: 18 "],
-     Just ["19: 19 "],
-     Just ["20: 20 "],
-     Just ["21: 21 "],
-     Just ["22: 22 "],
-     Just ["23: 23 "],
-     Just ["24: 24 "],
-     Just ["25: 25 "],
-     Just ["26: 26 "],
-     Just ["27: 27 "],
-     Just ["28: 28 "],
-     Just ["29: 29 "],
-     Just ["30: 30 "],
-     Just ["31: 31 "],
-     Just ["32: 32 "],
-     Just ["33: 33 "],
-     Just ["34: 34 "],
-     Just ["35: 35 "],
-     Just ["36: 36 "],
-     Just ["37: 37 "],
-     Just ["38: 38 "],
-     Just ["39: 39 "],
-     Just ["40: 40 "],
-     Just ["41: 41 "],
-     Just ["42: 42 "],
-     Just ["43: 43 "],
-     Just ["44: 44 "],
-     Just ["45: 45 "],
-     Just ["46: 46 "],
-     Just ["47: 47 "],
-     Just ["48: 48 "],
-     Just ["49: 49 "],
-     Just ["50: 50 "],
-     Just ["51: 51 "],
-     Just ["52: 52 "],
-     Just ["53: 53 "],
-     Just ["54: 54 "],
-     Just ["55: 55 "],
-     Just ["56: 56 "],
-     Just ["57: 57 "],
-     Just ["58: 58 "],
-     Just ["59: 59 "],
-     Just ["60: 60 "],
-     Just ["61: 61 "],
-     Just ["62: 62 "],
-     Just ["63: 63 "],
-     Just ["64: 64 "],
-     Just ["65: 65 "],
-     Just ["66: 66 "],
-     Just ["67: 67 "],
-     Just ["68: 68 "],
-     Just ["69: 69 "],
-     Just ["70: 70 "],
-     Just ["71: 71 "],
-     Just ["72: 72 "],
-     Just ["73: 73 "],
-     Just ["74: 74 "],
-     Just ["75: 75 "],
-     Just ["76: 76 "],
-     Just ["77: 77 "],
-     Just ["78: 78 "],
-     Just ["79: 79 "],
-     Just ["80: 80 "],
-     Just ["81: 81 "],
-     Just ["82: 82 "],
-     Just ["83: 83 "],
-     Just ["84: 84 "],
-     Just ["85: 85 "],
-     Just ["86: 86 "],
-     Just ["87: 87 "],
-     Just ["88: 88 "],
-     Just ["89: 89 "],
-     Just ["90: 90 "],
-     Just ["91: 91 "],
-     Just ["92: 92 "],
-     Just ["93: 93 "],
-     Just ["94: 94 "],
-     Just ["95: 95 "],
-     Just ["96: 96 "],
-     Just ["97: 97 "],
-     Just ["98: 98 "],
-     Just ["99: 99 "],
-     Just ["100: 100 "],
-     Just ["101: 101 "],
-     Just ["102: 102 "],
-     Just ["103: 103 "],
-     Just ["104: 104 "],
-     Just ["105: 105 "],
-     Just ["106: 106 "],
-     Just ["107: 107 "],
-     Just ["108: 108 "],
-     Just ["109: 109 "],
-     Just ["110: 110 "],
-     Just ["111: 111 "],
-     Just ["112: 112 "],
-     Just ["113: 113 "],
-     Just ["114: 114 "],
-     Just ["115: 115 "],
-     Just ["116: 116 "],
-     Just ["117: 117 "],
-     Just ["118: 118 "],
-     Just ["119: 119 "],
-     Just ["120: 120 "],
-     Just ["121: 121 "],
-     Just ["122: 122 "],
-     Just ["123: 123 "],
-     Just ["124: 124 "],
-     Just ["125: 125 "],
-     Just ["126: 126 "],
-     Just ["127: 127 "],
-     Just ["128: 128 "],
-     Just ["129: 129 "],
-     Just ["130: 130 "],
-     Just ["131: 131 "],
-     Just ["132: 132 "],
-     Just ["133: 133 "],
-     Just ["134: 134 "],
-     Just ["135: 135 "],
-     Just ["136: 136 "],
-     Just ["137: 137 "],
-     Just ["138: 138 "],
-     Just ["139: 139 "],
-     Just ["140: 140 "],
-     Just ["141: 141 "],
-     Just ["142: 142 "],
-     Just ["143: 143 "],
-     Just ["144: 144 "],
-     Just ["145: 145 "],
-     Just ["146: 146 "],
-     Just ["147: 147 "],
-     Just ["148: 148 "],
-     Just ["149: 149 "],
-     Just ["150: 150 "],
-     Just ["151: 151 "],
-     Just ["152: 152 "],
-     Just ["153: 153 "],
-     Just ["154: 154 "],
-     Just ["155: 155 "],
-     Just ["156: 156 "],
-     Just ["157: 157 "],
-     Just ["158: 158 "],
-     Just ["159: 159 "],
-     Just ["160: 160 "],
-     Just ["161: 161 "],
-     Just ["162: 162 "],
-     Just ["163: 163 "],
-     Just ["164: 164 "],
-     Just ["165: 165 "],
-     Just ["166: 166 "],
-     Just ["167: 167 "],
-     Just ["168: 168 "],
-     Just ["169: 169 "],
-     Just ["170: 170 "],
-     Just ["171: 171 "],
-     Just ["172: 172 "],
-     Just ["173: 173 "],
-     Just ["174: 174 "],
-     Just ["175: 175 "],
-     Just ["176: 176 "],
-     Just ["177: 177 "],
-     Just ["178: 178 "],
-     Just ["179: 179 "],
-     Just ["180: 180 "],
-     Just ["181: 181 "],
-     Just ["182: 182 "],
-     Just ["183: 183 "],
-     Just ["184: 184 "],
-     Just ["185: 185 "],
-     Just ["186: 186 "],
-     Just ["187: 187 "],
-     Just ["188: 188 "],
-     Just ["189: 189 "],
-     Just ["190: 190 "],
-     Just ["191: 191 "],
-     Just ["192: 192 "],
-     Just ["193: 193 "],
-     Just ["194: 194 "],
-     Just ["195: 195 "],
-     Just ["196: 196 "],
-     Just ["197: 197 "],
-     Just ["198: 198 "],
-     Just ["199: 199 "],
-     Just ["200: 200 "],
-     Just ["201: 201 "],
-     Just ["202: 202 "],
-     Just ["203: 203 "],
-     Just ["204: 204 "],
-     Just ["205: 205 "],
-     Just ["206: 206 "],
-     Just ["207: 207 "],
-     Just ["208: 208 "],
-     Just ["209: 209 "],
-     Just ["210: 210 "],
-     Just ["211: 211 "],
-     Just ["212: 212 "],
-     Just ["213: 213 "],
-     Just ["214: 214 "],
-     Just ["215: 215 "],
-     Just ["216: 216 "],
-     Just ["217: 217 "],
-     Just ["218: 218 "],
-     Just ["219: 219 "],
-     Just ["220: 220 "],
-     Just ["221: 221 "],
-     Just ["222: 222 "],
-     Just ["223: 223 "],
-     Just ["224: 224 "],
-     Just ["225: 225 "],
-     Just ["226: 226 "],
-     Just ["227: 227 "],
-     Just ["228: 228 "],
-     Just ["229: 229 "],
-     Just ["230: 230 "],
-     Just ["231: 231 "],
-     Just ["232: 232 "],
-     Just ["233: 233 "],
-     Just ["234: 234 "],
-     Just ["235: 235 "],
-     Just ["236: 236 "],
-     Just ["237: 237 "],
-     Just ["238: 238 "],
-     Just ["239: 239 "],
-     Just ["240: 240 "],
-     Just ["241: 241 "],
-     Just ["242: 242 "],
-     Just ["243: 243 "],
-     Just ["244: 244 "],
-     Just ["245: 245 "],
-     Just ["246: 246 "],
-     Just ["247: 247 "],
-     Just ["248: 248 "],
-     Just ["249: 249 "],
-     Just ["250: 250 "],
-     Just ["251: 251 "],
-     Just ["252: 252 "],
-     Just ["253: 253 "],
-     Just ["254: 254 "],
-     Just ["255: 255 "],
-     Just ["256: 256 "],
-     Just ["257: 257 "],
-     Just ["258: 258 "],
-     Just ["259: 259 "],
-     Just ["260: 260 "],
-     Just ["261: 261 "],
-     Just ["262: 262 "],
-     Just ["263: 263 "],
-     Just ["264: 264 "],
-     Just ["265: 265 "],
-     Just ["266: 266 "],
-     Just ["267: 267 "],
-     Just ["268: 268 "],
-     Just ["269: 269 "],
-     Just ["270: ABC"],
-     Just ["271: ABC"]]
-,
-testRegex "This one's here because Perl does this differently and PCRE can't at present" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'T'"],
-     Just ["Need char = 't'"]]
-,
-testRegex "(main(O)?)+" [ERROR]
-    ["mainmain",
-     "mainOmain"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["First char = 'm'"],
-     Just ["Need char = 'n'"],
-     Just [" 0: mainmain"],
-     Just [" 1: main"],
-     Just [" 0: mainOmain"],
-     Just [" 1: main"],
-     Just [" 2: O"]]
-,
-testRegex "These are all cases where Perl does it differently (nested captures)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'T'"],
-     Just ["Need char = 's'"]]
-,
-testRegex "^(a(b)?)+$" [ERROR]
-    ["aba"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aba"],
-     Just [" 1: a"],
-     Just [" 2: b"]]
-,
-testRegex "^(aa(bb)?)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: aa"],
-     Just [" 2: bb"]]
-,
-testRegex "^(aa|aa(bb))+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: aa"],
-     Just [" 2: bb"]]
-,
-testRegex "^(aa(bb)??)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: aa"],
-     Just [" 2: bb"]]
-,
-testRegex "^(?:aa(bb)?)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: bb"]]
-,
-testRegex "^(aa(b(b))?)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: aa"],
-     Just [" 2: bb"],
-     Just [" 3: b"]]
-,
-testRegex "^(?:aa(b(b))?)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: bb"],
-     Just [" 2: b"]]
-,
-testRegex "^(?:aa(b(?:b))?)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: bb"]]
-,
-testRegex "^(?:aa(bb(?:b))?)+$" [ERROR]
-    ["aabbbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbbaa"],
-     Just [" 1: bbb"]]
-,
-testRegex "^(?:aa(b(?:bb))?)+$" [ERROR]
-    ["aabbbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbbaa"],
-     Just [" 1: bbb"]]
-,
-testRegex "^(?:aa(?:b(b))?)+$" [ERROR]
-    ["aabbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbaa"],
-     Just [" 1: b"]]
-,
-testRegex "^(?:aa(?:b(bb))?)+$" [ERROR]
-    ["aabbbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbbaa"],
-     Just [" 1: bb"]]
-,
-testRegex "^(aa(b(bb))?)+$" [ERROR]
-    ["aabbbaa"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbbaa"],
-     Just [" 1: aa"],
-     Just [" 2: bbb"],
-     Just [" 3: bb"]]
-,
-testRegex "^(aa(bb(bb))?)+$" [ERROR]
-    ["aabbbbaa"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aabbbbaa"],
-     Just [" 1: aa"],
-     Just [" 2: bbbb"],
-     Just [" 3: bb"]]
-,
-testRegex "--------------------------------------------------------------------" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = '-'"],
-     Just ["Need char = '-'"]]
-,
-testRegex "#" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: extended"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "a#" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: extended"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "[\\s]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[\\S]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "a(?i)b" [ERROR]
-    ["ab",
-     "aB",
-     "*** Failers",
-     "AB"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b' (caseless)"],
-     Just [" 0: ab"],
-     Just [" 0: aB"],
-     Nothing,
-     Nothing]
-,
-testRegex "(a(?i)b)" [ERROR]
-    ["ab",
-     "aB",
-     "*** Failers",
-     "AB"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b' (caseless)"],
-     Just [" 0: ab"],
-     Just [" 1: ab"],
-     Just [" 0: aB"],
-     Just [" 1: aB"],
-     Nothing,
-     Nothing]
-,
-testRegex "   (?i)abc" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless extended"],
-     Just ["First char = 'a' (caseless)"],
-     Just ["Need char = 'c' (caseless)"]]
-,
-testRegex "ERROR" []
-    ["(?i)abc/IxDZ"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless extended"],
-     Just ["First char = 'a' (caseless)"],
-     Just ["Need char = 'c' (caseless)"]]
-,
-testRegex "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = '1'"],
-     Just ["Need char = '0'"]]
-,
-testRegex "\\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = '1'"],
-     Just ["Need char = '0'"]]
-,
-testRegex "\\Q\\E" [ERROR]
-    ["\\"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "]]
-,
-testRegex "\\Q\\Ex" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["No need char"]]
-,
-testRegex " \\Q\\E" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = ' '"],
-     Just ["No need char"]]
-,
-testRegex "a\\Q\\E" [ERROR]
-    ["abc",
-     "bca",
-     "bac"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Just [" 0: a"]]
-,
-testRegex "a\\Q\\Eb" [ERROR]
-    ["abc"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: ab"]]
-,
-testRegex "\\Q\\Eabc" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "x*+\\w" [ERROR]
-    ["*** Failers",
-     "xxxxx"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: F"],
-     Nothing]
-,
-testRegex "x?+" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "x++" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["No need char"]]
-,
-testRegex "x{1,3}+" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["No need char"]]
-,
-testRegex "(x)*+" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^(\\w++|\\s++)*$" [ERROR]
-    ["now is the time for all good men to come to the aid of the party",
-     "*** Failers",
-     "this is not a line with only words and spaces!"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: now is the time for all good men to come to the aid of the party"],
-     Just [" 1: party"],
-     Nothing,
-     Nothing]
-,
-testRegex "(\\d++)(\\w)" [ERROR]
-    ["12345a",
-     "*** Failers",
-     "12345+"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 12345a"],
-     Just [" 1: 12345"],
-     Just [" 2: a"],
-     Nothing,
-     Nothing]
-,
-testRegex "a++b" [ERROR]
-    ["aaab"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: aaab"]]
-,
-testRegex "(a++b)" [ERROR]
-    ["aaab"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: aaab"],
-     Just [" 1: aaab"]]
-,
-testRegex "(a++)b" [ERROR]
-    ["aaab"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: aaab"],
-     Just [" 1: aaa"]]
-,
-testRegex "([^()]++|\\([^()]*\\))+" [ERROR]
-    ["((abc(ade)ufh()()x"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abc(ade)ufh()()x"],
-     Just [" 1: x"]]
-,
-testRegex "\\(([^()]++|\\([^()]+\\))+\\)" [ERROR]
-    ["(abc)",
-     "(abc(def)xyz)",
-     "*** Failers",
-     "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = '('"],
-     Just ["Need char = ')'"],
-     Just [" 0: (abc)"],
-     Just [" 1: abc"],
-     Just [" 0: (abc(def)xyz)"],
-     Just [" 1: xyz"],
-     Nothing,
-     Nothing]
-,
-testRegex "(abc){1,3}+" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "a+?+" [ERROR]
-    []
-    [Just ["Failed: nothing to repeat at offset 3"]]
-,
-testRegex "a{2,3}?+b" [ERROR]
-    []
-    [Just ["Failed: nothing to repeat at offset 7"]]
-,
-testRegex "(?U)a+?+" [ERROR]
-    []
-    [Just ["Failed: nothing to repeat at offset 7"]]
-,
-testRegex "a{2,3}?+b" [ERROR]
-    []
-    [Just ["Failed: nothing to repeat at offset 7"]]
-,
-testRegex "x(?U)a++b" [ERROR]
-    ["xaaaab"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: xaaaab"]]
-,
-testRegex "(?U)xa++b" [ERROR]
-    ["xaaaab"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: ungreedy"],
-     Just ["First char = 'x'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: xaaaab"]]
-,
-testRegex "^((a+)(?U)([ab]+)(?-U)([bc]+)(\\w*))" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 5"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^x(?U)a+b" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "^x(?U)(a+)b" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "[.x.]" [ERROR]
-    []
-    [Just ["Failed: POSIX collating elements are not supported at offset 0"]]
-,
-testRegex "[=x=]" [ERROR]
-    []
-    [Just ["Failed: POSIX collating elements are not supported at offset 0"]]
-,
-testRegex "[:x:]" [ERROR]
-    []
-    [Just ["Failed: POSIX named classes are supported only within a class at offset 0"]]
-,
-testRegex "\\l" [ERROR]
-    []
-    [Just ["Failed: PCRE does not support \\L, \\l, \\N, \\U, or \\u at offset 1"]]
-,
-testRegex "\\L" [ERROR]
-    []
-    [Just ["Failed: PCRE does not support \\L, \\l, \\N, \\U, or \\u at offset 1"]]
-,
-testRegex "\\N{name}" [ERROR]
-    []
-    [Just ["Failed: PCRE does not support \\L, \\l, \\N, \\U, or \\u at offset 1"]]
-,
-testRegex "\\u" [ERROR]
-    []
-    [Just ["Failed: PCRE does not support \\L, \\l, \\N, \\U, or \\u at offset 1"]]
-,
-testRegex "\\U" [ERROR]
-    []
-    [Just ["Failed: PCRE does not support \\L, \\l, \\N, \\U, or \\u at offset 1"]]
-,
-testRegex "[" [ERROR]
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 1"]]
-,
-testRegex "[a-" [ERROR]
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 3"]]
-,
-testRegex "[[:space:]" [ERROR]
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 10"]]
-,
-testRegex "[\\s]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[[:space:]]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[[:space:]abcde]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "< (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >" [ERROR]
-    ["<>",
-     "<abcd>",
-     "<abc <123> hij>",
-     "<abc <def> hij>",
-     "<abc<>def>",
-     "<abc<>",
-     "*** Failers",
-     "<abc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <>"],
-     Just [" 0: <abcd>"],
-     Just [" 0: <abc <123> hij>"],
-     Just [" 0: <def>"],
-     Just [" 0: <abc<>def>"],
-     Just [" 0: <>"],
-     Nothing,
-     Nothing]
-,
-testRegex "ERROR" []
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = '8'"],
-     Just ["Need char = 'X'"]]
-,
-testRegex "ERROR" []
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = '$'"],
-     Just ["Need char = 'X'"]]
-,
-testRegex "(.*)\\d+\\1" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(.*)\\d+" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"]]
-,
-testRegex "(.*)\\d+\\1" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(.*)\\d+" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(.*(xyz))\\d+\\2" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Max back reference = 2"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "((.*))\\d+\\1" [ERROR]
-    ["abc123bc"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: bc123bc"],
-     Just [" 1: bc"],
-     Just [" 2: bc"]]
-,
-testRegex "a[b]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "(?=a).*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(?=abc).xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["First char = 'a' (caseless)"],
-     Just ["Need char = 'z' (caseless)"]]
-,
-testRegex "(?=abc)(?i).xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'z' (caseless)"]]
-,
-testRegex "(?=a)(?=b)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(?=.)a" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "((?=abcda)a)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "((?=abcda)ab)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "()a" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(?(1)ab|ac)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(?(1)abz|acz)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "(?(1)abz)" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?(1)abz)123" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = '3'"]]
-,
-testRegex "(a)+" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "(a){2,3}" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(a)*" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[a]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["No need char"]]
-,
-testRegex "[ab]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[ab]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "[^a]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "\\d456" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = '6'"]]
-,
-testRegex "\\d456" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = '6'"],
-     Just ["Starting byte set: 0 1 2 3 4 5 6 7 8 9 "]]
-,
-testRegex "a^b" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "^a" [ERROR]
-    ["abcde",
-     "xy\\nabc",
-     "*** Failers",
-     "xyabc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'a'"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Nothing,
-     Nothing]
-,
-testRegex "c|abc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(?i)[ab]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: A B a b "]]
-,
-testRegex "[ab](?i)cd" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'd' (caseless)"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "abc(?C)def" [ERROR]
-    ["abcdef",
-     "1234abcdef",
-     "*** Failers",
-     "abcxyz",
-     "abcxyzf"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'f'"],
-     Just ["--->abcdef"],
-     Just [" 0: abcdef"],
-     Just ["--->1234abcdef"],
-     Just [" 0: abcdef"],
-     Nothing,
-     Nothing,
-     Just ["--->abcxyzf"],
-     Nothing]
-,
-testRegex "abc(?C)de(?C1)f" [ERROR]
-    ["123abcdef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'f'"],
-     Just ["--->123abcdef"],
-     Just [" 0: abcdef"]]
-,
-testRegex "(?C1)\\dabc(?C2)def" [ERROR]
-    ["1234abcdef",
-     "*** Failers",
-     "abcdef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'f'"],
-     Just ["--->1234abcdef"],
-     Just [" 0: 4abcdef"],
-     Nothing,
-     Just ["--->abcdef"],
-     Nothing]
-,
-testRegex "(?C255)ab" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "(?C256)ab" [ERROR]
-    []
-    [Just ["Failed: number after (?C is > 255 at offset 6"]]
-,
-testRegex "(?Cab)xx" [ERROR]
-    []
-    [Just ["Failed: closing ) for (?C expected at offset 3"]]
-,
-testRegex "(?C12vr)x" [ERROR]
-    []
-    [Just ["Failed: closing ) for (?C expected at offset 5"]]
-,
-testRegex "abc(?C)def" [ERROR]
-    ["*** Failers",
-     "\\x83\\x0\\x61bcdef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'f'"],
-     Nothing,
-     Just ["--->\\x83\\x00abcdef"],
-     Just [" 0: abcdef"]]
-,
-testRegex "(abc)(?C)de(?C1)f" [ERROR]
-    ["123abcdef",
-     "123abcdef\\C+",
-     "123abcdef\\C-",
-     "*** Failers",
-     "123abcdef\\C!1"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'f'"],
-     Just ["--->123abcdef"],
-     Just [" 0: abcdef"],
-     Just [" 1: abc"],
-     Just ["Callout 0: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: abc"],
-     Just ["--->123abcdef"],
-     Just ["Callout 1: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: abc"],
-     Just ["--->123abcdef"],
-     Just [" 0: abcdef"],
-     Just [" 1: abc"],
-     Just [" 0: abcdef"],
-     Just [" 1: abc"],
-     Nothing,
-     Just ["--->123abcdef"],
-     Nothing]
-,
-testRegex "(?C0)(abc(?C1))*" [ERROR]
-    ["abcabcabc",
-     "abcabc\\C!1!3",
-     "*** Failers",
-     "abcabcabc\\C!1!3"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["--->abcabcabc"],
-     Just [" 0: abcabcabc"],
-     Just [" 1: abc"],
-     Just ["--->abcabc"],
-     Just [" 0: abcabc"],
-     Just [" 1: abc"],
-     Just ["--->*** Failers"],
-     Just [" 0: "],
-     Just ["--->abcabcabc"],
-     Just [" 0: abcabc"],
-     Just [" 1: abc"]]
-,
-testRegex "(\\d{3}(?C))*" [ERROR]
-    ["123\\C+",
-     "123456\\C+",
-     "123456789\\C+"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Callout 0: last capture = -1"],
-     Just [" 0: <unset>"],
-     Just ["--->123"],
-     Just [" 0: 123"],
-     Just [" 1: 123"],
-     Just ["Callout 0: last capture = -1"],
-     Just [" 0: <unset>"],
-     Just ["--->123456"],
-     Just ["Callout 0: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: 123"],
-     Just ["--->123456"],
-     Just [" 0: 123456"],
-     Just [" 1: 456"],
-     Just ["Callout 0: last capture = -1"],
-     Just [" 0: <unset>"],
-     Just ["--->123456789"],
-     Just ["Callout 0: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: 123"],
-     Just ["--->123456789"],
-     Just ["Callout 0: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: 456"],
-     Just ["--->123456789"],
-     Just [" 0: 123456789"],
-     Just [" 1: 789"]]
-,
-testRegex "((xyz)(?C)p|(?C1)xyzabc)" [ERROR]
-    ["xyzabc\\C+"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["No need char"],
-     Just ["Callout 0: last capture = 2"],
-     Just [" 0: <unset>"],
-     Just [" 1: <unset>"],
-     Just [" 2: xyz"],
-     Just ["--->xyzabc"],
-     Just ["Callout 1: last capture = -1"],
-     Just [" 0: <unset>"],
-     Just ["--->xyzabc"],
-     Just [" 0: xyzabc"],
-     Just [" 1: xyzabc"]]
-,
-testRegex "(X)((xyz)(?C)p|(?C1)xyzabc)" [ERROR]
-    ["Xxyzabc\\C+"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["No options"],
-     Just ["First char = 'X'"],
-     Just ["Need char = 'x'"],
-     Just ["Callout 0: last capture = 3"],
-     Just [" 0: <unset>"],
-     Just [" 1: X"],
-     Just [" 2: <unset>"],
-     Just [" 3: xyz"],
-     Just ["--->Xxyzabc"],
-     Just ["Callout 1: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: X"],
-     Just ["--->Xxyzabc"],
-     Just [" 0: Xxyzabc"],
-     Just [" 1: X"],
-     Just [" 2: xyzabc"]]
-,
-testRegex "(?=(abc))(?C)abcdef" [ERROR]
-    ["abcdef\\C+"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'f'"],
-     Just ["Callout 0: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: abc"],
-     Just ["--->abcdef"],
-     Just [" 0: abcdef"],
-     Just [" 1: abc"]]
-,
-testRegex "(?!(abc)(?C1)d)(?C2)abcxyz" [ERROR]
-    ["abcxyz\\C+"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'z'"],
-     Just ["Callout 1: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: abc"],
-     Just ["--->abcxyz"],
-     Just ["Callout 2: last capture = -1"],
-     Just [" 0: <unset>"],
-     Just ["--->abcxyz"],
-     Just [" 0: abcxyz"]]
-,
-testRegex "(?<=(abc)(?C))xyz" [ERROR]
-    ["abcxyz\\C+"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["Need char = 'z'"],
-     Just ["Callout 0: last capture = 1"],
-     Just [" 0: <unset>"],
-     Just [" 1: abc"],
-     Just ["--->abcxyz"],
-     Just [" 0: xyz"],
-     Just [" 1: abc"]]
-,
-testRegex "a(b+)(c*)(?C1)" [ERROR]
-    ["abbbbbccc\\C*1"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just ["--->abbbbbccc"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Nothing]
-,
-testRegex "a(b+?)(c*?)(?C1)" [ERROR]
-    ["abbbbbccc\\C*1"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just ["--->abbbbbccc"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Just ["Callout data = 1"],
-     Nothing]
-,
-testRegex "(?C)abc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(?C)^abc" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?C)a|b" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "(?R)" [ERROR]
-    []
-    [Just ["Failed: recursive call could loop indefinitely at offset 3"]]
-,
-testRegex "(a|(?R))" [ERROR]
-    []
-    [Just ["Failed: recursive call could loop indefinitely at offset 6"]]
-,
-testRegex "(ab|(bc|(de|(?R))))" [ERROR]
-    []
-    [Just ["Failed: recursive call could loop indefinitely at offset 15"]]
-,
-testRegex "x(ab|(bc|(de|(?R))))" [ERROR]
-    ["xab",
-     "xbc",
-     "xde",
-     "xxab",
-     "xxxab",
-     "*** Failers",
-     "xyab"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["No need char"],
-     Just [" 0: xab"],
-     Just [" 1: ab"],
-     Just [" 0: xbc"],
-     Just [" 1: bc"],
-     Just [" 2: bc"],
-     Just [" 0: xde"],
-     Just [" 1: de"],
-     Just [" 2: de"],
-     Just [" 3: de"],
-     Just [" 0: xxab"],
-     Just [" 1: xab"],
-     Just [" 2: xab"],
-     Just [" 3: xab"],
-     Just [" 0: xxxab"],
-     Just [" 1: xxab"],
-     Just [" 2: xxab"],
-     Just [" 3: xxab"],
-     Nothing,
-     Nothing]
-,
-testRegex "(ab|(bc|(de|(?1))))" [ERROR]
-    []
-    [Just ["Failed: recursive call could loop indefinitely at offset 15"]]
-,
-testRegex "x(ab|(bc|(de|(?1)x)x)x)" [ERROR]
-    []
-    [Just ["Failed: recursive call could loop indefinitely at offset 16"]]
-,
-testRegex "^([^()]|\\((?1)*\\))*$" [ERROR]
-    ["abc",
-     "a(b)c",
-     "a(b(c))d",
-     "*** Failers)",
-     "a(b(c)d"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abc"],
-     Just [" 1: c"],
-     Just [" 0: a(b)c"],
-     Just [" 1: c"],
-     Just [" 0: a(b(c))d"],
-     Just [" 1: d"],
-     Nothing,
-     Nothing]
-,
-testRegex "^>abc>([^()]|\\((?1)*\\))*<xyz<$" [ERROR]
-    [">abc>123<xyz<",
-     ">abc>1(2)3<xyz<",
-     ">abc>(1(2)3)<xyz<"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = '<'"],
-     Just [" 0: >abc>123<xyz<"],
-     Just [" 1: 3"],
-     Just [" 0: >abc>1(2)3<xyz<"],
-     Just [" 1: 3"],
-     Just [" 0: >abc>(1(2)3)<xyz<"],
-     Just [" 1: (1(2)3)"]]
-,
-testRegex "(a(?1)b)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "(a(?1)+b)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$" [caseless]
-    ["1221",
-     "Satan, oscillate my metallic sonatas!",
-     "A man, a plan, a canal: Panama!",
-     "Able was I ere I saw Elba.",
-     "*** Failers",
-     "The quick brown fox"]
-    [Just ["Capturing subpattern count = 4"],
-     Just ["Max back reference = 4"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 1221"],
-     Just [" 1: 1221"],
-     Just [" 2: 1"],
-     Just [" 0: Satan, oscillate my metallic sonatas!"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: Satan, oscillate my metallic sonatas"],
-     Just [" 4: S"],
-     Just [" 0: A man, a plan, a canal: Panama!"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: A man, a plan, a canal: Panama"],
-     Just [" 4: A"],
-     Just [" 0: Able was I ere I saw Elba."],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: Able was I ere I saw Elba"],
-     Just [" 4: A"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$" [ERROR]
-    ["12",
-     "(((2+2)*-3)-7)",
-     "-12",
-     "*** Failers",
-     "((2+2)*-3)-7)"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 12"],
-     Just [" 1: 12"],
-     Just [" 0: (((2+2)*-3)-7)"],
-     Just [" 1: (((2+2)*-3)-7)"],
-     Just [" 2: -"],
-     Just [" 0: -12"],
-     Just [" 1: -12"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(x(y|(?1){2})z)" [ERROR]
-    ["xyz",
-     "xxyzxyzz",
-     "*** Failers",
-     "xxyzz",
-     "xxyzxyzxyzz"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: xyz"],
-     Just [" 1: xyz"],
-     Just [" 2: y"],
-     Just [" 0: xxyzxyzz"],
-     Just [" 1: xxyzxyzz"],
-     Just [" 2: xyzxyz"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((< (?: (?(R) \\d++  | [^<>]*+) | (?2)) * >))" [ERROR]
-    ["<>",
-     "<abcd>",
-     "<abc <123> hij>",
-     "<abc <def> hij>",
-     "<abc<>def>",
-     "<abc<>",
-     "*** Failers",
-     "<abc"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["Options: extended"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <>"],
-     Just [" 1: <>"],
-     Just [" 2: <>"],
-     Just [" 0: <abcd>"],
-     Just [" 1: <abcd>"],
-     Just [" 2: <abcd>"],
-     Just [" 0: <abc <123> hij>"],
-     Just [" 1: <abc <123> hij>"],
-     Just [" 2: <abc <123> hij>"],
-     Just [" 0: <def>"],
-     Just [" 1: <def>"],
-     Just [" 2: <def>"],
-     Just [" 0: <abc<>def>"],
-     Just [" 1: <abc<>def>"],
-     Just [" 2: <abc<>def>"],
-     Just [" 0: <>"],
-     Just [" 1: <>"],
-     Just [" 2: <>"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?1)" [ERROR]
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 3"]]
-,
-testRegex "((?2)(abc)" [ERROR]
-    []
-    [Just ["Failed: missing ) at offset 10"]]
-,
-testRegex "^(abc)def(?1)" [ERROR]
-    ["abcdefabc"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: abcdefabc"],
-     Just [" 1: abc"]]
-,
-testRegex "^(a|b|c)=(?1)+" [ERROR]
-    ["a=a",
-     "a=b",
-     "a=bc"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a=a"],
-     Just [" 1: a"],
-     Just [" 0: a=b"],
-     Just [" 1: a"],
-     Just [" 0: a=bc"],
-     Just [" 1: a"]]
-,
-testRegex "^(a|b|c)=((?1))+" [ERROR]
-    ["a=a",
-     "a=b",
-     "a=bc"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a=a"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 0: a=b"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 0: a=bc"],
-     Just [" 1: a"],
-     Just [" 2: c"]]
-,
-testRegex "a(?P<name1>b|c)d(?P<longername2>e)" [ERROR]
-    ["abde",
-     "acde"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'e'"],
-     Just [" 0: abde"],
-     Just [" 1: b"],
-     Just [" 2: e"],
-     Just [" 0: acde"],
-     Just [" 1: c"],
-     Just [" 2: e"]]
-,
-testRegex "(?:a(?P<c>c(?P<d>d)))(?P<a>a)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 3"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(?P<a>a)...(?P=a)bbb(?P>a)d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'd'"]]
-,
-testRegex "^\\W*(?:(?P<one>(?P<two>.)\\W*(?P>one)\\W*(?P=two)|)|(?P<three>(?P<four>.)\\W*(?P>three)\\W*(?P=four)|\\W*.\\W*))\\W*$" [caseless]
-    ["1221",
-     "Satan, oscillate my metallic sonatas!",
-     "A man, a plan, a canal: Panama!",
-     "Able was I ere I saw Elba.",
-     "*** Failers",
-     "The quick brown fox"]
-    [Just ["Capturing subpattern count = 4"],
-     Just ["Max back reference = 4"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 1221"],
-     Just [" 1: 1221"],
-     Just [" 2: 1"],
-     Just [" 0: Satan, oscillate my metallic sonatas!"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: Satan, oscillate my metallic sonatas"],
-     Just [" 4: S"],
-     Just [" 0: A man, a plan, a canal: Panama!"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: A man, a plan, a canal: Panama"],
-     Just [" 4: A"],
-     Just [" 0: Able was I ere I saw Elba."],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: Able was I ere I saw Elba"],
-     Just [" 4: A"],
-     Nothing,
-     Nothing]
-,
-testRegex "((?(R)a|b))\\1(?1)?" [ERROR]
-    ["bb",
-     "bbaa"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: bb"],
-     Just [" 1: b"],
-     Just [" 0: bba"],
-     Just [" 1: b"]]
-,
-testRegex "(.*)a" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(.*)a\\1" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'a'"]]
-,
-testRegex "(.*)a(b)\\2" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Max back reference = 2"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "((.*)a|(.*)b)z" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "((.*)a|(.*)b)z\\1" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "((.*)a|(.*)b)z\\2" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 2"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "((.*)a|(.*)b)z\\3" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "((.*)a|^(.*)b)z\\3" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 31"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\\31" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 31"],
-     Just ["Max back reference = 31"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\\32" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 32"],
-     Just ["Max back reference = 32"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(a)(bc)" [ERROR]
-    ["abc"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: no_auto_capture"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"]]
-,
-testRegex "(?P<one>a)(bc)" [ERROR]
-    ["abc"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: no_auto_capture"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 1: a"]]
-,
-testRegex "(a)(?P<named>bc)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: no_auto_capture"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"]]
-,
-testRegex "(a+)*zz" [ERROR]
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\\M",
-     "aaaaaaaaaaaaaz\\M"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Minimum match() limit = 8"],
-     Just ["Minimum match() recursion limit = 6"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["Minimum match() limit = 32768"],
-     Just ["Minimum match() recursion limit = 42"],
-     Nothing]
-,
-testRegex "(aaa(?C1)bbb|ab)" [ERROR]
-    ["aaabbb",
-     "aaabbb\\C*0",
-     "aaabbb\\C*1",
-     "aaabbb\\C*-1"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just ["--->aaabbb"],
-     Just [" 0: aaabbb"],
-     Just [" 1: aaabbb"],
-     Just ["--->aaabbb"],
-     Just [" 0: aaabbb"],
-     Just [" 1: aaabbb"],
-     Just ["--->aaabbb"],
-     Just ["Callout data = 1"],
-     Just [" 0: ab"],
-     Just [" 1: ab"],
-     Just ["--->aaabbb"],
-     Just ["Callout data = -1"],
-     Nothing]
-,
-testRegex "ab(?P<one>cd)ef(?P<two>gh)" [ERROR]
-    ["abcdefgh",
-     "abcdefgh\\C1\\Gtwo",
-     "abcdefgh\\Cone\\Ctwo",
-     "abcdefgh\\Cthree"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'h'"],
-     Just [" 0: abcdefgh"],
-     Just [" 1: cd"],
-     Just [" 2: gh"],
-     Just [" 0: abcdefgh"],
-     Just [" 1: cd"],
-     Just [" 2: gh"],
-     Just [" 1C cd (2)"],
-     Just [" 0: abcdefgh"],
-     Just [" 1: cd"],
-     Just [" 2: gh"],
-     Just ["no parentheses with name \"three\""],
-     Just [" 0: abcdefgh"],
-     Just [" 1: cd"],
-     Just [" 2: gh"],
-     Just ["copy substring three failed -7"]]
-,
-testRegex "(?P<Tes>)(?P<Test>)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?P<Test>)(?P<Tes>)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(?P<Z>zz)(?P<A>aa)" [ERROR]
-    ["zzaa\\CZ",
-     "zzaa\\CA"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'z'"],
-     Just ["Need char = 'a'"],
-     Just [" 0: zzaa"],
-     Just [" 1: zz"],
-     Just [" 2: aa"],
-     Just [" 0: zzaa"],
-     Just [" 1: zz"],
-     Just [" 2: aa"]]
-,
-testRegex "(?P<x>eks)(?P<x>eccs)" [ERROR]
-    []
-    [Just ["Failed: two named subpatterns have the same name at offset 15"]]
-,
-testRegex "(?P<abc>abc(?P<def>def)(?P<abc>xyz))" [ERROR]
-    []
-    [Just ["Failed: two named subpatterns have the same name at offset 30"]]
-,
-testRegex "\\[((?P<elem>\\d+)(,(?P>elem))*)\\]" [ERROR]
-    ["[10,20,30,5,5,4,4,2,43,23,4234]",
-     "*** Failers",
-     "[]"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = '['"],
-     Just ["Need char = ']'"],
-     Just [" 0: [10,20,30,5,5,4,4,2,43,23,4234]"],
-     Just [" 1: 10,20,30,5,5,4,4,2,43,23,4234"],
-     Just [" 2: 10"],
-     Just [" 3: ,4234"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\[((?P<elem>\\d+)(,(?P>elem))*)?\\]" [ERROR]
-    ["[10,20,30,5,5,4,4,2,43,23,4234]",
-     "[]"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["First char = '['"],
-     Just ["Need char = ']'"],
-     Just [" 0: [10,20,30,5,5,4,4,2,43,23,4234]"],
-     Just [" 1: 10,20,30,5,5,4,4,2,43,23,4234"],
-     Just [" 2: 10"],
-     Just [" 3: ,4234"],
-     Just [" 0: []"]]
-,
-testRegex "(a(b(?2)c))?" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(a(b(?2)c))*" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "(a(b(?2)c)){0,2}" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 2"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[ab]{1}+" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "((w\\/|-|with)*(free|immediate)*.*?shipping\\s*[!.-]*)" [caseless]
-    ["Baby Bjorn Active Carrier - With free SHIPPING!!"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["Need char = 'g' (caseless)"],
-     Just [" 0: Baby Bjorn Active Carrier - With free SHIPPING!!"],
-     Just [" 1: Baby Bjorn Active Carrier - With free SHIPPING!!"]]
-,
-testRegex "((w\\/|-|with)*(free|immediate)*.*?shipping\\s*[!.-]*)" [ERROR]
-    ["Baby Bjorn Active Carrier - With free SHIPPING!!"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Partial matching not supported"],
-     Just ["Options: caseless"],
-     Just ["No first char"],
-     Just ["Need char = 'g' (caseless)"],
-     Just ["Study returned NULL"],
-     Just [" 0: Baby Bjorn Active Carrier - With free SHIPPING!!"],
-     Just [" 1: Baby Bjorn Active Carrier - With free SHIPPING!!"]]
-,
-testRegex "a*.*b" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"],
-     Just ["Study returned NULL"]]
-,
-testRegex "(a|b)*.?c" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'c'"],
-     Just ["Study returned NULL"]]
-,
-testRegex "abc(?C255)de(?C)f" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'f'"]]
-,
-testRegex "abcde" [ERROR]
-    ["abcde",
-     "abcdfe"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options:"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'e'"],
-     Just ["--->abcde"],
-     Just [" +0 ^         a"],
-     Just [" +1 ^^        b"],
-     Just [" +2 ^ ^       c"],
-     Just [" +3 ^  ^      d"],
-     Just [" +4 ^   ^     e"],
-     Just [" +5 ^    ^    "],
-     Just [" 0: abcde"],
-     Just ["--->abcdfe"],
-     Just [" +0 ^          a"],
-     Just [" +1 ^^         b"],
-     Just [" +2 ^ ^        c"],
-     Just [" +3 ^  ^       d"],
-     Just [" +4 ^   ^      e"],
-     Nothing]
-,
-testRegex "a*b" [ERROR]
-    ["ab",
-     "aaaab",
-     "aaaacb"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options:"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"],
-     Just ["--->ab"],
-     Just [" +0 ^      a*"],
-     Just [" +2 ^^     b"],
-     Just [" +3 ^ ^    "],
-     Just [" 0: ab"],
-     Just ["--->aaaab"],
-     Just [" +0 ^         a*"],
-     Just [" +2 ^   ^     b"],
-     Just [" +3 ^    ^    "],
-     Just [" 0: aaaab"],
-     Just ["--->aaaacb"],
-     Just [" +0 ^          a*"],
-     Just [" +2 ^   ^      b"],
-     Just [" +0  ^         a*"],
-     Just [" +2  ^  ^      b"],
-     Just [" +0   ^        a*"],
-     Just [" +2   ^ ^      b"],
-     Just [" +0    ^       a*"],
-     Just [" +2    ^^      b"],
-     Just [" +0     ^      a*"],
-     Just [" +2     ^      b"],
-     Just [" +0      ^     a*"],
-     Just [" +2      ^     b"],
-     Just [" +3      ^^    "],
-     Just [" 0: b"]]
-,
-testRegex "a+b" [ERROR]
-    ["ab",
-     "aaaab",
-     "aaaacb"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options:"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just ["--->ab"],
-     Just [" +0 ^      a+"],
-     Just [" +2 ^^     b"],
-     Just [" +3 ^ ^    "],
-     Just [" 0: ab"],
-     Just ["--->aaaab"],
-     Just [" +0 ^         a+"],
-     Just [" +2 ^   ^     b"],
-     Just [" +3 ^    ^    "],
-     Just [" 0: aaaab"],
-     Just ["--->aaaacb"],
-     Just [" +0 ^          a+"],
-     Just [" +2 ^   ^      b"],
-     Just [" +0  ^         a+"],
-     Just [" +2  ^  ^      b"],
-     Just [" +0   ^        a+"],
-     Just [" +2   ^ ^      b"],
-     Just [" +0    ^       a+"],
-     Just [" +2    ^^      b"],
-     Nothing]
-,
-testRegex "(abc|def)x" [ERROR]
-    ["abcx",
-     "defx",
-     "abcdefzx"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Options:"],
-     Just ["No first char"],
-     Just ["Need char = 'x'"],
-     Just ["--->abcx"],
-     Just [" +0 ^        (abc|def)"],
-     Just [" +1 ^        a"],
-     Just [" +2 ^^       b"],
-     Just [" +3 ^ ^      c"],
-     Just [" +4 ^  ^     |"],
-     Just [" +9 ^  ^     x"],
-     Just ["+10 ^   ^    "],
-     Just [" 0: abcx"],
-     Just [" 1: abc"],
-     Just ["--->defx"],
-     Just [" +0 ^        (abc|def)"],
-     Just [" +1 ^        a"],
-     Just [" +5 ^        d"],
-     Just [" +6 ^^       e"],
-     Just [" +7 ^ ^      f"],
-     Just [" +8 ^  ^     )"],
-     Just [" +9 ^  ^     x"],
-     Just ["+10 ^   ^    "],
-     Just [" 0: defx"],
-     Just [" 1: def"],
-     Just ["--->abcdefzx"],
-     Just [" +0 ^            (abc|def)"],
-     Just [" +1 ^            a"],
-     Just [" +2 ^^           b"],
-     Just [" +3 ^ ^          c"],
-     Just [" +4 ^  ^         |"],
-     Just [" +9 ^  ^         x"],
-     Just [" +5 ^            d"],
-     Just [" +0  ^           (abc|def)"],
-     Just [" +1  ^           a"],
-     Just [" +5  ^           d"],
-     Just [" +0   ^          (abc|def)"],
-     Just [" +1   ^          a"],
-     Just [" +5   ^          d"],
-     Just [" +0    ^         (abc|def)"],
-     Just [" +1    ^         a"],
-     Just [" +5    ^         d"],
-     Just [" +6    ^^        e"],
-     Just [" +7    ^ ^       f"],
-     Just [" +8    ^  ^      )"],
-     Just [" +9    ^  ^      x"],
-     Just [" +0     ^        (abc|def)"],
-     Just [" +1     ^        a"],
-     Just [" +5     ^        d"],
-     Just [" +0      ^       (abc|def)"],
-     Just [" +1      ^       a"],
-     Just [" +5      ^       d"],
-     Just [" +0       ^      (abc|def)"],
-     Just [" +1       ^      a"],
-     Just [" +5       ^      d"],
-     Just [" +0        ^     (abc|def)"],
-     Just [" +1        ^     a"],
-     Just [" +5        ^     d"],
-     Nothing]
-,
-testRegex "(ab|cd){3,4}" [ERROR]
-    ["ababab",
-     "abcdabcd",
-     "abcdcdcdcdcd"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Options:"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["--->ababab"],
-     Just [" +0 ^          (ab|cd){3,4}"],
-     Just [" +1 ^          a"],
-     Just [" +2 ^^         b"],
-     Just [" +3 ^ ^        |"],
-     Just [" +1 ^ ^        a"],
-     Just [" +2 ^  ^       b"],
-     Just [" +3 ^   ^      |"],
-     Just [" +1 ^   ^      a"],
-     Just [" +2 ^    ^     b"],
-     Just [" +3 ^     ^    |"],
-     Just [" +1 ^     ^    a"],
-     Just [" +4 ^     ^    c"],
-     Just ["+12 ^     ^    "],
-     Just [" 0: ababab"],
-     Just [" 1: ab"],
-     Just ["--->abcdabcd"],
-     Just [" +0 ^            (ab|cd){3,4}"],
-     Just [" +1 ^            a"],
-     Just [" +2 ^^           b"],
-     Just [" +3 ^ ^          |"],
-     Just [" +1 ^ ^          a"],
-     Just [" +4 ^ ^          c"],
-     Just [" +5 ^  ^         d"],
-     Just [" +6 ^   ^        )"],
-     Just [" +1 ^   ^        a"],
-     Just [" +2 ^    ^       b"],
-     Just [" +3 ^     ^      |"],
-     Just [" +1 ^     ^      a"],
-     Just [" +4 ^     ^      c"],
-     Just [" +5 ^      ^     d"],
-     Just [" +6 ^       ^    )"],
-     Just ["+12 ^       ^    "],
-     Just [" 0: abcdabcd"],
-     Just [" 1: cd"],
-     Just ["--->abcdcdcdcdcd"],
-     Just [" +0 ^                (ab|cd){3,4}"],
-     Just [" +1 ^                a"],
-     Just [" +2 ^^               b"],
-     Just [" +3 ^ ^              |"],
-     Just [" +1 ^ ^              a"],
-     Just [" +4 ^ ^              c"],
-     Just [" +5 ^  ^             d"],
-     Just [" +6 ^   ^            )"],
-     Just [" +1 ^   ^            a"],
-     Just [" +4 ^   ^            c"],
-     Just [" +5 ^    ^           d"],
-     Just [" +6 ^     ^          )"],
-     Just [" +1 ^     ^          a"],
-     Just [" +4 ^     ^          c"],
-     Just [" +5 ^      ^         d"],
-     Just [" +6 ^       ^        )"],
-     Just ["+12 ^       ^        "],
-     Just [" 0: abcdcdcd"],
-     Just [" 1: cd"]]
-,
-testRegex "([ab]{,4}c|xy)" [ERROR]
-    ["Note: that { does NOT introduce a quantifier"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Options:"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["--->Note: that { does NOT introduce a quantifier"],
-     Just [" +0 ^                                                ([ab]{,4}c|xy)"],
-     Just [" +1 ^                                                [ab]"],
-     Just ["+11 ^                                                x"],
-     Just [" +0  ^                                               ([ab]{,4}c|xy)"],
-     Just [" +1  ^                                               [ab]"],
-     Just ["+11  ^                                               x"],
-     Just [" +0   ^                                              ([ab]{,4}c|xy)"],
-     Just [" +1   ^                                              [ab]"],
-     Just ["+11   ^                                              x"],
-     Just [" +0    ^                                             ([ab]{,4}c|xy)"],
-     Just [" +1    ^                                             [ab]"],
-     Just ["+11    ^                                             x"],
-     Just [" +0     ^                                            ([ab]{,4}c|xy)"],
-     Just [" +1     ^                                            [ab]"],
-     Just ["+11     ^                                            x"],
-     Just [" +0      ^                                           ([ab]{,4}c|xy)"],
-     Just [" +1      ^                                           [ab]"],
-     Just ["+11      ^                                           x"],
-     Just [" +0       ^                                          ([ab]{,4}c|xy)"],
-     Just [" +1       ^                                          [ab]"],
-     Just ["+11       ^                                          x"],
-     Just [" +0        ^                                         ([ab]{,4}c|xy)"],
-     Just [" +1        ^                                         [ab]"],
-     Just ["+11        ^                                         x"],
-     Just [" +0         ^                                        ([ab]{,4}c|xy)"],
-     Just [" +1         ^                                        [ab]"],
-     Just [" +5         ^^                                       {"],
-     Just ["+11         ^                                        x"],
-     Just [" +0          ^                                       ([ab]{,4}c|xy)"],
-     Just [" +1          ^                                       [ab]"],
-     Just ["+11          ^                                       x"],
-     Just [" +0           ^                                      ([ab]{,4}c|xy)"],
-     Just [" +1           ^                                      [ab]"],
-     Just ["+11           ^                                      x"],
-     Just [" +0            ^                                     ([ab]{,4}c|xy)"],
-     Just [" +1            ^                                     [ab]"],
-     Just ["+11            ^                                     x"],
-     Just [" +0             ^                                    ([ab]{,4}c|xy)"],
-     Just [" +1             ^                                    [ab]"],
-     Just ["+11             ^                                    x"],
-     Just [" +0              ^                                   ([ab]{,4}c|xy)"],
-     Just [" +1              ^                                   [ab]"],
-     Just ["+11              ^                                   x"],
-     Just [" +0               ^                                  ([ab]{,4}c|xy)"],
-     Just [" +1               ^                                  [ab]"],
-     Just ["+11               ^                                  x"],
-     Just [" +0                ^                                 ([ab]{,4}c|xy)"],
-     Just [" +1                ^                                 [ab]"],
-     Just ["+11                ^                                 x"],
-     Just [" +0                 ^                                ([ab]{,4}c|xy)"],
-     Just [" +1                 ^                                [ab]"],
-     Just ["+11                 ^                                x"],
-     Just [" +0                  ^                               ([ab]{,4}c|xy)"],
-     Just [" +1                  ^                               [ab]"],
-     Just ["+11                  ^                               x"],
-     Just [" +0                   ^                              ([ab]{,4}c|xy)"],
-     Just [" +1                   ^                              [ab]"],
-     Just ["+11                   ^                              x"],
-     Just [" +0                    ^                             ([ab]{,4}c|xy)"],
-     Just [" +1                    ^                             [ab]"],
-     Just ["+11                    ^                             x"],
-     Just [" +0                     ^                            ([ab]{,4}c|xy)"],
-     Just [" +1                     ^                            [ab]"],
-     Just ["+11                     ^                            x"],
-     Just [" +0                      ^                           ([ab]{,4}c|xy)"],
-     Just [" +1                      ^                           [ab]"],
-     Just ["+11                      ^                           x"],
-     Just [" +0                       ^                          ([ab]{,4}c|xy)"],
-     Just [" +1                       ^                          [ab]"],
-     Just ["+11                       ^                          x"],
-     Just [" +0                        ^                         ([ab]{,4}c|xy)"],
-     Just [" +1                        ^                         [ab]"],
-     Just ["+11                        ^                         x"],
-     Just [" +0                         ^                        ([ab]{,4}c|xy)"],
-     Just [" +1                         ^                        [ab]"],
-     Just ["+11                         ^                        x"],
-     Just [" +0                          ^                       ([ab]{,4}c|xy)"],
-     Just [" +1                          ^                       [ab]"],
-     Just ["+11                          ^                       x"],
-     Just [" +0                           ^                      ([ab]{,4}c|xy)"],
-     Just [" +1                           ^                      [ab]"],
-     Just ["+11                           ^                      x"],
-     Just [" +0                            ^                     ([ab]{,4}c|xy)"],
-     Just [" +1                            ^                     [ab]"],
-     Just ["+11                            ^                     x"],
-     Just [" +0                             ^                    ([ab]{,4}c|xy)"],
-     Just [" +1                             ^                    [ab]"],
-     Just ["+11                             ^                    x"],
-     Just [" +0                              ^                   ([ab]{,4}c|xy)"],
-     Just [" +1                              ^                   [ab]"],
-     Just ["+11                              ^                   x"],
-     Just [" +0                               ^                  ([ab]{,4}c|xy)"],
-     Just [" +1                               ^                  [ab]"],
-     Just ["+11                               ^                  x"],
-     Just [" +0                                ^                 ([ab]{,4}c|xy)"],
-     Just [" +1                                ^                 [ab]"],
-     Just ["+11                                ^                 x"],
-     Just [" +0                                 ^                ([ab]{,4}c|xy)"],
-     Just [" +1                                 ^                [ab]"],
-     Just [" +5                                 ^^               {"],
-     Just ["+11                                 ^                x"],
-     Just [" +0                                  ^               ([ab]{,4}c|xy)"],
-     Just [" +1                                  ^               [ab]"],
-     Just ["+11                                  ^               x"],
-     Just [" +0                                   ^              ([ab]{,4}c|xy)"],
-     Just [" +1                                   ^              [ab]"],
-     Just ["+11                                   ^              x"],
-     Just [" +0                                    ^             ([ab]{,4}c|xy)"],
-     Just [" +1                                    ^             [ab]"],
-     Just ["+11                                    ^             x"],
-     Just [" +0                                     ^            ([ab]{,4}c|xy)"],
-     Just [" +1                                     ^            [ab]"],
-     Just [" +5                                     ^^           {"],
-     Just ["+11                                     ^            x"],
-     Just [" +0                                      ^           ([ab]{,4}c|xy)"],
-     Just [" +1                                      ^           [ab]"],
-     Just ["+11                                      ^           x"],
-     Just [" +0                                       ^          ([ab]{,4}c|xy)"],
-     Just [" +1                                       ^          [ab]"],
-     Just ["+11                                       ^          x"],
-     Just [" +0                                        ^         ([ab]{,4}c|xy)"],
-     Just [" +1                                        ^         [ab]"],
-     Just ["+11                                        ^         x"],
-     Just [" +0                                         ^        ([ab]{,4}c|xy)"],
-     Just [" +1                                         ^        [ab]"],
-     Just ["+11                                         ^        x"],
-     Just [" +0                                          ^       ([ab]{,4}c|xy)"],
-     Just [" +1                                          ^       [ab]"],
-     Just ["+11                                          ^       x"],
-     Just [" +0                                           ^      ([ab]{,4}c|xy)"],
-     Just [" +1                                           ^      [ab]"],
-     Just ["+11                                           ^      x"],
-     Just [" +0                                            ^     ([ab]{,4}c|xy)"],
-     Just [" +1                                            ^     [ab]"],
-     Just ["+11                                            ^     x"],
-     Just [" +0                                             ^    ([ab]{,4}c|xy)"],
-     Just [" +1                                             ^    [ab]"],
-     Just ["+11                                             ^    x"],
-     Nothing]
-,
-testRegex "([ab]{1,4}c|xy){4,5}?123" [ERROR]
-    ["aacaacaacaacaac123"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options:"],
-     Just ["No first char"],
-     Just ["Need char = '3'"],
-     Just ["--->aacaacaacaacaac123"],
-     Just [" +0 ^                      ([ab]{1,4}c|xy){4,5}?"],
-     Just [" +1 ^                      [ab]{1,4}"],
-     Just ["+10 ^ ^                    c"],
-     Just ["+11 ^  ^                   |"],
-     Just [" +1 ^  ^                   [ab]{1,4}"],
-     Just ["+10 ^    ^                 c"],
-     Just ["+11 ^     ^                |"],
-     Just [" +1 ^     ^                [ab]{1,4}"],
-     Just ["+10 ^       ^              c"],
-     Just ["+11 ^        ^             |"],
-     Just [" +1 ^        ^             [ab]{1,4}"],
-     Just ["+10 ^          ^           c"],
-     Just ["+11 ^           ^          |"],
-     Just ["+21 ^           ^          1"],
-     Just [" +1 ^           ^          [ab]{1,4}"],
-     Just ["+10 ^             ^        c"],
-     Just ["+11 ^              ^       |"],
-     Just ["+21 ^              ^       1"],
-     Just ["+22 ^               ^      2"],
-     Just ["+23 ^                ^     3"],
-     Just ["+24 ^                 ^    "],
-     Just [" 0: aacaacaacaacaac123"],
-     Just [" 1: aac"]]
-,
-testRegex "\\b.*" [ERROR]
-    ["ab cd\\>1"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0:  cd"]]
-,
-testRegex "\\b.*" [ERROR]
-    ["ab cd\\>1"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0:  cd"]]
-,
-testRegex "(?!.bcd).*" [ERROR]
-    ["Xbcd12345"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: bcd12345"]]
-,
-testRegex "abcde" [ERROR]
-    ["ab\\P",
-     "abc\\P",
-     "abcd\\P",
-     "abcde\\P",
-     "the quick brown abc\\P",
-     "** Failers\\P",
-     "the quick brown abxyz fox\\P"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'e'"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just [" 0: abcde"],
-     Just ["Partial match"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\\d\\d$" [ERROR]
-    ["13/05/04\\P",
-     "13/5/2004\\P",
-     "02/05/09\\P",
-     "1\\P",
-     "1/2\\P",
-     "1/2/0\\P",
-     "1/2/04\\P",
-     "0\\P",
-     "02/\\P",
-     "02/0\\P",
-     "02/1\\P",
-     "** Failers\\P",
-     "\\P",
-     "123\\P",
-     "33/4/04\\P",
-     "3/13/04\\P",
-     "0/1/2003\\P",
-     "0/\\P",
-     "02/0/\\P",
-     "02/13\\P"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = '/'"],
-     Just [" 0: 13/05/04"],
-     Just [" 1: 13"],
-     Just [" 2: 05"],
-     Just [" 0: 13/5/2004"],
-     Just [" 1: 13"],
-     Just [" 2: 5"],
-     Just [" 3: 20"],
-     Just [" 0: 02/05/09"],
-     Just [" 1: 02"],
-     Just [" 2: 05"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just [" 0: 1/2/04"],
-     Just [" 1: 1"],
-     Just [" 2: 2"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "0{0,2}ABC" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'C'"]]
-,
-testRegex "\\d{3,}ABC" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'C'"]]
-,
-testRegex "\\d*ABC" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'C'"]]
-,
-testRegex "[abc]+DE" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'E'"]]
-,
-testRegex "[abc]?123" [ERROR]
-    ["123\\P",
-     "a\\P",
-     "b\\P",
-     "c\\P",
-     "c12\\P",
-     "c123\\P"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = '3'"],
-     Just [" 0: 123"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just [" 0: c123"]]
-,
-testRegex "^(?:\\d){3,5}X" [ERROR]
-    ["1\\P",
-     "123\\P",
-     "123X",
-     "1234\\P",
-     "1234X",
-     "12345\\P",
-     "12345X",
-     "*** Failers",
-     "1X",
-     "123456\\P"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'X'"],
-     Just ["Partial match"],
-     Just ["Partial match"],
-     Just [" 0: 123X"],
-     Just ["Partial match"],
-     Just [" 0: 1234X"],
-     Just ["Partial match"],
-     Just [" 0: 12345X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "abc" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "** Failers",
-     "bca"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just ["Compiled regex written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex loaded from testsavedregex"],
-     Just ["No study data"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "abc" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "** Failers",
-     "bca"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just ["Compiled regex written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
-     Just ["No study data"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "(a|b)" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "** Failers",
-     "def"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "],
-     Just ["Compiled regex written to testsavedregex"],
-     Just ["Study data written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex loaded from testsavedregex"],
-     Just ["Study data loaded from testsavedregex"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Nothing]
-,
-testRegex "(a|b)" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "** Failers",
-     "def"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "],
-     Just ["Compiled regex written to testsavedregex"],
-     Just ["Study data written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
-     Just ["Study data loaded from testsavedregex"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Nothing]
-,
-testRegex "ERROR" []
-    ["<!DOCTYPE seite SYSTEM \"http://www.lco.lineas.de/xmlCms.dtd\">\\n<seite>\\n<dokumenteninformation>\\n<seitentitel>Partner der LCO</seitentitel>\\n<sprache>de</sprache>\\n<seitenbeschreibung>Partner der LINEAS Consulting\\nGmbH</seitenbeschreibung>\\n<schluesselworte>LINEAS Consulting GmbH Hamburg\\nPartnerfirmen</schluesselworte>\\n<revisit>30 days</revisit>\\n<robots>index,follow</robots>\\n<menueinformation>\\n<aktiv>ja</aktiv>\\n<menueposition>3</menueposition>\\n<menuetext>Partner</menuetext>\\n</menueinformation>\\n<lastedited>\\n<autor>LCO</autor>\\n<firma>LINEAS Consulting</firma>\\n<datum>15.10.2003</datum>\\n</lastedited>\\n</dokumenteninformation>\\n<inhalt>\\n\\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\\nGmbH</absatzueberschrift>\\n\\n<absatz><link ziel=\"http://www.ca.com/\" zielfenster=\"_blank\">\\n<bild name=\"logo_ca.gif\" rahmen=\"no\"/></link> <link\\nziel=\"http://www.ey.com/\" zielfenster=\"_blank\"><bild\\nname=\"logo_euy.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><link ziel=\"http://www.cisco.de/\" zielfenster=\"_blank\">\\n<bild name=\"logo_cisco.gif\" rahmen=\"ja\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.atelion.de/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_atelion.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><link ziel=\"http://www.line-information.de/\"\\nzielfenster=\"_blank\">\\n<bild name=\"logo_line_information.gif\" rahmen=\"no\"/></link>\\n</absatz>\\n\\n<absatz><bild name=\"logo_aw.gif\" rahmen=\"no\"/></absatz>\\n\\n<absatz><link ziel=\"http://www.incognis.de/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_incognis.gif\" rahmen=\"no\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.addcraft.com/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_addcraft.gif\" rahmen=\"no\"/></link></absatz>\\n\\n<absatz><link ziel=\"http://www.comendo.com/\"\\nzielfenster=\"_blank\"><bild\\nname=\"logo_comendo.gif\" rahmen=\"no\"/></link></absatz>\\n\\n</inhalt>\\n</seite>"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["Options: multiline dotall"],
-     Just ["First char = '<'"],
-     Just ["Need char = '>'"],
-     Just [" 0: <seite>\\x0a<dokumenteninformation>\\x0a<seitentitel>Partner der LCO</seitentitel>\\x0a<sprache>de</sprache>\\x0a<seitenbeschreibung>Partner der LINEAS Consulting\\x0aGmbH</seitenbeschreibung>\\x0a<schluesselworte>LINEAS Consulting GmbH Hamburg\\x0aPartnerfirmen</schluesselworte>\\x0a<revisit>30 days</revisit>\\x0a<robots>index,follow</robots>\\x0a<menueinformation>\\x0a<aktiv>ja</aktiv>\\x0a<menueposition>3</menueposition>\\x0a<menuetext>Partner</menuetext>\\x0a</menueinformation>\\x0a<lastedited>\\x0a<autor>LCO</autor>\\x0a<firma>LINEAS Consulting</firma>\\x0a<datum>15.10.2003</datum>\\x0a</lastedited>\\x0a</dokumenteninformation>\\x0a<inhalt>\\x0a\\x0a<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\\x0aGmbH</absatzueberschrift>\\x0a\\x0a<absatz><link ziel=\"http://www.ca.com/\" zielfenster=\"_blank\">\\x0a<bild name=\"logo_ca.gif\" rahmen=\"no\"/></link> <link\\x0aziel=\"http://www.ey.com/\" zielfenster=\"_blank\"><bild\\x0aname=\"logo_euy.gif\" rahmen=\"no\"/></link>\\x0a</absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.cisco.de/\" zielfenster=\"_blank\">\\x0a<bild name=\"logo_cisco.gif\" rahmen=\"ja\"/></link></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.atelion.de/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_atelion.gif\" rahmen=\"no\"/></link>\\x0a</absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.line-information.de/\"\\x0azielfenster=\"_blank\">\\x0a<bild name=\"logo_line_information.gif\" rahmen=\"no\"/></link>\\x0a</absatz>\\x0a\\x0a<absatz><bild name=\"logo_aw.gif\" rahmen=\"no\"/></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.incognis.de/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_incognis.gif\" rahmen=\"no\"/></link></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.addcraft.com/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_addcraft.gif\" rahmen=\"no\"/></link></absatz>\\x0a\\x0a<absatz><link ziel=\"http://www.comendo.com/\"\\x0azielfenster=\"_blank\"><bild\\x0aname=\"logo_comendo.gif\" rahmen=\"no\"/></link></absatz>\\x0a\\x0a</inhalt>\\x0a</seite>"],
-     Just [" 1: seite"],
-     Just [" 2: \\x0a"],
-     Just [" 3: seite"]]
-,
-testRegex "^a" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "line\\nbreak" [ERROR]
-    ["this is a line\\nbreak",
-     "line one\\nthis is a line\\nbreak in the second line"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["No options"],
-     Just ["First char = 'l'"],
-     Just ["Need char = 'k'"],
-     Just [" 0: line\\x0abreak"],
-     Just [" 0: line\\x0abreak"]]
-,
-testRegex "line\\nbreak" [ERROR]
-    ["this is a line\\nbreak",
-     "** Failers",
-     "line one\\nthis is a line\\nbreak in the second line"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["Options: firstline"],
-     Just ["First char = 'l'"],
-     Just ["Need char = 'k'"],
-     Just [" 0: line\\x0abreak"],
-     Nothing,
-     Nothing]
-,
-testRegex "line\\nbreak" [ERROR]
-    ["this is a line\\nbreak",
-     "** Failers",
-     "line one\\nthis is a line\\nbreak in the second line"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Contains explicit CR or LF match"],
-     Just ["Options: multiline firstline"],
-     Just ["First char = 'l'"],
-     Just ["Need char = 'k'"],
-     Just [" 0: line\\x0abreak"],
-     Nothing,
-     Nothing]
-,
-testRegex "ab.cd" [ERROR]
-    ["ab-cd",
-     "ab=cd",
-     "** Failers",
-     "ab\\ncd"]
-    [Just [" 0: ab-cd"],
-     Just [" 0: ab=cd"],
-     Just ["No match: POSIX code 17: match failed"],
-     Just ["No match: POSIX code 17: match failed"]]
-,
-testRegex "ab.cd" [ERROR]
-    ["ab-cd",
-     "ab=cd",
-     "ab\\ncd"]
-    [Just [" 0: ab-cd"],
-     Just [" 0: ab=cd"],
-     Just [" 0: ab\\x0acd"]]
-,
-testRegex "(?i)(?-i)AbCd" [ERROR]
-    ["AbCd",
-     "** Failers",
-     "abcd"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'A'"],
-     Just ["Need char = 'd'"],
-     Just [" 0: AbCd"],
-     Nothing,
-     Nothing]
-,
-testRegex "a{11111111111111111111}" [ERROR]
-    []
-    [Just ["Failed: number too big in {} quantifier at offset 22"]]
-,
-testRegex "(){64294967295}" [ERROR]
-    []
-    [Just ["Failed: number too big in {} quantifier at offset 14"]]
-,
-testRegex "(){2,4294967295}" [ERROR]
-    []
-    [Just ["Failed: number too big in {} quantifier at offset 15"]]
-,
-testRegex "(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\\1B" [ERROR]
-    ["abcdefghijklAkB"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["No options"],
-     Just ["First char = 'a' (caseless)"],
-     Just ["Need char = 'B'"],
-     Just [" 0: abcdefghijklAkB"],
-     Just [" 1: k"]]
-,
-testRegex "(?P<n0>a)(?P<n1>b)(?P<n2>c)(?P<n3>d)(?P<n4>e)(?P<n5>f)(?P<n6>g)(?P<n7>h)(?P<n8>i)(?P<n9>j)(?P<n10>k)(?P<n11>l)A\\11B" [ERROR]
-    ["abcdefghijklAkB"]
-    [Just ["Capturing subpattern count = 12"],
-     Just ["Max back reference = 11"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'B'"],
-     Just [" 0: abcdefghijklAkB"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 3: c"],
-     Just [" 4: d"],
-     Just [" 5: e"],
-     Just [" 6: f"],
-     Just [" 7: g"],
-     Just [" 8: h"],
-     Just [" 9: i"],
-     Just ["10: j"],
-     Just ["11: k"],
-     Just ["12: l"]]
-,
-testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)A\\11B" [ERROR]
-    ["abcdefghijklAkB"]
-    [Just ["Capturing subpattern count = 12"],
-     Just ["Max back reference = 11"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'B'"],
-     Just [" 0: abcdefghijklAkB"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 3: c"],
-     Just [" 4: d"],
-     Just [" 5: e"],
-     Just [" 6: f"],
-     Just [" 7: g"],
-     Just [" 8: h"],
-     Just [" 9: i"],
-     Just ["10: j"],
-     Just ["11: k"],
-     Just ["12: l"]]
-,
-testRegex "(?P<name0>a)(?P<name1>a)(?P<name2>a)(?P<name3>a)(?P<name4>a)(?P<name5>a)(?P<name6>a)(?P<name7>a)(?P<name8>a)(?P<name9>a)(?P<name10>a)(?P<name11>a)(?P<name12>a)(?P<name13>a)(?P<name14>a)(?P<name15>a)(?P<name16>a)(?P<name17>a)(?P<name18>a)(?P<name19>a)(?P<name20>a)(?P<name21>a)(?P<name22>a)(?P<name23>a)(?P<name24>a)(?P<name25>a)(?P<name26>a)(?P<name27>a)(?P<name28>a)(?P<name29>a)(?P<name30>a)(?P<name31>a)(?P<name32>a)(?P<name33>a)(?P<name34>a)(?P<name35>a)(?P<name36>a)(?P<name37>a)(?P<name38>a)(?P<name39>a)(?P<name40>a)(?P<name41>a)(?P<name42>a)(?P<name43>a)(?P<name44>a)(?P<name45>a)(?P<name46>a)(?P<name47>a)(?P<name48>a)(?P<name49>a)(?P<name50>a)(?P<name51>a)(?P<name52>a)(?P<name53>a)(?P<name54>a)(?P<name55>a)(?P<name56>a)(?P<name57>a)(?P<name58>a)(?P<name59>a)(?P<name60>a)(?P<name61>a)(?P<name62>a)(?P<name63>a)(?P<name64>a)(?P<name65>a)(?P<name66>a)(?P<name67>a)(?P<name68>a)(?P<name69>a)(?P<name70>a)(?P<name71>a)(?P<name72>a)(?P<name73>a)(?P<name74>a)(?P<name75>a)(?P<name76>a)(?P<name77>a)(?P<name78>a)(?P<name79>a)(?P<name80>a)(?P<name81>a)(?P<name82>a)(?P<name83>a)(?P<name84>a)(?P<name85>a)(?P<name86>a)(?P<name87>a)(?P<name88>a)(?P<name89>a)(?P<name90>a)(?P<name91>a)(?P<name92>a)(?P<name93>a)(?P<name94>a)(?P<name95>a)(?P<name96>a)(?P<name97>a)(?P<name98>a)(?P<name99>a)(?P<name100>a)" [ERROR]
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Just ["Capturing subpattern count = 101"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'a'"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 5: a"],
-     Just [" 6: a"],
-     Just [" 7: a"],
-     Just [" 8: a"],
-     Just [" 9: a"],
-     Just ["10: a"],
-     Just ["11: a"],
-     Just ["12: a"],
-     Just ["13: a"],
-     Just ["14: a"]]
-,
-testRegex "(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)" [ERROR]
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Just ["Capturing subpattern count = 101"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'a'"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 5: a"],
-     Just [" 6: a"],
-     Just [" 7: a"],
-     Just [" 8: a"],
-     Just [" 9: a"],
-     Just ["10: a"],
-     Just ["11: a"],
-     Just ["12: a"],
-     Just ["13: a"],
-     Just ["14: a"]]
-,
-testRegex "[^()]*(?:\\((?R)\\)[^()]*)*" [ERROR]
-    ["(this(and)that",
-     "(this(and)that)",
-     "(this(and)that)stuff"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "],
-     Just [" 0: (this(and)that)"],
-     Just [" 0: (this(and)that)stuff"]]
-,
-testRegex "[^()]*(?:\\((?>(?R))\\)[^()]*)*" [ERROR]
-    ["(this(and)that",
-     "(this(and)that)"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "],
-     Just [" 0: (this(and)that)"]]
-,
-testRegex "[^()]*(?:\\((?R)\\))*[^()]*" [ERROR]
-    ["(this(and)that",
-     "(this(and)that)"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "],
-     Just [" 0: (this(and)that)"]]
-,
-testRegex "(?:\\((?R)\\))*[^()]*" [ERROR]
-    ["(this(and)that",
-     "(this(and)that)",
-     "((this))"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: ((this))"]]
-,
-testRegex "(?:\\((?R)\\))|[^()]*" [ERROR]
-    ["(this(and)that",
-     "(this(and)that)",
-     "(this)",
-     "((this))"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: (this)"],
-     Just [" 0: ((this))"]]
-,
-testRegex "a(b)c" [ERROR]
-    ["abc"]
-    [Just ["Matched with REG_NOSUB"]]
-,
-testRegex "a(?P<name>b)c" [ERROR]
-    ["abc"]
-    [Just ["Matched with REG_NOSUB"]]
-,
-testRegex "\\x{100}" [ERROR]
-    []
-    [Just ["Failed: character value in \\x{...} sequence is too large at offset 6"]]
-,
-testRegex "\\x{0000ff}" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 255"],
-     Just ["No need char"]]
-,
-testRegex "^((?P<A>a1)|(?P<A>a2)b)" [ERROR]
-    []
-    [Just ["Failed: two named subpatterns have the same name at offset 17"]]
-,
-testRegex "^((?P<A>a1)|(?P<A>a2)b)" [ERROR]
-    ["a1b\\CA",
-     "a2b\\CA",
-     "** Failers",
-     "a1b\\CZ\\CA"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a1"],
-     Just [" 1: a1"],
-     Just [" 2: a1"],
-     Just [" 0: a2b"],
-     Just [" 1: a2b"],
-     Just [" 2: <unset>"],
-     Just [" 3: a2"],
-     Nothing,
-     Just ["no parentheses with name \"Z\""],
-     Just [" 0: a1"],
-     Just [" 1: a1"],
-     Just [" 2: a1"],
-     Just ["copy substring Z failed -7"]]
-,
-testRegex "^(?P<A>a)(?P<A>b)" [ERROR]
-    ["ab\\CA"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 2: b"]]
-,
-testRegex "^(?P<A>a)(?P<A>b)|cd" [ERROR]
-    ["ab\\CA",
-     "cd\\CA"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 0: cd"],
-     Just ["copy substring A failed -7"]]
-,
-testRegex "^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)" [ERROR]
-    ["cdefgh\\CA"]
-    [Just ["Capturing subpattern count = 4"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: cdefgh"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: ef"],
-     Just [" 4: gh"]]
-,
-testRegex "^((?P<A>a1)|(?P<A>a2)b)" [ERROR]
-    ["a1b\\GA",
-     "a2b\\GA",
-     "** Failers",
-     "a1b\\GZ\\GA"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a1"],
-     Just [" 1: a1"],
-     Just [" 2: a1"],
-     Just [" 0: a2b"],
-     Just [" 1: a2b"],
-     Just [" 2: <unset>"],
-     Just [" 3: a2"],
-     Nothing,
-     Just ["no parentheses with name \"Z\""],
-     Just [" 0: a1"],
-     Just [" 1: a1"],
-     Just [" 2: a1"],
-     Just ["copy substring Z failed -7"]]
-,
-testRegex "^(?P<A>a)(?P<A>b)" [ERROR]
-    ["ab\\GA"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 2: b"]]
-,
-testRegex "^(?P<A>a)(?P<A>b)|cd" [ERROR]
-    ["ab\\GA",
-     "cd\\GA"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 0: cd"],
-     Just ["copy substring A failed -7"]]
-,
-testRegex "^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)" [ERROR]
-    ["cdefgh\\GA"]
-    [Just ["Capturing subpattern count = 4"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: dupnames"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: cdefgh"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: ef"],
-     Just [" 4: gh"]]
-,
-testRegex "(?J)^((?P<A>a1)|(?P<A>a2)b)" [ERROR]
-    ["a1b\\CA",
-     "a2b\\CA"]
-    [Just ["Capturing subpattern count = 3"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored dupnames"],
-     Just ["Duplicate name status changes"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a1"],
-     Just [" 1: a1"],
-     Just [" 2: a1"],
-     Just [" 0: a2b"],
-     Just [" 1: a2b"],
-     Just [" 2: <unset>"],
-     Just [" 3: a2"]]
-,
-testRegex "^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<A>d)" [ERROR]
-    []
-    [Just ["Failed: two named subpatterns have the same name at offset 37"]]
-,
-testRegex "ERROR" []
-    ["set in the pattern's options; consequently pcre_get_named_substring() produces",
-     "a random value. /Ix"]
-    [Just ["set in the pattern's options; consequently pcre_get_named_substring() produces"],
-     Just ["a random value. /Ix"],
-     Just ["Capturing subpattern count = 1"],
-     Just ["Options: extended"],
-     Just ["First char = 'I'"],
-     Just ["Need char = 'e'"]]
-,
-testRegex "^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)" [ERROR]
-    ["a bc d\\CA\\CB\\CC"]
-    [Just ["Capturing subpattern count = 4"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored"],
-     Just ["Duplicate name status changes"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: a bc d"],
-     Just [" 1: a"],
-     Just [" 2: b"],
-     Just [" 3: c"],
-     Just [" 4: d"]]
-,
-testRegex "^(?P<A>a)?(?(A)a|b)" [ERROR]
-    ["aabc",
-     "bc",
-     "** Failers",
-     "abc"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: b"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?:(?(ZZ)a|b)(?P<ZZ>X))+" [ERROR]
-    ["bXaX"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'X'"],
-     Just [" 0: bXaX"],
-     Just [" 1: X"]]
-,
-testRegex "(?:(?(2y)a|b)(X))+" [ERROR]
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 9"]]
-,
-testRegex "(?:(?(ZA)a|b)(?P<ZZ>X))+" [ERROR]
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 9"]]
-,
-testRegex "(?:(?(ZZ)a|b)(?(ZZ)a|b)(?P<ZZ>X))+" [ERROR]
-    ["bbXaaX"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'X'"],
-     Just [" 0: bbXaaX"],
-     Just [" 1: X"]]
-,
-testRegex "(?:(?(ZZ)a|\\(b\\))\\\\(?P<ZZ>X))+" [ERROR]
-    ["(b)\\\\Xa\\\\X"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'X'"],
-     Just [" 0: (b)\\Xa\\X"],
-     Just [" 1: X"]]
-,
-testRegex "(?P<ABC" [ERROR]
-    []
-    [Just ["Failed: syntax error in subpattern name (missing terminator) at offset 7"]]
-,
-testRegex "(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+" [ERROR]
-    ["bXXaYYaY",
-     "bXYaXXaX"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: bXXaYYaY"],
-     Just [" 1: Y"],
-     Just [" 0: bX"],
-     Just [" 1: X"]]
-,
-testRegex "()()()()()()()()()(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+" [ERROR]
-    ["bXXaYYaY"]
-    [Just ["Capturing subpattern count = 10"],
-     Just ["Max back reference = 10"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: bXXaYYaY"],
-     Just [" 1: "],
-     Just [" 2: "],
-     Just [" 3: "],
-     Just [" 4: "],
-     Just [" 5: "],
-     Just [" 6: "],
-     Just [" 7: "],
-     Just [" 8: "],
-     Just [" 9: "],
-     Just ["10: Y"]]
-,
-testRegex "\\777" [ERROR]
-    []
-    [Just ["Failed: octal value is greater than \\377 (not in UTF-8 mode) at offset 3"]]
-,
-testRegex "\\s*,\\s*" [ERROR]
-    ["\\x0b,\\x0b",
-     "\\x0c,\\x0d"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = ','"],
-     Just ["Starting byte set: \\x09 \\x0a \\x0c \\x0d \\x20 , "],
-     Just [" 0: ,"],
-     Just [" 0: \\x0c,\\x0d"]]
-,
-testRegex "^abc" [ERROR]
-    ["xyz\\nabc",
-     "xyz\\nabc\\<lf>",
-     "xyz\\r\\nabc\\<lf>",
-     "xyz\\rabc\\<cr>",
-     "xyz\\r\\nabc\\<crlf>",
-     "** Failers",
-     "xyz\\nabc\\<cr>",
-     "xyz\\r\\nabc\\<cr>",
-     "xyz\\nabc\\<crlf>",
-     "xyz\\rabc\\<crlf>",
-     "xyz\\rabc\\<lf>"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "abc$" [ERROR]
-    ["xyzabc",
-     "xyzabc\\n",
-     "xyzabc\\npqr",
-     "xyzabc\\r\\<cr>",
-     "xyzabc\\rpqr\\<cr>",
-     "xyzabc\\r\\n\\<crlf>",
-     "xyzabc\\r\\npqr\\<crlf>",
-     "** Failers",
-     "xyzabc\\r",
-     "xyzabc\\rpqr",
-     "xyzabc\\r\\n",
-     "xyzabc\\r\\npqr"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["Forced newline sequence: LF"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" [ERROR]
-    ["xyz\\rabcdef",
-     "xyz\\nabcdef\\<lf>",
-     "** Failers",
-     "xyz\\nabcdef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["Forced newline sequence: CR"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" [ERROR]
-    ["xyz\\nabcdef",
-     "xyz\\rabcdef\\<cr>",
-     "** Failers",
-     "xyz\\rabcdef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["Forced newline sequence: LF"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" [ERROR]
-    ["xyz\\r\\nabcdef",
-     "xyz\\rabcdef\\<cr>",
-     "** Failers",
-     "xyz\\rabcdef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: multiline"],
-     Just ["Forced newline sequence: CRLF"],
-     Just ["First char at start or follows newline"],
-     Just ["Need char = 'c'"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" [ERROR]
-    []
-    [Just ["Unknown newline type at: <bad>"]]
-,
-testRegex "abc" [ERROR]
-    ["xyz\\rabc\\<bad>",
-     "abc"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'c'"],
-     Just ["Unknown newline type at: <bad>"],
-     Just [" 0: abc"]]
-,
-testRegex ".*" [ERROR]
-    ["abc\\ndef",
-     "abc\\rdef",
-     "abc\\r\\ndef",
-     "\\<cr>abc\\ndef",
-     "\\<cr>abc\\rdef",
-     "\\<cr>abc\\r\\ndef",
-     "\\<crlf>abc\\ndef",
-     "\\<crlf>abc\\rdef",
-     "\\<crlf>abc\\r\\ndef"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options:"],
-     Just ["Forced newline sequence: LF"],
-     Just ["First char at start or follows newline"],
-     Just ["No need char"],
-     Just [" 0: abc"],
-     Just [" 0: abc\\x0ddef"],
-     Just [" 0: abc\\x0d"],
-     Just [" 0: abc\\x0adef"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc\\x0adef"],
-     Just [" 0: abc\\x0ddef"],
-     Just [" 0: abc"]]
-,
-testRegex "\\w+(.)(.)?def" [ERROR]
-    ["abc\\ndef",
-     "abc\\rdef",
-     "abc\\r\\ndef"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Partial matching not supported"],
-     Just ["Options: dotall"],
-     Just ["No first char"],
-     Just ["Need char = 'f'"],
-     Just [" 0: abc\\x0adef"],
-     Just [" 1: \\x0a"],
-     Just [" 0: abc\\x0ddef"],
-     Just [" 1: \\x0d"],
-     Just [" 0: abc\\x0d\\x0adef"],
-     Just [" 1: \\x0d"],
-     Just [" 2: \\x0a"]]
-,
-testRegex "ERROR" []
-    ["/* this is a C style comment */\\M"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Minimum match() limit = 120"],
-     Just ["Minimum match() recursion limit = 6"],
-     Just [" 0: /* this is a C style comment */"],
-     Just [" 1: /* this is a C style comment */"]]
-,
-testRegex "(?P<B>25[0-5]|2[0-4]\\d|[01]?\\d?\\d)(?:\\.(?P>B)){3}" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = '.'"]]
-,
-testRegex "ERROR" []
-    ["()()()()()()()()()()()()()()()()()()()()",
-     "()()()()()()()()()()()()()()()()()()()()",
-     "()()()()()()()()()()()()()()()()()()()()",
-     "()()()()()()()()()()()()()()()()()()()()",
-     "(.(.))/Ix",
-     "XY\\O400"]
-    [Just [" ()()()()()()()()()()()()()()()()()()()()"],
-     Just [" ()()()()()()()()()()()()()()()()()()()()"],
-     Just [" ()()()()()()()()()()()()()()()()()()()()"],
-     Just [" ()()()()()()()()()()()()()()()()()()()()"],
-     Just [" (.(.))/Ix"],
-     Just ["Capturing subpattern count = 102"],
-     Just ["Options: extended"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: XY"],
-     Just [" 1: "],
-     Just [" 2: "],
-     Just [" 3: "],
-     Just [" 4: "],
-     Just [" 5: "],
-     Just [" 6: "],
-     Just [" 7: "],
-     Just [" 8: "],
-     Just [" 9: "],
-     Just ["10: "],
-     Just ["11: "],
-     Just ["12: "],
-     Just ["13: "],
-     Just ["14: "],
-     Just ["15: "],
-     Just ["16: "],
-     Just ["17: "],
-     Just ["18: "],
-     Just ["19: "],
-     Just ["20: "],
-     Just ["21: "],
-     Just ["22: "],
-     Just ["23: "],
-     Just ["24: "],
-     Just ["25: "],
-     Just ["26: "],
-     Just ["27: "],
-     Just ["28: "],
-     Just ["29: "],
-     Just ["30: "],
-     Just ["31: "],
-     Just ["32: "],
-     Just ["33: "],
-     Just ["34: "],
-     Just ["35: "],
-     Just ["36: "],
-     Just ["37: "],
-     Just ["38: "],
-     Just ["39: "],
-     Just ["40: "],
-     Just ["41: "],
-     Just ["42: "],
-     Just ["43: "],
-     Just ["44: "],
-     Just ["45: "],
-     Just ["46: "],
-     Just ["47: "],
-     Just ["48: "],
-     Just ["49: "],
-     Just ["50: "],
-     Just ["51: "],
-     Just ["52: "],
-     Just ["53: "],
-     Just ["54: "],
-     Just ["55: "],
-     Just ["56: "],
-     Just ["57: "],
-     Just ["58: "],
-     Just ["59: "],
-     Just ["60: "],
-     Just ["61: "],
-     Just ["62: "],
-     Just ["63: "],
-     Just ["64: "],
-     Just ["65: "],
-     Just ["66: "],
-     Just ["67: "],
-     Just ["68: "],
-     Just ["69: "],
-     Just ["70: "],
-     Just ["71: "],
-     Just ["72: "],
-     Just ["73: "],
-     Just ["74: "],
-     Just ["75: "],
-     Just ["76: "],
-     Just ["77: "],
-     Just ["78: "],
-     Just ["79: "],
-     Just ["80: "],
-     Just ["81: "],
-     Just ["82: "],
-     Just ["83: "],
-     Just ["84: "],
-     Just ["85: "],
-     Just ["86: "],
-     Just ["87: "],
-     Just ["88: "],
-     Just ["89: "],
-     Just ["90: "],
-     Just ["91: "],
-     Just ["92: "],
-     Just ["93: "],
-     Just ["94: "],
-     Just ["95: "],
-     Just ["96: "],
-     Just ["97: "],
-     Just ["98: "],
-     Just ["99: "],
-     Just ["100: "],
-     Just ["101: XY"],
-     Just ["102: Y"]]
-,
-testRegex "(a*b|(?i:c*(?-i)d))" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: C a b c d "]]
-,
-testRegex "()[ab]xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "(|)[ab]xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "(|c)[ab]xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Starting byte set: a b c "]]
-,
-testRegex "(|c?)[ab]xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Starting byte set: a b c "]]
-,
-testRegex "(d?|c?)[ab]xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "(d?|c)[ab]xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'z'"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "^a*b\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "^a*+b\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "^a*?b\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'b'"]]
-,
-testRegex "^a+A\\d" [ERROR]
-    ["aaaA5",
-     "** Failers",
-     "aaaa5"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored"],
-     Just ["No first char"],
-     Just ["Need char = 'A'"],
-     Just [" 0: aaaA5"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a*A\\d" [ERROR]
-    ["aaaA5",
-     "aaaa5"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored caseless"],
-     Just ["No first char"],
-     Just ["Need char = 'A' (caseless)"],
-     Just [" 0: aaaA5"],
-     Just [" 0: aaaa5"]]
-,
-testRegex "(a*|b*)[cd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "(a+|b*)[cd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "(a*|b+)[cd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b c d "]]
-,
-testRegex "(a+|b+)[cd]" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: a b "]]
-,
-testRegex "ERROR" []
-    ["((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((",
-     "(((",
-     "a",
-     "))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
-     "))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
-     ")))",
-     "/Ix",
-     "large nest"]
-    [Just [" (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((("],
-     Just [" ((("],
-     Just [" a"],
-     Just [" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))"],
-     Just [" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))"],
-     Just [" )))"],
-     Just ["/Ix"],
-     Just ["Capturing subpattern count = 203"],
-     Just ["Options: extended"],
-     Just ["First char = 'a'"],
-     Just ["No need char"],
-     Just ["Matched, but too many substrings"],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 2: a"],
-     Just [" 3: a"],
-     Just [" 4: a"],
-     Just [" 5: a"],
-     Just [" 6: a"],
-     Just [" 7: a"],
-     Just [" 8: a"],
-     Just [" 9: a"],
-     Just ["10: a"],
-     Just ["11: a"],
-     Just ["12: a"],
-     Just ["13: a"],
-     Just ["14: a"]]
-,
-testRegex "a*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "0*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "0*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex " *\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex " *\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "=*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "=*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*2" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*2" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\D*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*2" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\s*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*2" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\S*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*2" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*2" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*\\D" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*\\s" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*\\S" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\W*\\W" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]+a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]+a" [caseless]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]+A" [caseless]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]+b" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^a]+\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "a*[^a]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(?P<abc>x)(?P<xyz>y)" [ERROR]
-    ["xy\\Cabc\\Cxyz"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["Need char = 'y'"],
-     Just [" 0: xy"],
-     Just [" 1: x"],
-     Just [" 2: y"]]
-,
-testRegex "(?<abc>x)(?'xyz'y)" [ERROR]
-    ["xy\\Cabc\\Cxyz"]
-    [Just ["Capturing subpattern count = 2"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["First char = 'x'"],
-     Just ["Need char = 'y'"],
-     Just [" 0: xy"],
-     Just [" 1: x"],
-     Just [" 2: y"]]
-,
-testRegex "(?<abc'x)(?'xyz'y)" [ERROR]
-    []
-    [Just ["Failed: syntax error in subpattern name (missing terminator) at offset 6"]]
-,
-testRegex "(?<abc>x)(?'xyz>y)" [ERROR]
-    []
-    [Just ["Failed: syntax error in subpattern name (missing terminator) at offset 15"]]
-,
-testRegex "(?P'abc'x)(?P<xyz>y)" [ERROR]
-    []
-    [Just ["Failed: unrecognized character after (?P at offset 3"]]
-,
-testRegex "^(?:(?(ZZ)a|b)(?<ZZ>X))+" []
-    ["bXaX",
-     "bXbX",
-     "** Failers",
-     "aXaX",
-     "aXbX"]
-    [Just [" 0: bXaX"],
-     Just [" 1: X"],
-     Just [" 0: bX"],
-     Just [" 1: X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(?P>abc)(?<abcd>xxx)" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 8"]]
-,
-testRegex "^(?P>abc)(?<abc>x|y)" []
-    ["xx",
-     "xy",
-     "yy",
-     "yx"]
-    [Just [" 0: xx"],
-     Just [" 1: x"],
-     Just [" 0: xy"],
-     Just [" 1: y"],
-     Just [" 0: yy"],
-     Just [" 1: y"],
-     Just [" 0: yx"],
-     Just [" 1: x"]]
-,
-testRegex "^(?P>abc)(?P<abc>x|y)" []
-    ["xx",
-     "xy",
-     "yy",
-     "yx"]
-    [Just [" 0: xx"],
-     Just [" 1: x"],
-     Just [" 0: xy"],
-     Just [" 1: y"],
-     Just [" 0: yy"],
-     Just [" 1: y"],
-     Just [" 0: yx"],
-     Just [" 1: x"]]
-,
-testRegex "^((?(abc)a|b)(?<abc>x|y))+" []
-    ["bxay",
-     "bxby",
-     "** Failers",
-     "axby"]
-    [Just [" 0: bxay"],
-     Just [" 1: ay"],
-     Just [" 2: y"],
-     Just [" 0: bx"],
-     Just [" 1: bx"],
-     Just [" 2: x"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(((?P=abc)|X)(?<abc>x|y))+" []
-    ["XxXxxx",
-     "XxXyyx",
-     "XxXyxx",
-     "** Failers",
-     "x"]
-    [Just [" 0: XxXxxx"],
-     Just [" 1: xx"],
-     Just [" 2: x"],
-     Just [" 3: x"],
-     Just [" 0: XxXyyx"],
-     Just [" 1: yx"],
-     Just [" 2: y"],
-     Just [" 3: x"],
-     Just [" 0: XxXy"],
-     Just [" 1: Xy"],
-     Just [" 2: X"],
-     Just [" 3: y"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(?1)(abc)" []
-    ["abcabc"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"]]
-,
-testRegex "^(?:(?:\\1|X)(a|b))+" []
-    ["Xaaa",
-     "Xaba"]
-    [Just [" 0: Xaaa"],
-     Just [" 1: a"],
-     Just [" 0: Xa"],
-     Just [" 1: a"]]
-,
-testRegex "^[\\E\\Qa\\E-\\Qz\\E]+" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^[a\\Q]bc\\E]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^[a-\\Q\\E]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^(?P>abc)[()](?<abc>)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^((?(abc)y)[()](?P<abc>x))+" [ERROR]
-    ["(xy)x"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: (xy)x"],
-     Just [" 1: y)x"],
-     Just [" 2: x"]]
-,
-testRegex "^(?P>abc)\\Q()\\E(?<abc>)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^(?P>abc)[a\\Q(]\\E(](?<abc>)" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "ERROR" []
-    ["(?<abc>)/BZx"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$" [caseless]
-    ["1221",
-     "Satan, oscillate my metallic sonatas!",
-     "A man, a plan, a canal: Panama!",
-     "Able was I ere I saw Elba.",
-     "*** Failers",
-     "The quick brown fox"]
-    [Just ["Capturing subpattern count = 4"],
-     Just ["Max back reference = 4"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Partial matching not supported"],
-     Just ["Options: anchored caseless"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 1221"],
-     Just [" 1: 1221"],
-     Just [" 2: 1"],
-     Just [" 0: Satan, oscillate my metallic sonatas!"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: Satan, oscillate my metallic sonatas"],
-     Just [" 4: S"],
-     Just [" 0: A man, a plan, a canal: Panama!"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: A man, a plan, a canal: Panama"],
-     Just [" 4: A"],
-     Just [" 0: Able was I ere I saw Elba."],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"],
-     Just [" 3: Able was I ere I saw Elba"],
-     Just [" 4: A"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?=(\\w+))\\1:" [ERROR]
-    ["abcd:"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = ':'"],
-     Just [" 0: abcd:"],
-     Just [" 1: abcd"]]
-,
-testRegex "(?=(?'abc'\\w+))\\k<abc>:" [ERROR]
-    ["abcd:"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Max back reference = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["Partial matching not supported"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = ':'"],
-     Just [" 0: abcd:"],
-     Just [" 1: abcd"]]
-,
-testRegex "(?'abc'\\w+):\\k<abc>{2}" []
-    ["a:aaxyz",
-     "ab:ababxyz",
-     "** Failers",
-     "a:axyz",
-     "ab:abxyz"]
-    [Just [" 0: a:aa"],
-     Just [" 1: a"],
-     Just [" 0: ab:abab"],
-     Just [" 1: ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?'abc'a|b)(?<abc>d|e)\\k<abc>{2}" [ERROR]
-    ["adaa",
-     "** Failers",
-     "addd",
-     "adbb"]
-    [Just [" 0: adaa"],
-     Just [" 1: a"],
-     Just [" 2: d"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?'abc'a|b)(?<abc>d|e)(?&abc){2}" [ERROR]
-    ["bdaa",
-     "bdab",
-     "** Failers",
-     "bddd"]
-    [Just [" 0: bdaa"],
-     Just [" 1: b"],
-     Just [" 2: d"],
-     Just [" 0: bdab"],
-     Just [" 1: b"],
-     Just [" 2: d"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)" [ERROR]
-    ["abd",
-     "ce"]
-    [Just [" 0: abd"],
-     Just [" 1: a"],
-     Just [" 0: ce"]]
-,
-testRegex "(?(<bc))" []
-    []
-    [Just ["Failed: malformed number or name after (?( at offset 6"]]
-,
-testRegex "(?(''))" []
-    []
-    [Just ["Failed: assertion expected after (?( at offset 4"]]
-,
-testRegex "(?('R')stuff)" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 7"]]
-,
-testRegex "((abc (?(R) (?(R1)1) (?(R2)2) X  |  (?1)  (?2)   (?R) ))) " [ERROR]
-    ["abcabc1Xabc2XabcXabcabc"]
-    [Just [" 0: abcabc1Xabc2XabcX"],
-     Just [" 1: abcabc1Xabc2XabcX"],
-     Just [" 2: abcabc1Xabc2XabcX"]]
-,
-testRegex "(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) " [ERROR]
-    ["abcabc1Xabc2XabcXabcabc"]
-    [Just [" 0: abcabc1Xabc2XabcX"],
-     Just [" 1: abcabc1Xabc2XabcX"],
-     Just [" 2: abcabc1Xabc2XabcX"]]
-,
-testRegex "(?<A> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) " [ERROR]
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 29"]]
-,
-testRegex "(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) " [ERROR]
-    ["abcabc1Xabc2XabcXabcabc"]
-    [Just [" 0: abcabc1Xabc2XabcX"],
-     Just [" 1: abcabc1Xabc2XabcX"],
-     Just [" 2: abcabc1Xabc2XabcX"]]
-,
-testRegex "^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) " [ERROR]
-    ["abcd"]
-    [Just [" 0: ab"],
-     Just [" 1: <unset>"],
-     Just [" 2: <unset>"]]
-,
-testRegex "ERROR" []
-    ["(?(DEFINE)",
-     "(?<NAME_PAT>[a-z]+)",
-     "(?<ADDRESS_PAT>\\d+)",
-     ")/x",
-     "metcalfe 33"]
-    [Just [" 0: metcalfe 33"],
-     Just [" 1: metcalfe"],
-     Just [" 2: 33"],
-     Just [" 3: <unset>"],
-     Just [" 4: <unset>"]]
-,
-testRegex "^(?(DEFINE) abc | xyz ) " [ERROR]
-    []
-    [Just ["Failed: DEFINE group contains more than one branch at offset 22"]]
-,
-testRegex "(?(DEFINE) abc) xyz" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: extended"],
-     Just ["First char = 'x'"],
-     Just ["Need char = 'z'"]]
-,
-testRegex "(?(DEFINE) abc){3} xyz" [ERROR]
-    []
-    [Just ["Failed: repeating a DEFINE group is not allowed at offset 17"]]
-,
-testRegex "(a|)*\\d" []
-    ["\\O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "\\O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-    [Nothing,
-     Just ["Matched, but too many substrings"]]
-,
-testRegex "^a.b" [ERROR]
-    ["a\\rb",
-     "a\\nb\\<cr>",
-     "a\\x85b\\<anycrlf> ",
-     "** Failers",
-     "a\\nb",
-     "a\\nb\\<any>",
-     "a\\rb\\<cr>",
-     "a\\rb\\<any>",
-     "a\\x85b\\<any> ",
-     "a\\rb\\<anycrlf>"]
-    [Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x85b"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abc." [ERROR]
-    ["abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc6"],
-     Just [" 0: abc7"]]
-,
-testRegex "abc.$" [ERROR]
-    ["abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc7\\x{2028} abc8\\x{2029} abc9"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc6"],
-     Just [" 0: abc9"]]
-,
-testRegex "a" [ERROR]
-    []
-    []
-,
-testRegex "a" [ERROR]
-    []
-    [Just ["Failed: inconsistent NEWLINE options at offset 0"]]
-,
-testRegex "^a\\Rb" [ERROR]
-    ["a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x85b",
-     "** Failers",
-     "a\\n\\rb"]
-    [Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x0bb"],
-     Just [" 0: a\\x0cb"],
-     Just [" 0: a\\x85b"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a\\R*b" [ERROR]
-    ["ab",
-     "a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x85b",
-     "a\\n\\rb",
-     "a\\n\\r\\x85\\x0cb"]
-    [Just [" 0: ab"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x0bb"],
-     Just [" 0: a\\x0cb"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0d\\x85\\x0cb"]]
-,
-testRegex "^a\\R+b" [ERROR]
-    ["a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x85b",
-     "a\\n\\rb",
-     "a\\n\\r\\x85\\x0cb",
-     "** Failers",
-     "ab"]
-    [Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x0bb"],
-     Just [" 0: a\\x0cb"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0d\\x85\\x0cb"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a\\R{1,3}b" [ERROR]
-    ["a\\nb",
-     "a\\n\\rb",
-     "a\\n\\r\\x85b",
-     "a\\r\\n\\r\\nb",
-     "a\\r\\n\\r\\n\\r\\nb",
-     "a\\n\\r\\n\\rb",
-     "a\\n\\n\\r\\nb",
-     "** Failers",
-     "a\\n\\n\\n\\rb",
-     "a\\r"]
-    [Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0d\\x85b"],
-     Just [" 0: a\\x0d\\x0a\\x0d\\x0ab"],
-     Just [" 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab"],
-     Just [" 0: a\\x0a\\x0d\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^a[\\R]b" [ERROR]
-    ["aRb",
-     "** Failers",
-     "a\\nb"]
-    [Just [" 0: aRb"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?&abc)X(?<abc>P)" [ERROR]
-    ["abcPXP123"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'P'"],
-     Just [" 0: PXP"],
-     Just [" 1: P"]]
-,
-testRegex "(?1)X(?<abc>P)" [ERROR]
-    ["abcPXP123"]
-    [Just ["Capturing subpattern count = 1"],
-     Just ["Named capturing subpatterns:"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["Need char = 'P'"],
-     Just [" 0: PXP"],
-     Just [" 1: P"]]
-,
-testRegex "(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))\\b(?&byte)(\\.(?&byte)){3}" []
-    ["1.2.3.4",
-     "131.111.10.206",
-     "10.0.0.0",
-     "** Failers",
-     "10.6",
-     "455.3.4.5"]
-    [Just [" 0: 1.2.3.4"],
-     Just [" 1: <unset>"],
-     Just [" 2: .4"],
-     Just [" 0: 131.111.10.206"],
-     Just [" 1: <unset>"],
-     Just [" 2: .206"],
-     Just [" 0: 10.0.0.0"],
-     Just [" 1: <unset>"],
-     Just [" 2: .0"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\b(?&byte)(\\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\\d|25[0-5]|1\\d\\d|[1-9]?\\d))" []
-    ["1.2.3.4",
-     "131.111.10.206",
-     "10.0.0.0",
-     "** Failers",
-     "10.6",
-     "455.3.4.5"]
-    [Just [" 0: 1.2.3.4"],
-     Just [" 1: .4"],
-     Just [" 2: <unset>"],
-     Just [" 0: 131.111.10.206"],
-     Just [" 1: .206"],
-     Just [" 2: <unset>"],
-     Just [" 0: 10.0.0.0"],
-     Just [" 1: .0"],
-     Just [" 2: <unset>"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?:a(?&abc)b)*(?<abc>x)" []
-    ["123axbaxbaxbx456",
-     "123axbaxbaxb456"]
-    [Just [" 0: axbaxbaxbx"],
-     Just [" 1: x"],
-     Just [" 0: x"],
-     Just [" 1: x"]]
-,
-testRegex "(?:a(?&abc)b){1,5}(?<abc>x)" []
-    ["123axbaxbaxbx456"]
-    [Just [" 0: axbaxbaxbx"],
-     Just [" 1: x"]]
-,
-testRegex "(?:a(?&abc)b){2,5}(?<abc>x)" []
-    ["123axbaxbaxbx456"]
-    [Just [" 0: axbaxbaxbx"],
-     Just [" 1: x"]]
-,
-testRegex "(?:a(?&abc)b){2,}(?<abc>x)" []
-    ["123axbaxbaxbx456"]
-    [Just [" 0: axbaxbaxbx"],
-     Just [" 1: x"]]
-,
-testRegex "(abc)(?i:(?1))" []
-    ["defabcabcxyz",
-     "DEFabcABCXYZ"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"],
-     Nothing]
-,
-testRegex "(abc)(?:(?i)(?1))" []
-    ["defabcabcxyz",
-     "DEFabcABCXYZ"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"],
-     Nothing]
-,
-testRegex "^(a(b))\\1\\g1\\g{1}\\g-1\\g{-1}\\g{-02}Z" []
-    ["ababababbbabZXXXX"]
-    [Just [" 0: ababababbbabZ"],
-     Just [" 1: ab"],
-     Just [" 2: b"]]
-,
-testRegex "^(a)\\g-2" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 7"]]
-,
-testRegex "^(a)\\g" []
-    []
-    [Just ["Failed: \\g is not followed by a braced name or an optionally braced non-zero number at offset 5"]]
-,
-testRegex "^(a)\\g{0}" []
-    []
-    [Just ["Failed: \\g is not followed by a braced name or an optionally braced non-zero number at offset 7"]]
-,
-testRegex "^(a)\\g{3" []
-    []
-    [Just ["Failed: \\g is not followed by a braced name or an optionally braced non-zero number at offset 8"]]
-,
-testRegex "^(a)\\g{4a}" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 9"]]
-,
-testRegex "^a.b" [ERROR]
-    ["a\\rb",
-     "*** Failers",
-     "a\\nb"]
-    [Just [" 0: a\\x0db"],
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" []
-    ["afoo",
-     "** Failers",
-     "\\r\\nfoo",
-     "\\nfoo"]
-    [Just [" 0: afoo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" [ERROR]
-    ["afoo",
-     "\\nfoo",
-     "** Failers",
-     "\\r\\nfoo"]
-    [Just [" 0: afoo"],
-     Just [" 0: \\x0afoo"],
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" [ERROR]
-    ["afoo",
-     "** Failers",
-     "\\nfoo",
-     "\\r\\nfoo"]
-    [Just [" 0: afoo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" [ERROR]
-    ["afoo",
-     "\\r\\nfoo",
-     "\\nfoo",
-     "",
-     "/^$/mg<any>",
-     "abc\\r\\rxyz",
-     "abc\\n\\rxyz  ",
-     "** Failers ",
-     "abc\\r\\nxyz"]
-    [Just [" 0: afoo"],
-     Just [" 0: \\x0d\\x0afoo"],
-     Just [" 0: \\x0afoo"],
-     Just ["/^$/mg<any>"],
-     Just [" 0: "],
-     Just [" 0: "],
-     Nothing,
-     Nothing]
-,
-testRegex "(?m)^$" [ERROR]
-    ["abc\\r\\n\\r\\n"]
-    [Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a"]]
-,
-testRegex "(?m)^$|^\\r\\n" [ERROR]
-    ["abc\\r\\n\\r\\n",
-     "",
-     "/(?m)$/<any>g+ ",
-     "abc\\r\\n\\r\\n"]
-    [Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a"],
-     Just [" 0: \\x0d\\x0a"],
-     Just [" 0+ "],
-     Just ["/(?m)$/<any>g+ "],
-     Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a\\x0d\\x0a"],
-     Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a"],
-     Just [" 0: "],
-     Just [" 0+ "]]
-,
-testRegex "abc.$" [ERROR]
-    ["abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc7\\x{2028} abc8\\x{2029} abc9"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc9"]]
-,
-testRegex "^X" [ERROR]
-    ["XABC",
-     "** Failers ",
-     "XABC\\B"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "(ab|c)(?-1)" [ERROR]
-    ["abc"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: abc"],
-     Just [" 1: ab"]]
-,
-testRegex "xy(?+1)(abc)" [ERROR]
-    ["xyabcabc",
-     "** Failers",
-     "xyabc  ",
-     "",
-     "/x(?-0)y/"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: xyabcabc"],
-     Just [" 1: abc"],
-     Nothing,
-     Nothing,
-     Just ["/x(?-0)y/"],
-     Just ["Failed: (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number at offset 5"]]
-,
-testRegex "x(?-1)y" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 5"]]
-,
-testRegex "x(?+0)y" [ERROR]
-    []
-    [Just ["Failed: (?+ or (?- or (?(+ or (?(- must be followed by a non-zero number at offset 5"]]
-,
-testRegex "x(?+1)y" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 5"]]
-,
-testRegex "^(abc)?(?(-1)X|Y)" [ERROR]
-    ["abcX",
-     "Y",
-     "** Failers",
-     "abcY   ",
-     "",
-     "/^((?(+1)X|Y)(abc))+/BZ ",
-     "YabcXabc",
-     "YabcXabcXabc",
-     "** Failers",
-     "XabcXabc  "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: abcX"],
-     Just [" 1: abc"],
-     Just [" 0: Y"],
-     Nothing,
-     Nothing,
-     Just ["/^((?(+1)X|Y)(abc))+/BZ "],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: YabcXabc"],
-     Just [" 1: Xabc"],
-     Just [" 2: abc"],
-     Just [" 0: YabcXabcXabc"],
-     Just [" 1: Xabc"],
-     Just [" 2: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?(-1)a)" [ERROR]
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 6"]]
-,
-testRegex "((?(-1)a))" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "((?(-2)a))" [ERROR]
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 7"]]
-,
-testRegex "^(?(+1)X|Y)" [ERROR]
-    ["Y"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: Y"]]
-,
-testRegex "(foo)\\Kbar" []
-    ["foobar",
-     "",
-     "/(foo)(\\Kbar|baz)/",
-     "foobar",
-     "foobaz "]
-    [Just [" 0: bar"],
-     Just [" 1: foo"],
-     Just ["/(foo)(\\Kbar|baz)/"],
-     Just [" 0: bar"],
-     Just [" 1: foo"],
-     Just [" 2: bar"],
-     Just [" 0: foobaz"],
-     Just [" 1: foo"],
-     Just [" 2: baz"]]
-,
-testRegex "(foo\\Kbar)baz" []
-    ["foobarbaz"]
-    [Just [" 0: barbaz"],
-     Just [" 1: foobar"]]
-,
-testRegex "(?<A>tom|bon)-\\k{A}" []
-    ["tom-tom",
-     "bon-bon ",
-     "** Failers",
-     "tom-bon  "]
-    [Just [" 0: tom-tom"],
-     Just [" 1: tom"],
-     Just [" 0: bon-bon"],
-     Just [" 1: bon"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<A>tom|bon)-\\g{A}" []
-    ["tom-tom",
-     "bon-bon ",
-     "",
-     "/\\g{A/ "]
-    [Just [" 0: tom-tom"],
-     Just [" 1: tom"],
-     Just [" 0: bon-bon"],
-     Just [" 1: bon"],
-     Just ["/\\g{A/ "],
-     Just ["Failed: syntax error in subpattern name (missing terminator) at offset 4"]]
-,
-testRegex "(?|(abc)|(xyz))" [ERROR]
-    [">abc<",
-     ">xyz< "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: abc"],
-     Just [" 1: abc"],
-     Just [" 0: xyz"],
-     Just [" 1: xyz"]]
-,
-testRegex "(x)(?|(abc)|(xyz))(x)" [ERROR]
-    ["xabcx",
-     "xxyzx "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: xabcx"],
-     Just [" 1: x"],
-     Just [" 2: abc"],
-     Just [" 3: x"],
-     Just [" 0: xxyzx"],
-     Just [" 1: x"],
-     Just [" 2: xyz"],
-     Just [" 3: x"]]
-,
-testRegex "(x)(?|(abc)(pqr)|(xyz))(x)" [ERROR]
-    ["xabcpqrx",
-     "xxyzx "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: xabcpqrx"],
-     Just [" 1: x"],
-     Just [" 2: abc"],
-     Just [" 3: pqr"],
-     Just [" 4: x"],
-     Just [" 0: xxyzx"],
-     Just [" 1: x"],
-     Just [" 2: xyz"],
-     Just [" 3: <unset>"],
-     Just [" 4: x"]]
-,
-testRegex "(?|(abc)|(xyz))\\1" []
-    ["abcabc",
-     "xyzxyz ",
-     "** Failers",
-     "abcxyz",
-     "xyzabc   ",
-     "",
-     "/(?|(abc)|(xyz))(?1)/",
-     "abcabc",
-     "xyzabc ",
-     "** Failers ",
-     "xyzxyz ",
-     "",
-     "/\\H\\h\\V\\v/",
-     "X X\\x0a",
-     "X\\x09X\\x0b",
-     "** Failers",
-     "\\xa0 X\\x0a   ",
-     "",
-     "/\\H*\\h+\\V?\\v{3,4}/ ",
-     "\\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a",
-     "\\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a",
-     "\\x09\\x20\\xa0\\x0a\\x0b\\x0c",
-     "** Failers ",
-     "\\x09\\x20\\xa0\\x0a\\x0b",
-     "",
-     "/\\H{3,4}/",
-     "XY  ABCDE",
-     "XY  PQR ST ",
-     "",
-     "/.\\h{3,4}./",
-     "XY  AB    PQRS"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"],
-     Just [" 0: xyzxyz"],
-     Just [" 1: xyz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?|(abc)|(xyz))(?1)/"],
-     Just [" 0: abcabc"],
-     Just [" 1: abc"],
-     Just [" 0: xyzabc"],
-     Just [" 1: xyz"],
-     Nothing,
-     Nothing,
-     Just ["/\\H\\h\\V\\v/"],
-     Just [" 0: X X\\x0a"],
-     Just [" 0: X\\x09X\\x0b"],
-     Nothing,
-     Nothing,
-     Just ["/\\H*\\h+\\V?\\v{3,4}/ "],
-     Just [" 0: \\x09 \\xa0X\\x0a\\x0b\\x0c\\x0d"],
-     Just [" 0: \\x09 \\xa0\\x0a\\x0b\\x0c\\x0d"],
-     Just [" 0: \\x09 \\xa0\\x0a\\x0b\\x0c"],
-     Nothing,
-     Nothing,
-     Just ["/\\H{3,4}/"],
-     Just [" 0: ABCD"],
-     Just [" 0: PQR"],
-     Just ["/.\\h{3,4}./"],
-     Just [" 0: B    P"]]
-,
-testRegex "\\h*X\\h?\\H+Y\\H?Z" []
-    [">XNNNYZ",
-     ">  X NYQZ",
-     "** Failers",
-     ">XYZ   ",
-     ">  X NY Z"]
-    [Just [" 0: XNNNYZ"],
-     Just [" 0:   X NYQZ"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c" []
-    [">XY\\x0aZ\\x0aA\\x0bNN\\x0c",
-     ">\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c"]
-    [Just [" 0: XY\\x0aZ\\x0aA\\x0bNN\\x0c"],
-     Just [" 0: \\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c"]]
-,
-testRegex "[\\h]" [ERROR]
-    [">\\x09<"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: \\x09"]]
-,
-testRegex "[\\h]+" [ERROR]
-    [">\\x09\\x20\\xa0<"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: \\x09 \\xa0"]]
-,
-testRegex "[\\v]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\H]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[^\\h]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\V]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\x0a\\V]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\H++X" [ERROR]
-    ["** Failers",
-     "XXXX",
-     "",
-     "/\\H+\\hY/BZ",
-     "XXXX Y "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Nothing,
-     Nothing,
-     Just ["/\\H+\\hY/BZ"],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just [" 0: XXXX Y"]]
-,
-testRegex "\\H+ Y" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\h+A" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\v*B" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\V+\\x0a" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "A+\\h" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex " *\\H" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "A*\\v" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\x0b*\\V" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d+\\h" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\d*\\v" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "S+\\h\\S+\\v" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\w{3,}\\h\\w+\\v" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\h+\\d\\h+\\w\\h+\\S\\h+\\H" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\v+\\d\\v+\\w\\v+\\S\\v+\\V" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\H+\\h\\H+\\d" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\V+\\v\\V+\\w" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "\\( (?: [^()]* | (?R) )* \\)" [ERROR]
-    ["(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)"]
-    [Just ["(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)"],
-     Just [" 0: (0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)"]]
-,
-testRegex "[\\E]AAA" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 7"]]
-,
-testRegex "[\\Q\\E]AAA" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 9"]]
-,
-testRegex "[^\\E]AAA" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 8"]]
-,
-testRegex "[^\\Q\\E]AAA" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 10"]]
-,
-testRegex "[\\E^]AAA" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 8"]]
-,
-testRegex "[\\Q\\E^]AAA" []
-    []
-    [Just ["Failed: missing terminating ] for character class at offset 10"]]
-,
-testRegex "A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "^a+(*FAIL)" []
-    ["aaaaaa",
-     "",
-     "/a+b?c+(*FAIL)/",
-     "aaabccc"]
-    [Nothing,
-     Just ["/a+b?c+(*FAIL)/"],
-     Nothing]
-,
-testRegex "a+b?(*PRUNE)c+(*FAIL)" []
-    ["aaabccc"]
-    [Nothing]
-,
-testRegex "a+b?(*COMMIT)c+(*FAIL)" []
-    ["aaabccc",
-     "",
-     "/a+b?(*SKIP)c+(*FAIL)/",
-     "aaabcccaaabccc"]
-    [Nothing,
-     Just ["/a+b?(*SKIP)c+(*FAIL)/"],
-     Nothing]
-,
-testRegex "^(?:aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})" []
-    ["aaaxxxxxx",
-     "aaa++++++ ",
-     "bbbxxxxx",
-     "bbb+++++ ",
-     "cccxxxx",
-     "ccc++++ ",
-     "dddddddd   "]
-    [Just [" 0: aaaxxxxxx"],
-     Just [" 0: aaa"],
-     Just [" 0: bbbxxxxx"],
-     Just [" 0: bbb"],
-     Just [" 0: cccxxxx"],
-     Just [" 0: ccc"],
-     Just [" 0: ddd"]]
-,
-testRegex "^(aaa(*THEN)\\w{6}|bbb(*THEN)\\w{5}|ccc(*THEN)\\w{4}|\\w{3})" []
-    ["aaaxxxxxx",
-     "aaa++++++ ",
-     "bbbxxxxx",
-     "bbb+++++ ",
-     "cccxxxx",
-     "ccc++++ ",
-     "dddddddd   "]
-    [Just [" 0: aaaxxxxxx"],
-     Just [" 1: aaaxxxxxx"],
-     Just [" 0: aaa"],
-     Just [" 1: aaa"],
-     Just [" 0: bbbxxxxx"],
-     Just [" 1: bbbxxxxx"],
-     Just [" 0: bbb"],
-     Just [" 1: bbb"],
-     Just [" 0: cccxxxx"],
-     Just [" 1: cccxxxx"],
-     Just [" 0: ccc"],
-     Just [" 1: ccc"],
-     Just [" 0: ddd"],
-     Just [" 1: ddd"]]
-,
-testRegex "a+b?(*THEN)c+(*FAIL)" []
-    ["aaabccc"]
-    [Nothing]
-,
-testRegex "(A (A|B(*ACCEPT)|C) D)(E)" [ERROR]
-    ["ABX",
-     "AADE",
-     "ACDE",
-     "** Failers",
-     "AD ",
-     "",
-     "/^a+(*FAIL)/C",
-     "aaaaaa",
-     "",
-     "/a+b?c+(*FAIL)/C",
-     "aaabccc"]
-    [Just [" 0: AB"],
-     Just [" 0: AADE"],
-     Just [" 1: AAD"],
-     Just [" 2: A"],
-     Just [" 3: E"],
-     Just [" 0: ACDE"],
-     Just [" 1: ACD"],
-     Just [" 2: C"],
-     Just [" 3: E"],
-     Nothing,
-     Nothing,
-     Just ["/^a+(*FAIL)/C"],
-     Just ["--->aaaaaa"],
-     Just [" +0 ^          ^"],
-     Just [" +1 ^          a+"],
-     Just [" +3 ^     ^    (*FAIL)"],
-     Just [" +3 ^    ^     (*FAIL)"],
-     Just [" +3 ^   ^      (*FAIL)"],
-     Just [" +3 ^  ^       (*FAIL)"],
-     Just [" +3 ^ ^        (*FAIL)"],
-     Just [" +3 ^^         (*FAIL)"],
-     Nothing,
-     Just ["/a+b?c+(*FAIL)/C"],
-     Just ["--->aaabccc"],
-     Just [" +0 ^           a+"],
-     Just [" +2 ^  ^        b?"],
-     Just [" +4 ^   ^       c+"],
-     Just [" +6 ^      ^    (*FAIL)"],
-     Just [" +6 ^     ^     (*FAIL)"],
-     Just [" +6 ^    ^      (*FAIL)"],
-     Just [" +4 ^  ^        c+"],
-     Just [" +2 ^ ^         b?"],
-     Just [" +4 ^ ^         c+"],
-     Just [" +2 ^^          b?"],
-     Just [" +4 ^^          c+"],
-     Just [" +0  ^          a+"],
-     Just [" +2  ^ ^        b?"],
-     Just [" +4  ^  ^       c+"],
-     Just [" +6  ^     ^    (*FAIL)"],
-     Just [" +6  ^    ^     (*FAIL)"],
-     Just [" +6  ^   ^      (*FAIL)"],
-     Just [" +4  ^ ^        c+"],
-     Just [" +2  ^^         b?"],
-     Just [" +4  ^^         c+"],
-     Just [" +0   ^         a+"],
-     Just [" +2   ^^        b?"],
-     Just [" +4   ^ ^       c+"],
-     Just [" +6   ^    ^    (*FAIL)"],
-     Just [" +6   ^   ^     (*FAIL)"],
-     Just [" +6   ^  ^      (*FAIL)"],
-     Just [" +4   ^^        c+"],
-     Nothing]
-,
-testRegex "a+b?(*PRUNE)c+(*FAIL)" [ERROR]
-    ["aaabccc"]
-    [Just ["--->aaabccc"],
-     Just [" +0 ^           a+"],
-     Just [" +2 ^  ^        b?"],
-     Just [" +4 ^   ^       (*PRUNE)"],
-     Just ["+12 ^   ^       c+"],
-     Just ["+14 ^      ^    (*FAIL)"],
-     Just ["+14 ^     ^     (*FAIL)"],
-     Just ["+14 ^    ^      (*FAIL)"],
-     Just [" +0  ^          a+"],
-     Just [" +2  ^ ^        b?"],
-     Just [" +4  ^  ^       (*PRUNE)"],
-     Just ["+12  ^  ^       c+"],
-     Just ["+14  ^     ^    (*FAIL)"],
-     Just ["+14  ^    ^     (*FAIL)"],
-     Just ["+14  ^   ^      (*FAIL)"],
-     Just [" +0   ^         a+"],
-     Just [" +2   ^^        b?"],
-     Just [" +4   ^ ^       (*PRUNE)"],
-     Just ["+12   ^ ^       c+"],
-     Just ["+14   ^    ^    (*FAIL)"],
-     Just ["+14   ^   ^     (*FAIL)"],
-     Just ["+14   ^  ^      (*FAIL)"],
-     Nothing]
-,
-testRegex "a+b?(*COMMIT)c+(*FAIL)" [ERROR]
-    ["aaabccc",
-     "",
-     "/a+b?(*SKIP)c+(*FAIL)/C",
-     "aaabcccaaabccc"]
-    [Just ["--->aaabccc"],
-     Just [" +0 ^           a+"],
-     Just [" +2 ^  ^        b?"],
-     Just [" +4 ^   ^       (*COMMIT)"],
-     Just ["+13 ^   ^       c+"],
-     Just ["+15 ^      ^    (*FAIL)"],
-     Just ["+15 ^     ^     (*FAIL)"],
-     Just ["+15 ^    ^      (*FAIL)"],
-     Nothing,
-     Just ["/a+b?(*SKIP)c+(*FAIL)/C"],
-     Just ["--->aaabcccaaabccc"],
-     Just [" +0 ^                  a+"],
-     Just [" +2 ^  ^               b?"],
-     Just [" +4 ^   ^              (*SKIP)"],
-     Just ["+11 ^   ^              c+"],
-     Just ["+13 ^      ^           (*FAIL)"],
-     Just ["+13 ^     ^            (*FAIL)"],
-     Just ["+13 ^    ^             (*FAIL)"],
-     Just [" +0        ^           a+"],
-     Just [" +2        ^  ^        b?"],
-     Just [" +4        ^   ^       (*SKIP)"],
-     Just ["+11        ^   ^       c+"],
-     Just ["+13        ^      ^    (*FAIL)"],
-     Just ["+13        ^     ^     (*FAIL)"],
-     Just ["+13        ^    ^      (*FAIL)"],
-     Nothing]
-,
-testRegex "a+b?(*THEN)c+(*FAIL)" [ERROR]
-    ["aaabccc",
-     "",
-     "/a(*PRUNE:XXX)b/"]
-    [Just ["--->aaabccc"],
-     Just [" +0 ^           a+"],
-     Just [" +2 ^  ^        b?"],
-     Just [" +4 ^   ^       (*THEN)"],
-     Just ["+11 ^   ^       c+"],
-     Just ["+13 ^      ^    (*FAIL)"],
-     Just ["+13 ^     ^     (*FAIL)"],
-     Just ["+13 ^    ^      (*FAIL)"],
-     Just [" +0  ^          a+"],
-     Just [" +2  ^ ^        b?"],
-     Just [" +4  ^  ^       (*THEN)"],
-     Just ["+11  ^  ^       c+"],
-     Just ["+13  ^     ^    (*FAIL)"],
-     Just ["+13  ^    ^     (*FAIL)"],
-     Just ["+13  ^   ^      (*FAIL)"],
-     Just [" +0   ^         a+"],
-     Just [" +2   ^^        b?"],
-     Just [" +4   ^ ^       (*THEN)"],
-     Just ["+11   ^ ^       c+"],
-     Just ["+13   ^    ^    (*FAIL)"],
-     Just ["+13   ^   ^     (*FAIL)"],
-     Just ["+13   ^  ^      (*FAIL)"],
-     Nothing,
-     Just ["/a(*PRUNE:XXX)b/"],
-     Just ["Failed: (*VERB) with an argument is not supported at offset 8"]]
-,
-testRegex "a(*MARK)b" [ERROR]
-    []
-    [Just ["Failed: (*VERB) not recognized at offset 7"]]
-,
-testRegex "(?i:A{1,}\\6666666666)" []
-    []
-    [Just ["Failed: number is too big at offset 19"]]
-,
-testRegex "\\g6666666666" []
-    []
-    [Just ["Failed: number is too big at offset 11"]]
-,
-testRegex "[\\g6666666666]" []
-    []
-    [Just ["Failed: number is too big at offset 12"]]
-,
-testRegex "(?1)\\c[" []
-    []
-    [Just ["Failed: reference to non-existent subpattern at offset 3"]]
-,
-testRegex ".+A" [ERROR]
-    ["\\r\\nA",
-     "",
-     "/\\nA/<crlf>",
-     "\\r\\nA "]
-    [Nothing,
-     Just ["/\\nA/<crlf>"],
-     Just [" 0: \\x0aA"]]
-,
-testRegex "[\\r\\n]A" [ERROR]
-    ["\\r\\nA "]
-    [Just [" 0: \\x0aA"]]
-,
-testRegex "(\\r|\\n)A" [ERROR]
-    ["\\r\\nA "]
-    [Just [" 0: \\x0aA"],
-     Just [" 1: \\x0a"]]
-,
-testRegex "a(*CR)b" []
-    []
-    [Just ["Failed: (*VERB) not recognized at offset 5"]]
-,
-testRegex "(*CR)a.b" []
-    ["a\\nb",
-     "** Failers",
-     "a\\rb  "]
-    [Just [" 0: a\\x0ab"],
-     Nothing,
-     Nothing]
-,
-testRegex "(*CR)a.b" [ERROR]
-    ["a\\nb",
-     "** Failers",
-     "a\\rb  "]
-    [Just [" 0: a\\x0ab"],
-     Nothing,
-     Nothing]
-,
-testRegex "(*LF)a.b" [ERROR]
-    ["a\\rb",
-     "** Failers",
-     "a\\nb  "]
-    [Just [" 0: a\\x0db"],
-     Nothing,
-     Nothing]
-,
-testRegex "(*CRLF)a.b" []
-    ["a\\rb",
-     "a\\nb  ",
-     "** Failers",
-     "a\\r\\nb  "]
-    [Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Nothing,
-     Nothing]
-,
-testRegex "(*ANYCRLF)a.b" [ERROR]
-    ["** Failers",
-     "a\\rb",
-     "a\\nb  ",
-     "a\\r\\nb  "]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(*ANY)a.b" [ERROR]
-    ["** Failers",
-     "a\\rb",
-     "a\\nb  ",
-     "a\\r\\nb  ",
-     "a\\x85b "]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\Rb" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "** Failers",
-     "a\\x85b",
-     "a\\x0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\Rb" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "a\\x85b",
-     "a\\x0bb     ",
-     "** Failers ",
-     "a\\x85b\\<bsr_anycrlf>",
-     "a\\x0bb\\<bsr_anycrlf>",
-     "",
-     "/a\\R?b/I<bsr_anycrlf>",
-     "a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "** Failers",
-     "a\\x85b",
-     "a\\x0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0bb"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a\\R?b/I<bsr_anycrlf>"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\R?b" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "a\\x85b",
-     "a\\x0bb     ",
-     "** Failers ",
-     "a\\x85b\\<bsr_anycrlf>",
-     "a\\x0bb\\<bsr_anycrlf>",
-     "",
-     "/a\\R{2,4}b/I<bsr_anycrlf>",
-     "a\\r\\n\\nb",
-     "a\\n\\r\\rb",
-     "a\\r\\n\\r\\n\\r\\n\\r\\nb",
-     "** Failers",
-     "a\\x85\\85b",
-     "a\\x0b\\0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0bb"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a\\R{2,4}b/I<bsr_anycrlf>"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0d\\x0a\\x0ab"],
-     Just [" 0: a\\x0a\\x0d\\x0db"],
-     Just [" 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\R{2,4}b" [ERROR]
-    ["a\\r\\rb",
-     "a\\n\\n\\nb",
-     "a\\r\\n\\n\\r\\rb",
-     "a\\x85\\85b",
-     "a\\x0b\\0bb     ",
-     "** Failers ",
-     "a\\r\\r\\r\\r\\rb ",
-     "a\\x85\\85b\\<bsr_anycrlf>",
-     "a\\x0b\\0bb\\<bsr_anycrlf>",
-     "",
-     "/(*BSR_ANYCRLF)a\\Rb/I",
-     "a\\nb",
-     "a\\rb "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0d\\x0db"],
-     Just [" 0: a\\x0a\\x0a\\x0ab"],
-     Just [" 0: a\\x0d\\x0a\\x0a\\x0d\\x0db"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(*BSR_ANYCRLF)a\\Rb/I"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"]]
-,
-testRegex "(*BSR_UNICODE)a\\Rb" [ERROR]
-    ["a\\x85b"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x85b"]]
-,
-testRegex "(*BSR_ANYCRLF)(*CRLF)a\\Rb" [ERROR]
-    ["a\\nb",
-     "a\\rb "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["Forced newline sequence: CRLF"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"]]
-,
-testRegex "(*CRLF)(*BSR_UNICODE)a\\Rb" [ERROR]
-    ["a\\x85b"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode"],
-     Just ["Forced newline sequence: CRLF"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x85b"]]
-,
-testRegex "(*CRLF)(*BSR_ANYCRLF)(*CR)ab" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["Forced newline sequence: CR"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"]]
-,
-testRegex " End of testinput2 " []
-    []
-    []
diff --git a/tests/testdata/regex3.tests b/tests/testdata/regex3.tests
deleted file mode 100644
--- a/tests/testdata/regex3.tests
+++ /dev/null
@@ -1,158 +0,0 @@
-testRegex "^[\\w]+" []
-    ["*** Failers",
-     "\201cole"]
-    [Nothing,
-     Nothing]
-,
-testRegex "^[\\w]+" [ERROR]
-    ["\201cole"]
-    [Just [" 0: \201cole"]]
-,
-testRegex "^[\\w]+" []
-    ["*** Failers",
-     "\201cole"]
-    [Nothing,
-     Nothing]
-,
-testRegex "^[\\W]+" []
-    ["\201cole"]
-    [Just [" 0: \\xc9"]]
-,
-testRegex "^[\\W]+" [ERROR]
-    ["*** Failers",
-     "\201cole"]
-    [Just [" 0: *** "],
-     Nothing]
-,
-testRegex "[\\b]" []
-    ["\\b",
-     "*** Failers",
-     "a"]
-    [Just [" 0: \\x08"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\b]" [ERROR]
-    ["\\b",
-     "*** Failers",
-     "a"]
-    [Just [" 0: \\x08"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\w+" []
-    ["*** Failers",
-     "\201cole"]
-    [Nothing,
-     Nothing]
-,
-testRegex "^\\w+" [ERROR]
-    ["\201cole"]
-    [Just [" 0: \201cole"]]
-,
-testRegex "(.+)\\b(.+)" []
-    ["\201cole"]
-    [Just [" 0: \\xc9cole"],
-     Just [" 1: \\xc9"],
-     Just [" 2: cole"]]
-,
-testRegex "(.+)\\b(.+)" [ERROR]
-    ["*** Failers",
-     "\201cole"]
-    [Just [" 0: *** Failers"],
-     Just [" 1: *** "],
-     Just [" 2: Failers"],
-     Nothing]
-,
-testRegex "\201cole" [caseless]
-    ["\201cole",
-     "*** Failers",
-     "\233cole"]
-    [Just [" 0: \\xc9cole"],
-     Nothing,
-     Nothing]
-,
-testRegex "\201cole" [ERROR]
-    ["\201cole",
-     "\233cole"]
-    [Just [" 0: \201cole"],
-     Just [" 0: \233cole"]]
-,
-testRegex "\\w" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P "]]
-,
-testRegex "\\w" [ERROR]
-    []
-    [Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just ["Starting byte set: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P "]]
-,
-testRegex "^[\\xc8-\\xc9]" [ERROR]
-    ["\201cole",
-     "\233cole"]
-    [Just [" 0: \201"],
-     Just [" 0: \233"]]
-,
-testRegex "^[\\xc8-\\xc9]" [ERROR]
-    ["\201cole",
-     "*** Failers ",
-     "\233cole"]
-    [Just [" 0: \201"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\W+" [ERROR]
-    [">>>\\xaa<<<",
-     ">>>\\xba<<< "]
-    [Just [" 0: >>>"],
-     Just [" 0: >>>"]]
-,
-testRegex "[\\W]+" [ERROR]
-    [">>>\\xaa<<<",
-     ">>>\\xba<<< "]
-    [Just [" 0: >>>"],
-     Just [" 0: >>>"]]
-,
-testRegex "[^[:alpha:]]+" [ERROR]
-    [">>>\\xaa<<<",
-     ">>>\\xba<<< "]
-    [Just [" 0: >>>"],
-     Just [" 0: >>>"]]
-,
-testRegex "\\w+" [ERROR]
-    [">>>\\xaa<<<",
-     ">>>\\xba<<< "]
-    [Just [" 0: \170"],
-     Just [" 0: \186"]]
-,
-testRegex "[\\w]+" [ERROR]
-    [">>>\\xaa<<<",
-     ">>>\\xba<<< "]
-    [Just [" 0: \170"],
-     Just [" 0: \186"]]
-,
-testRegex "[[:alpha:]]+" [ERROR]
-    [">>>\\xaa<<<",
-     ">>>\\xba<<< ",
-     "",
-     "/[[:alpha:]][[:lower:]][[:upper:]]/DZLfr_FR "]
-    [Just [" 0: \170"],
-     Just [" 0: \186"],
-     Just ["/[[:alpha:]][[:lower:]][[:upper:]]/DZLfr_FR "],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex " End of testinput3 " []
-    []
-    []
diff --git a/tests/testdata/regex4.tests b/tests/testdata/regex4.tests
deleted file mode 100644
--- a/tests/testdata/regex4.tests
+++ /dev/null
@@ -1,963 +0,0 @@
-testRegex "-- Do not use the \\x{} construct except with patterns that have the --" []
-    ["/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/",
-     "/-- that option is set. However, the latest Perls recognize them always. --/"]
-    [Just ["/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/"],
-     Nothing,
-     Just ["/-- that option is set. However, the latest Perls recognize them always. --/"],
-     Nothing]
-,
-testRegex "a.b" [ERROR]
-    ["acb",
-     "a\\x7fb",
-     "a\\x{100}b ",
-     "*** Failers",
-     "a\\nb  "]
-    [Just [" 0: acb"],
-     Just [" 0: a\\x{7f}b"],
-     Just [" 0: a\\x{100}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3})b" [ERROR]
-    ["a\\x{4000}xyb ",
-     "a\\x{4000}\\x7fyb ",
-     "a\\x{4000}\\x{100}yb ",
-     "*** Failers",
-     "a\\x{4000}b ",
-     "ac\\ncb "]
-    [Just [" 0: a\\x{4000}xyb"],
-     Just [" 1: \\x{4000}xy"],
-     Just [" 0: a\\x{4000}\\x{7f}yb"],
-     Just [" 1: \\x{4000}\\x{7f}y"],
-     Just [" 0: a\\x{4000}\\x{100}yb"],
-     Just [" 1: \\x{4000}\\x{100}y"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a(.*?)(.)" []
-    ["a\\xc0\\x88b"]
-    [Just [" 0: a\\xc0"],
-     Just [" 1: "],
-     Just [" 2: \\xc0"]]
-,
-testRegex "a(.*?)(.)" [ERROR]
-    ["a\\x{100}b"]
-    [Just [" 0: a\\x{100}"],
-     Just [" 1: "],
-     Just [" 2: \\x{100}"]]
-,
-testRegex "a(.*)(.)" []
-    ["a\\xc0\\x88b"]
-    [Just [" 0: a\\xc0\\x88b"],
-     Just [" 1: \\xc0\\x88"],
-     Just [" 2: b"]]
-,
-testRegex "a(.*)(.)" [ERROR]
-    ["a\\x{100}b"]
-    [Just [" 0: a\\x{100}b"],
-     Just [" 1: \\x{100}"],
-     Just [" 2: b"]]
-,
-testRegex "a(.)(.)" []
-    ["a\\xc0\\x92bcd"]
-    [Just [" 0: a\\xc0\\x92"],
-     Just [" 1: \\xc0"],
-     Just [" 2: \\x92"]]
-,
-testRegex "a(.)(.)" [ERROR]
-    ["a\\x{240}bcd"]
-    [Just [" 0: a\\x{240}b"],
-     Just [" 1: \\x{240}"],
-     Just [" 2: b"]]
-,
-testRegex "a(.?)(.)" []
-    ["a\\xc0\\x92bcd"]
-    [Just [" 0: a\\xc0\\x92"],
-     Just [" 1: \\xc0"],
-     Just [" 2: \\x92"]]
-,
-testRegex "a(.?)(.)" [ERROR]
-    ["a\\x{240}bcd"]
-    [Just [" 0: a\\x{240}b"],
-     Just [" 1: \\x{240}"],
-     Just [" 2: b"]]
-,
-testRegex "a(.??)(.)" []
-    ["a\\xc0\\x92bcd"]
-    [Just [" 0: a\\xc0"],
-     Just [" 1: "],
-     Just [" 2: \\xc0"]]
-,
-testRegex "a(.??)(.)" [ERROR]
-    ["a\\x{240}bcd"]
-    [Just [" 0: a\\x{240}"],
-     Just [" 1: "],
-     Just [" 2: \\x{240}"]]
-,
-testRegex "a(.{3})b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "*** Failers",
-     "a\\x{1234}b ",
-     "ac\\ncb "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 1: \\x{1234}xy"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 1: \\x{1234}\\x{4321}y"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,})b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "*** Failers",
-     "a\\x{1234}b "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 1: \\x{1234}xy"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 1: \\x{1234}\\x{4321}y"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}"],
-     Just [" 0: axxxxbcdefghijb"],
-     Just [" 1: xxxxbcdefghij"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,}?)b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "*** Failers",
-     "a\\x{1234}b "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 1: \\x{1234}xy"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 1: \\x{1234}\\x{4321}y"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}"],
-     Just [" 0: axxxxb"],
-     Just [" 1: xxxx"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,5})b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "axbxxbcdefghijb ",
-     "axxxxxbcdefghijb ",
-     "*** Failers",
-     "a\\x{1234}b ",
-     "axxxxxxbcdefghijb "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 1: \\x{1234}xy"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 1: \\x{1234}\\x{4321}y"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}"],
-     Just [" 0: axxxxb"],
-     Just [" 1: xxxx"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}"],
-     Just [" 0: axbxxb"],
-     Just [" 1: xbxx"],
-     Just [" 0: axxxxxb"],
-     Just [" 1: xxxxx"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,5}?)b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "axbxxbcdefghijb ",
-     "axxxxxbcdefghijb ",
-     "*** Failers",
-     "a\\x{1234}b ",
-     "axxxxxxbcdefghijb "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 1: \\x{1234}xy"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 1: \\x{1234}\\x{4321}y"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}"],
-     Just [" 0: axxxxb"],
-     Just [" 1: xxxx"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Just [" 1: \\x{1234}\\x{4321}\\x{3412}\\x{3421}"],
-     Just [" 0: axbxxb"],
-     Just [" 1: xbxx"],
-     Just [" 0: axxxxxb"],
-     Just [" 1: xxxxx"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[a\\x{c0}]" [ERROR]
-    ["*** Failers",
-     "\\x{100}"]
-    [Nothing,
-     Nothing]
-,
-testRegex "(?<=aXb)cd" [ERROR]
-    ["aXbcd"]
-    [Just [" 0: cd"]]
-,
-testRegex "(?<=a\\x{100}b)cd" [ERROR]
-    ["a\\x{100}bcd"]
-    [Just [" 0: cd"]]
-,
-testRegex "(?<=a\\x{100000}b)cd" [ERROR]
-    ["a\\x{100000}bcd",
-     "",
-     "/(?:\\x{100}){3}b/8",
-     "\\x{100}\\x{100}\\x{100}b",
-     "*** Failers ",
-     "\\x{100}\\x{100}b"]
-    [Just [" 0: cd"],
-     Just ["/(?:\\x{100}){3}b/8"],
-     Just [" 0: \\x{100}\\x{100}\\x{100}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\x{ab}" [ERROR]
-    ["\\x{ab} ",
-     "\\xc2\\xab",
-     "*** Failers ",
-     "\\x00{ab}"]
-    [Just [" 0: \\x{ab}"],
-     Just [" 0: \\x{ab}"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=(.))X" [ERROR]
-    ["WXYZ",
-     "\\x{256}XYZ ",
-     "*** Failers",
-     "XYZ "]
-    [Just [" 0: X"],
-     Just [" 1: W"],
-     Just [" 0: X"],
-     Just [" 1: \\x{256}"],
-     Nothing,
-     Nothing]
-,
-testRegex "X(\\C{3})" [ERROR]
-    ["X\\x{1234}"]
-    [Just [" 0: X\\x{1234}"],
-     Just [" 1: \\x{1234}"]]
-,
-testRegex "X(\\C{4})" [ERROR]
-    ["X\\x{1234}YZ",
-     "",
-     "/X\\C*/8",
-     "XYZabcdce",
-     "",
-     "/X\\C*?/8",
-     "XYZabcde",
-     "",
-     "/X\\C{3,5}/8",
-     "Xabcdefg   ",
-     "X\\x{1234} ",
-     "X\\x{1234}YZ",
-     "X\\x{1234}\\x{512}  ",
-     "X\\x{1234}\\x{512}YZ"]
-    [Just [" 0: X\\x{1234}Y"],
-     Just [" 1: \\x{1234}Y"],
-     Just ["/X\\C*/8"],
-     Just [" 0: XYZabcdce"],
-     Just ["/X\\C*?/8"],
-     Just [" 0: X"],
-     Just ["/X\\C{3,5}/8"],
-     Just [" 0: Xabcde"],
-     Just [" 0: X\\x{1234}"],
-     Just [" 0: X\\x{1234}YZ"],
-     Just [" 0: X\\x{1234}\\x{512}"],
-     Just [" 0: X\\x{1234}\\x{512}"]]
-,
-testRegex "X\\C{3,5}?" [ERROR]
-    ["Xabcdefg   ",
-     "X\\x{1234} ",
-     "X\\x{1234}YZ",
-     "X\\x{1234}\\x{512}  "]
-    [Just [" 0: Xabc"],
-     Just [" 0: X\\x{1234}"],
-     Just [" 0: X\\x{1234}"],
-     Just [" 0: X\\x{1234}"]]
-,
-testRegex "[^a]+" [ERROR]
-    ["bcd",
-     "\\x{100}aY\\x{256}Z ",
-     "",
-     "/^[^a]{2}/8",
-     "\\x{100}bc",
-     "",
-     "/^[^a]{2,}/8",
-     "\\x{100}bcAa"]
-    [Just [" 0: bcd"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: Y\\x{256}Z"],
-     Just ["/^[^a]{2}/8"],
-     Just [" 0: \\x{100}b"],
-     Just ["/^[^a]{2,}/8"],
-     Just [" 0: \\x{100}bcA"]]
-,
-testRegex "^[^a]{2,}?" [ERROR]
-    ["\\x{100}bca"]
-    [Just [" 0: \\x{100}b"]]
-,
-testRegex "[^a]+" [ERROR]
-    ["bcd",
-     "\\x{100}aY\\x{256}Z ",
-     "",
-     "/^[^a]{2}/8i",
-     "\\x{100}bc",
-     "",
-     "/^[^a]{2,}/8i",
-     "\\x{100}bcAa"]
-    [Just [" 0: bcd"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: Y\\x{256}Z"],
-     Just ["/^[^a]{2}/8i"],
-     Just [" 0: \\x{100}b"],
-     Just ["/^[^a]{2,}/8i"],
-     Just [" 0: \\x{100}bc"]]
-,
-testRegex "^[^a]{2,}?" [caseless]
-    ["\\x{100}bca"]
-    [Just [" 0: \\x{100}b"]]
-,
-testRegex "\\x{100}{0,0}" [ERROR]
-    ["abcd",
-     "",
-     "/\\x{100}?/8",
-     "abcd",
-     "\\x{100}\\x{100} "]
-    [Just [" 0: "],
-     Just ["/\\x{100}?/8"],
-     Just [" 0: "],
-     Just [" 0: \\x{100}"]]
-,
-testRegex "\\x{100}{0,3}" [ERROR]
-    ["\\x{100}\\x{100} ",
-     "\\x{100}\\x{100}\\x{100}\\x{100} ",
-     "",
-     "/\\x{100}*/8",
-     "abce",
-     "\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}\\x{100}"],
-     Just [" 0: \\x{100}\\x{100}\\x{100}"],
-     Just ["/\\x{100}*/8"],
-     Just [" 0: "],
-     Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}{1,1}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}"]]
-,
-testRegex "\\x{100}{1,3}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}+" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}{3}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}XX"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}{3,5}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}{3,}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "(?<=a\\x{100}{2}b)X" [ERROR]
-    ["Xyyya\\x{100}\\x{100}bXzzz"]
-    [Just [" 0: X"],
-     Just [" 0+ zzz"]]
-,
-testRegex "\\D*" [ERROR]
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "\\D*" [ERROR]
-    ["\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\D" [ERROR]
-    ["1X2",
-     "1\\x{100}2 ",
-     "",
-     "/>\\S/8",
-     "> >X Y",
-     "> >\\x{100} Y",
-     "",
-     "/\\d/8",
-     "\\x{100}3",
-     "",
-     "/\\s/8",
-     "\\x{100} X",
-     "",
-     "/\\D+/8",
-     "12abcd34",
-     "*** Failers",
-     "1234  "]
-    [Just [" 0: X"],
-     Just [" 0: \\x{100}"],
-     Just ["/>\\S/8"],
-     Just [" 0: >X"],
-     Just [" 0: >\\x{100}"],
-     Just ["/\\d/8"],
-     Just [" 0: 3"],
-     Just ["/\\s/8"],
-     Just [" 0:  "],
-     Just ["/\\D+/8"],
-     Just [" 0: abcd"],
-     Just [" 0: *** Failers"],
-     Nothing]
-,
-testRegex "\\D{2,3}" [ERROR]
-    ["12abcd34",
-     "12ab34",
-     "*** Failers  ",
-     "1234",
-     "12a34  "]
-    [Just [" 0: abc"],
-     Just [" 0: ab"],
-     Just [" 0: ***"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\D{2,3}?" [ERROR]
-    ["12abcd34",
-     "12ab34",
-     "*** Failers  ",
-     "1234",
-     "12a34  "]
-    [Just [" 0: ab"],
-     Just [" 0: ab"],
-     Just [" 0: **"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\d+" [ERROR]
-    ["12abcd34",
-     "*** Failers"]
-    [Just [" 0: 12"],
-     Nothing]
-,
-testRegex "\\d{2,3}" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers  ",
-     "1.4 "]
-    [Just [" 0: 12"],
-     Just [" 0: 123"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\d{2,3}?" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers  ",
-     "1.4 "]
-    [Just [" 0: 12"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\S+" [ERROR]
-    ["12abcd34",
-     "*** Failers",
-     "\\    \\ "]
-    [Just [" 0: 12abcd34"],
-     Just [" 0: ***"],
-     Nothing]
-,
-testRegex "\\S{2,3}" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers",
-     "\\     \\  "]
-    [Just [" 0: 12a"],
-     Just [" 0: 123"],
-     Just [" 0: ***"],
-     Nothing]
-,
-testRegex "\\S{2,3}?" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers",
-     "\\     \\  "]
-    [Just [" 0: 12"],
-     Just [" 0: 12"],
-     Just [" 0: **"],
-     Nothing]
-,
-testRegex ">\\s+<" [ERROR]
-    ["12>      <34",
-     "*** Failers"]
-    [Just [" 0: >      <"],
-     Just [" 0+ 34"],
-     Nothing]
-,
-testRegex ">\\s{2,3}<" [ERROR]
-    ["ab>  <cd",
-     "ab>   <ce",
-     "*** Failers",
-     "ab>    <cd "]
-    [Just [" 0: >  <"],
-     Just [" 0+ cd"],
-     Just [" 0: >   <"],
-     Just [" 0+ ce"],
-     Nothing,
-     Nothing]
-,
-testRegex ">\\s{2,3}?<" [ERROR]
-    ["ab>  <cd",
-     "ab>   <ce",
-     "*** Failers",
-     "ab>    <cd "]
-    [Just [" 0: >  <"],
-     Just [" 0+ cd"],
-     Just [" 0: >   <"],
-     Just [" 0+ ce"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\w+" [ERROR]
-    ["12      34",
-     "*** Failers",
-     "+++=*! "]
-    [Just [" 0: 12"],
-     Just [" 0: Failers"],
-     Nothing]
-,
-testRegex "\\w{2,3}" [ERROR]
-    ["ab  cd",
-     "abcd ce",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ab"],
-     Just [" 0: abc"],
-     Just [" 0: Fai"],
-     Nothing]
-,
-testRegex "\\w{2,3}?" [ERROR]
-    ["ab  cd",
-     "abcd ce",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ab"],
-     Just [" 0: ab"],
-     Just [" 0: Fa"],
-     Nothing]
-,
-testRegex "\\W+" [ERROR]
-    ["12====34",
-     "*** Failers",
-     "abcd "]
-    [Just [" 0: ===="],
-     Just [" 0: *** "],
-     Nothing]
-,
-testRegex "\\W{2,3}" [ERROR]
-    ["ab====cd",
-     "ab==cd",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ==="],
-     Just [" 0: =="],
-     Just [" 0: ***"],
-     Nothing]
-,
-testRegex "\\W{2,3}?" [ERROR]
-    ["ab====cd",
-     "ab==cd",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: =="],
-     Just [" 0: =="],
-     Just [" 0: **"],
-     Nothing]
-,
-testRegex "[\\x{100}]" [ERROR]
-    ["\\x{100}",
-     "Z\\x{100}",
-     "\\x{100}Z",
-     "*** Failers "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: \\x{100}"],
-     Nothing]
-,
-testRegex "[Z\\x{100}]" [ERROR]
-    ["Z\\x{100}",
-     "\\x{100}",
-     "\\x{100}Z",
-     "*** Failers "]
-    [Just [" 0: Z"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: \\x{100}"],
-     Nothing]
-,
-testRegex "[\\x{100}\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Nothing]
-,
-testRegex "[\\x{100}-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Nothing]
-,
-testRegex "[z-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "abzcd",
-     "ab|cd  ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Just [" 0: z"],
-     Just [" 0: |"],
-     Nothing]
-,
-testRegex "[Q\\x{100}\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "Q? ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: Q"],
-     Nothing]
-,
-testRegex "[Q\\x{100}-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "Q? ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Just [" 0: Q"],
-     Nothing]
-,
-testRegex "[Qz-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "abzcd",
-     "ab|cd  ",
-     "Q? ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Just [" 0: z"],
-     Just [" 0: |"],
-     Just [" 0: Q"],
-     Nothing]
-,
-testRegex "[\\x{100}\\x{200}]{1,3}" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}\\x{100}\\x{200}"],
-     Nothing]
-,
-testRegex "[\\x{100}\\x{200}]{1,3}?" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}"],
-     Nothing]
-,
-testRegex "[Q\\x{100}\\x{200}]{1,3}" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}\\x{100}\\x{200}"],
-     Nothing]
-,
-testRegex "[Q\\x{100}\\x{200}]{1,3}?" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}"],
-     Nothing]
-,
-testRegex "(?<=[\\x{100}\\x{200}])X" [ERROR]
-    ["abc\\x{200}X",
-     "abc\\x{100}X ",
-     "*** Failers",
-     "X  "]
-    [Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=[Q\\x{100}\\x{200}])X" [ERROR]
-    ["abc\\x{200}X",
-     "abc\\x{100}X ",
-     "abQX ",
-     "*** Failers",
-     "X  "]
-    [Just [" 0: X"],
-     Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=[\\x{100}\\x{200}]{3})X" [ERROR]
-    ["abc\\x{100}\\x{200}\\x{100}X",
-     "*** Failers",
-     "abc\\x{200}X",
-     "X  "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^\\x{100}\\x{200}]X" [ERROR]
-    ["AX",
-     "\\x{150}X",
-     "\\x{500}X ",
-     "*** Failers",
-     "\\x{100}X",
-     "\\x{200}X   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{150}X"],
-     Just [" 0: \\x{500}X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^Q\\x{100}\\x{200}]X" [ERROR]
-    ["AX",
-     "\\x{150}X",
-     "\\x{500}X ",
-     "*** Failers",
-     "\\x{100}X",
-     "\\x{200}X   ",
-     "QX "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{150}X"],
-     Just [" 0: \\x{500}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^\\x{100}-\\x{200}]X" [ERROR]
-    ["AX",
-     "\\x{500}X ",
-     "*** Failers",
-     "\\x{100}X",
-     "\\x{150}X",
-     "\\x{200}X   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{500}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\Cb" []
-    ["aXb",
-     "a\\nb",
-     "",
-     "/a\\Cb/8",
-     "aXb",
-     "a\\nb",
-     "*** Failers ",
-     "a\\x{100}b "]
-    [Just [" 0: aXb"],
-     Just [" 0: a\\x0ab"],
-     Just ["/a\\Cb/8"],
-     Just [" 0: aXb"],
-     Just [" 0: a\\x{0a}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "[z-\\x{100}]" [caseless]
-    ["z",
-     "Z ",
-     "\\x{100}",
-     "*** Failers",
-     "\\x{102}",
-     "y    "]
-    [Just [" 0: z"],
-     Just [" 0: Z"],
-     Just [" 0: \\x{100}"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[\\xFF]" []
-    [">\\xff<"]
-    [Just [" 0: \\xff"]]
-,
-testRegex "[\\xff]" [ERROR]
-    [">\\x{ff}<"]
-    [Just [" 0: \\x{ff}"]]
-,
-testRegex "[^\\xFF]" []
-    ["XYZ"]
-    [Just [" 0: X"]]
-,
-testRegex "[^\\xff]" [ERROR]
-    ["XYZ",
-     "\\x{123} "]
-    [Just [" 0: X"],
-     Just [" 0: \\x{123}"]]
-,
-testRegex "^[ac]*b" [ERROR]
-    ["xb"]
-    [Nothing]
-,
-testRegex "^[ac\\x{100}]*b" [ERROR]
-    ["xb"]
-    [Nothing]
-,
-testRegex "^[^x]*b" [caseless]
-    ["xb"]
-    [Nothing]
-,
-testRegex "^[^x]*b" [ERROR]
-    ["xb",
-     "",
-     "/^\\d*b/8",
-     "xb "]
-    [Nothing,
-     Just ["/^\\d*b/8"],
-     Nothing]
-,
-testRegex "(|a)" [ERROR]
-    ["catac",
-     "a\\x{256}a "]
-    [Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 1: "],
-     Just [" 0: a"],
-     Just [" 1: a"],
-     Just [" 0: "],
-     Just [" 1: "]]
-,
-testRegex "^\\x{85}$" [caseless]
-    ["\\x{85}"]
-    [Just [" 0: \\x{85}"]]
-,
-testRegex "^\225\136\180" [ERROR]
-    ["\225\136\180 "]
-    [Just [" 0: \\x{1234}"]]
-,
-testRegex "^\\\225\136\180" [ERROR]
-    ["\225\136\180 "]
-    [Just [" 0: \\x{1234}"]]
-,
-testRegex "(?s)(.{1,5})" [ERROR]
-    ["abcdefg",
-     "ab"]
-    [Just [" 0: abcde"],
-     Just [" 1: abcde"],
-     Just [" 0: ab"],
-     Just [" 1: ab"]]
-,
-testRegex "a*\\x{100}*\\w" [ERROR]
-    ["a "]
-    [Just [" 0: a"]]
-,
-testRegex "\\S\\S" [ERROR]
-    ["A\\x{a3}BC",
-     "",
-     "/\\S{2}/8g",
-     "A\\x{a3}BC",
-     "",
-     "/\\W\\W/8g",
-     "+\\x{a3}== "]
-    [Just [" 0: A\\x{a3}"],
-     Just [" 0: BC"],
-     Just ["/\\S{2}/8g"],
-     Just [" 0: A\\x{a3}"],
-     Just [" 0: BC"],
-     Just ["/\\W\\W/8g"],
-     Just [" 0: +\\x{a3}"],
-     Just [" 0: =="]]
-,
-testRegex "\\W{2}" [ERROR]
-    ["+\\x{a3}== "]
-    [Just [" 0: +\\x{a3}"],
-     Just [" 0: =="]]
-,
-testRegex " End of testinput4 " []
-    []
-    []
diff --git a/tests/testdata/regex5.tests b/tests/testdata/regex5.tests
deleted file mode 100644
--- a/tests/testdata/regex5.tests
+++ /dev/null
diff --git a/tests/testdata/regex6.tests b/tests/testdata/regex6.tests
deleted file mode 100644
--- a/tests/testdata/regex6.tests
+++ /dev/null
@@ -1,1585 +0,0 @@
-testRegex "^\\pC\\pL\\pM\\pN\\pP\\pS\\pZ<" [ERROR]
-    ["\\x7f\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<",
-     "\\np\\x{300}9!\\$ < ",
-     "** Failers ",
-     "ap\\x{300}9!\\$ < ",
-     "",
-     "/^\\PC/8",
-     "X",
-     "** Failers ",
-     "\\x7f",
-     "",
-     "/^\\PL/8",
-     "9",
-     "** Failers ",
-     "\\x{c0}",
-     "",
-     "/^\\PM/8",
-     "X",
-     "** Failers ",
-     "\\x{30f}",
-     "",
-     "/^\\PN/8",
-     "X",
-     "** Failers ",
-     "\\x{660}",
-     "",
-     "/^\\PP/8",
-     "X",
-     "** Failers ",
-     "\\x{66c}",
-     "",
-     "/^\\PS/8",
-     "X",
-     "** Failers ",
-     "\\x{f01}",
-     "",
-     "/^\\PZ/8",
-     "X",
-     "** Failers ",
-     "\\x{1680}",
-     "",
-     "/^\\p{Cc}/8",
-     "\\x{017}",
-     "\\x{09f} ",
-     "** Failers",
-     "\\x{0600} ",
-     "",
-     "/^\\p{Cf}/8",
-     "\\x{601}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Cn}/8",
-     "\\x{e0000}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Co}/8",
-     "\\x{f8ff}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Cs}/8",
-     "\\?\\x{dfff}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Ll}/8",
-     "a",
-     "** Failers ",
-     "Z",
-     "\\x{e000}  ",
-     "",
-     "/^\\p{Lm}/8",
-     "\\x{2b0}",
-     "** Failers",
-     "a ",
-     "",
-     "/^\\p{Lo}/8",
-     "\\x{1bb}",
-     "\\x{3400}",
-     "\\x{3401}",
-     "\\x{4d00}",
-     "\\x{4db4}",
-     "\\x{4db5}     ",
-     "** Failers",
-     "a ",
-     "\\x{2b0}",
-     "\\x{4db6} ",
-     "",
-     "/^\\p{Lt}/8",
-     "\\x{1c5}",
-     "** Failers",
-     "a ",
-     "\\x{2b0}",
-     "",
-     "/^\\p{Lu}/8",
-     "A",
-     "** Failers",
-     "\\x{2b0}",
-     "",
-     "/^\\p{Mc}/8",
-     "\\x{903}",
-     "** Failers",
-     "X",
-     "\\x{300}",
-     "",
-     "/^\\p{Me}/8",
-     "\\x{488}",
-     "** Failers",
-     "X",
-     "\\x{903}",
-     "\\x{300}",
-     "",
-     "/^\\p{Mn}/8",
-     "\\x{300}",
-     "** Failers",
-     "X",
-     "\\x{903}",
-     "",
-     "/^\\p{Nd}+/8",
-     "0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\\x{66a}",
-     "\\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\\x{6fa}",
-     "\\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\\x{970}",
-     "** Failers",
-     "X",
-     "",
-     "/^\\p{Nl}/8",
-     "\\x{16ee}",
-     "** Failers",
-     "X",
-     "\\x{966}",
-     "",
-     "/^\\p{No}/8",
-     "\\x{b2}",
-     "\\x{b3}",
-     "** Failers",
-     "X",
-     "\\x{16ee}",
-     "",
-     "/^\\p{Pc}/8",
-     "\\x5f",
-     "\\x{203f}",
-     "** Failers",
-     "X",
-     "-",
-     "\\x{58a}",
-     "",
-     "/^\\p{Pd}/8",
-     "-",
-     "\\x{58a}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Pe}/8",
-     ")",
-     "]",
-     "}",
-     "\\x{f3b}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "(",
-     "[",
-     "{",
-     "\\x{f3c}",
-     "",
-     "/^\\p{Pf}/8",
-     "\\x{bb}",
-     "\\x{2019}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Pi}/8",
-     "\\x{ab}",
-     "\\x{2018}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Po}/8",
-     "!",
-     "\\x{37e}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Ps}/8",
-     "(",
-     "[",
-     "{",
-     "\\x{f3c}",
-     "** Failers",
-     "X",
-     ")",
-     "]",
-     "}",
-     "\\x{f3b}",
-     "",
-     "/^\\p{Sc}+/8",
-     "$\\x{a2}\\x{a3}\\x{a4}\\x{a5}\\x{a6}",
-     "\\x{9f2}",
-     "** Failers",
-     "X",
-     "\\x{2c2}",
-     "",
-     "/^\\p{Sk}/8",
-     "\\x{2c2}",
-     "** Failers",
-     "X",
-     "\\x{9f2}",
-     "",
-     "/^\\p{Sm}+/8",
-     "+<|~\\x{ac}\\x{2044}",
-     "** Failers",
-     "X",
-     "\\x{9f2}",
-     "",
-     "/^\\p{So}/8",
-     "\\x{a6}",
-     "\\x{482} ",
-     "** Failers",
-     "X",
-     "\\x{9f2}",
-     "",
-     "/^\\p{Zl}/8",
-     "\\x{2028}",
-     "** Failers",
-     "X",
-     "\\x{2029}",
-     "",
-     "/^\\p{Zp}/8",
-     "\\x{2029}",
-     "** Failers",
-     "X",
-     "\\x{2028}",
-     "",
-     "/^\\p{Zs}/8",
-     "\\ \\",
-     "\\x{a0}",
-     "\\x{1680}",
-     "\\x{180e}",
-     "\\x{2000}",
-     "\\x{2001}     ",
-     "** Failers",
-     "\\x{2028}",
-     "\\x{200d} ",
-     "",
-     "/\\p{Nd}+(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}+?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,}(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,}?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2}(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,3}(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,3}?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}??(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*+(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*+(...)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*+(....)/8",
-     "** Failers",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Lu}/8i",
-     "A",
-     "a\\x{10a0}B ",
-     "** Failers ",
-     "a",
-     "\\x{1d00}  "]
-    [Just [" 0: \\x{7f}\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<"],
-     Just [" 0: \\x{0a}p\\x{300}9!$ <"],
-     Nothing,
-     Nothing,
-     Just ["/^\\PC/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PL/8"],
-     Just [" 0: 9"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PM/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PN/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PP/8"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Just ["/^\\PS/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PZ/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\p{Cc}/8"],
-     Just [" 0: \\x{17}"],
-     Just [" 0: \\x{9f}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Cf}/8"],
-     Just [" 0: \\x{601}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Cn}/8"],
-     Just [" 0: \\x{e0000}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Co}/8"],
-     Just [" 0: \\x{f8ff}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Cs}/8"],
-     Just [" 0: \\x{dfff}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Ll}/8"],
-     Just [" 0: a"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lm}/8"],
-     Just [" 0: \\x{2b0}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lo}/8"],
-     Just [" 0: \\x{1bb}"],
-     Just [" 0: \\x{3400}"],
-     Just [" 0: \\x{3401}"],
-     Just [" 0: \\x{4d00}"],
-     Just [" 0: \\x{4db4}"],
-     Just [" 0: \\x{4db5}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lt}/8"],
-     Just [" 0: \\x{1c5}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lu}/8"],
-     Just [" 0: A"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Mc}/8"],
-     Just [" 0: \\x{903}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Me}/8"],
-     Just [" 0: \\x{488}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Mn}/8"],
-     Just [" 0: \\x{300}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Nd}+/8"],
-     Just [" 0: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}"],
-     Just [" 0: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}"],
-     Just [" 0: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Nl}/8"],
-     Just [" 0: \\x{16ee}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{No}/8"],
-     Just [" 0: \\x{b2}"],
-     Just [" 0: \\x{b3}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pc}/8"],
-     Just [" 0: _"],
-     Just [" 0: \\x{203f}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pd}/8"],
-     Just [" 0: -"],
-     Just [" 0: \\x{58a}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pe}/8"],
-     Just [" 0: )"],
-     Just [" 0: ]"],
-     Just [" 0: }"],
-     Just [" 0: \\x{f3b}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pf}/8"],
-     Just [" 0: \\x{bb}"],
-     Just [" 0: \\x{2019}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pi}/8"],
-     Just [" 0: \\x{ab}"],
-     Just [" 0: \\x{2018}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Po}/8"],
-     Just [" 0: !"],
-     Just [" 0: \\x{37e}"],
-     Just [" 0: *"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Ps}/8"],
-     Just [" 0: ("],
-     Just [" 0: ["],
-     Just [" 0: {"],
-     Just [" 0: \\x{f3c}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Sc}+/8"],
-     Just [" 0: $\\x{a2}\\x{a3}\\x{a4}\\x{a5}"],
-     Just [" 0: \\x{9f2}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Sk}/8"],
-     Just [" 0: \\x{2c2}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Sm}+/8"],
-     Just [" 0: +<|~\\x{ac}\\x{2044}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{So}/8"],
-     Just [" 0: \\x{a6}"],
-     Just [" 0: \\x{482}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Zl}/8"],
-     Just [" 0: \\x{2028}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Zp}/8"],
-     Just [" 0: \\x{2029}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Zs}/8"],
-     Just [" 0:  "],
-     Just [" 0: \\x{a0}"],
-     Just [" 0: \\x{1680}"],
-     Just [" 0: \\x{180e}"],
-     Just [" 0: \\x{2000}"],
-     Just [" 0: \\x{2001}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\p{Nd}+(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: AB"],
-     Just ["/\\p{Nd}+?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}"],
-     Just [" 1: \\x{661}\\x{662}"],
-     Just ["/\\p{Nd}{2,}(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: AB"],
-     Just ["/\\p{Nd}{2,}?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 1: \\x{662}A"],
-     Just ["/\\p{Nd}*(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: AB"],
-     Just ["/\\p{Nd}*?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}"],
-     Just [" 1: \\x{660}\\x{661}"],
-     Just ["/\\p{Nd}{2}(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 1: \\x{662}A"],
-     Just ["/\\p{Nd}{2,3}(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: AB"],
-     Just ["/\\p{Nd}{2,3}?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 1: \\x{662}A"],
-     Just ["/\\p{Nd}?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}"],
-     Just [" 1: \\x{661}\\x{662}"],
-     Just ["/\\p{Nd}??(..)/8"],
-     Just [" 0: \\x{660}\\x{661}"],
-     Just [" 1: \\x{660}\\x{661}"],
-     Just ["/\\p{Nd}*+(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: AB"],
-     Just ["/\\p{Nd}*+(...)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}ABC"],
-     Just [" 1: ABC"],
-     Just ["/\\p{Nd}*+(....)/8"],
-     Just [" 0: ** F"],
-     Just [" 1: ** F"],
-     Nothing,
-     Just ["/\\p{Lu}/8i"],
-     Just [" 0: A"],
-     Just [" 0: \\x{10a0}"],
-     Just [" 0: F"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\p{^Lu}" [caseless]
-    ["1234",
-     "** Failers",
-     "ABC "]
-    [Just [" 0: 1"],
-     Just [" 0: *"],
-     Nothing]
-,
-testRegex "\\P{Lu}" [caseless]
-    ["1234",
-     "** Failers",
-     "ABC "]
-    [Just [" 0: 1"],
-     Just [" 0: *"],
-     Nothing]
-,
-testRegex "(?<=A\\p{Nd})XYZ" [ERROR]
-    ["A2XYZ",
-     "123A5XYZPQR",
-     "ABA\\x{660}XYZpqr",
-     "** Failers",
-     "AXYZ",
-     "XYZ     ",
-     "",
-     "/(?<!\\pL)XYZ/8",
-     "1XYZ",
-     "AB=XYZ.. ",
-     "XYZ ",
-     "** Failers",
-     "WXYZ "]
-    [Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?<!\\pL)XYZ/8"],
-     Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\p{L}]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[\\p{^L}]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[\\P{L}]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[\\P{^L}]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["No options"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[abc\\p{L}\\x{0660}]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "[\\p{Nd}]" [ERROR]
-    ["1234"]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 1"]]
-,
-testRegex "[\\p{Nd}+-]+" [ERROR]
-    ["1234",
-     "12-34",
-     "12+\\x{661}-34  ",
-     "** Failers",
-     "abcd  "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: utf8"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: 1234"],
-     Just [" 0: 12-34"],
-     Just [" 0: 12+\\x{661}-34"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\P{Nd}]+" [ERROR]
-    ["abcd",
-     "** Failers",
-     "1234"]
-    [Just [" 0: abcd"],
-     Just [" 0: ** Failers"],
-     Nothing]
-,
-testRegex "\\D+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "",
-     "/\\P{Nd}+/8",
-     "11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["/\\P{Nd}+/8"],
-     Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "[\\D]+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "[\\P{Nd}]+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "[\\D\\P{Nd}]+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "\\pL" [ERROR]
-    ["a",
-     "A "]
-    [Just [" 0: a"],
-     Just [" 0: A"]]
-,
-testRegex "\\pL" [caseless]
-    ["a",
-     "A ",
-     "",
-     "/\\p{Lu}/8 ",
-     "A",
-     "aZ",
-     "** Failers",
-     "abc   "]
-    [Just [" 0: a"],
-     Just [" 0: A"],
-     Just ["/\\p{Lu}/8 "],
-     Just [" 0: A"],
-     Just [" 0: Z"],
-     Just [" 0: F"],
-     Nothing]
-,
-testRegex "\\p{Lu}" [caseless]
-    ["A",
-     "aZ",
-     "** Failers",
-     "abc   "]
-    [Just [" 0: A"],
-     Just [" 0: Z"],
-     Just [" 0: F"],
-     Nothing]
-,
-testRegex "\\p{Ll}" [ERROR]
-    ["a",
-     "Az",
-     "** Failers",
-     "ABC   "]
-    [Just [" 0: a"],
-     Just [" 0: z"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "\\p{Ll}" [ERROR]
-    ["a",
-     "Az",
-     "** Failers",
-     "ABC   "]
-    [Just [" 0: a"],
-     Just [" 0: z"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "^\\x{c0}$" [caseless]
-    ["\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"]]
-,
-testRegex "^\\x{e0}$" [caseless]
-    ["\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"]]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [ERROR]
-    ["A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "** Failers",
-     "a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}   ",
-     "A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}"]
-    [Just [" 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [caseless]
-    ["A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}   ",
-     "A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}"]
-    [Just [" 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: A\\x{391}\\x{1044f}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}"],
-     Just [" 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}"]]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless utf8"],
-     Just ["First char = 'A' (caseless)"],
-     Just ["No need char"]]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["First char = 'A'"],
-     Just ["Need char = 176"]]
-,
-testRegex "AB\\x{1fb0}" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: utf8"],
-     Just ["First char = 'A'"],
-     Just ["Need char = 176"]]
-,
-testRegex "AB\\x{1fb0}" [caseless]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless utf8"],
-     Just ["First char = 'A' (caseless)"],
-     Just ["Need char = 'B' (caseless)"]]
-,
-testRegex "\\x{391}+" [caseless]
-    ["\\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}"]
-    [Just [" 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}"]]
-,
-testRegex "\\x{391}{3,5}(.)" [caseless]
-    ["\\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"]
-    [Just [" 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"],
-     Just [" 1: X"]]
-,
-testRegex "\\x{391}{3,5}?(.)" [caseless]
-    ["\\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"]
-    [Just [" 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}"],
-     Just [" 1: \\x{3b1}"]]
-,
-testRegex "[\\x{391}\\x{ff3a}]" [caseless]
-    ["\\x{391}",
-     "\\x{ff3a}",
-     "\\x{3b1}",
-     "\\x{ff5a}   ",
-     "",
-     "/[\\x{c0}\\x{391}]/8i",
-     "\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{391}"],
-     Just [" 0: \\x{ff3a}"],
-     Just [" 0: \\x{3b1}"],
-     Just [" 0: \\x{ff5a}"],
-     Just ["/[\\x{c0}\\x{391}]/8i"],
-     Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"]]
-,
-testRegex "[\\x{105}-\\x{109}]" [ERROR]
-    ["\\x{104}",
-     "\\x{105}",
-     "\\x{109}  ",
-     "** Failers",
-     "\\x{100}",
-     "\\x{10a} ",
-     "",
-     "/[z-\\x{100}]/8iDZ ",
-     "Z",
-     "z",
-     "\\x{39c}",
-     "\\x{178}",
-     "|",
-     "\\x{80}",
-     "\\x{ff}",
-     "\\x{100}",
-     "\\x{101} ",
-     "** Failers",
-     "\\x{102}",
-     "Y",
-     "y           "]
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless utf8"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: \\x{104}"],
-     Just [" 0: \\x{105}"],
-     Just [" 0: \\x{109}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/[z-\\x{100}]/8iDZ "],
-     Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless utf8"],
-     Just ["No first char"],
-     Just ["No need char"],
-     Just [" 0: Z"],
-     Just [" 0: z"],
-     Just [" 0: \\x{39c}"],
-     Just [" 0: \\x{178}"],
-     Just [" 0: |"],
-     Just [" 0: \\x{80}"],
-     Just [" 0: \\x{ff}"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: \\x{101}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[z-\\x{100}]" [caseless]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: caseless utf8"],
-     Just ["No first char"],
-     Just ["No need char"]]
-,
-testRegex "^\\X" [ERROR]
-    ["A",
-     "A\\x{300}BC ",
-     "A\\x{300}\\x{301}\\x{302}BC ",
-     "*** Failers",
-     "\\x{300}  "]
-    [Just [" 0: A"],
-     Just [" 0: A\\x{300}"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}"],
-     Just [" 0: *"],
-     Nothing]
-,
-testRegex "^[\\X]" [ERROR]
-    ["X123",
-     "*** Failers",
-     "AXYZ"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(\\X*)C" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}"]]
-,
-testRegex "^(\\X*?)C" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}B"]]
-,
-testRegex "^(\\X*)(.)" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BCA"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 2: A"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}"],
-     Just [" 2: C"]]
-,
-testRegex "^(\\X*?)(.)" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A"],
-     Just [" 1: "],
-     Just [" 2: A"],
-     Just [" 0: A"],
-     Just [" 1: "],
-     Just [" 2: A"]]
-,
-testRegex "^\\X(.)" [ERROR]
-    ["*** Failers",
-     "A\\x{300}\\x{301}\\x{302}"]
-    [Just [" 0: **"],
-     Just [" 1: *"],
-     Nothing]
-,
-testRegex "^\\X{2,3}(.)" [ERROR]
-    ["A\\x{300}\\x{301}B\\x{300}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X",
-     "",
-     "/^\\X{2,3}?(.)/8",
-     "A\\x{300}\\x{301}B\\x{300}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X",
-     "",
-     "/^\\p{Han}+/8",
-     "\\x{2e81}\\x{3007}\\x{2f804}\\x{31a0}",
-     "** Failers",
-     "\\x{2e7f}  "]
-    [Just [" 0: A\\x{300}\\x{301}B\\x{300}X"],
-     Just [" 1: X"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 1: C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X"],
-     Just [" 1: X"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}D"],
-     Just [" 1: D"],
-     Just ["/^\\X{2,3}?(.)/8"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}X"],
-     Just [" 1: X"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 1: C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 1: C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 1: C"],
-     Just ["/^\\p{Han}+/8"],
-     Just [" 0: \\x{2e81}\\x{3007}\\x{2f804}"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{Katakana}+" [ERROR]
-    ["\\x{3105}",
-     "** Failers",
-     "\\x{30ff}  "]
-    [Just [" 0: \\x{3105}"],
-     Just [" 0: ** Failers"],
-     Nothing]
-,
-testRegex "^[\\p{Arabic}]" [ERROR]
-    ["\\x{06e9}",
-     "\\x{060b}",
-     "** Failers",
-     "X\\x{06e9}   "]
-    [Just [" 0: \\x{6e9}"],
-     Just [" 0: \\x{60b}"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{Yi}]" [ERROR]
-    ["\\x{2f800}",
-     "** Failers",
-     "\\x{a014}",
-     "\\x{a4c6}   ",
-     "",
-     "/^\\p{Any}X/8",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "X  ",
-     "",
-     "/^\\P{Any}X/8",
-     "** Failers",
-     "AX",
-     "",
-     "/^\\p{Any}?X/8",
-     "XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "ABXYZ   "]
-    [Just [" 0: \\x{2f800}"],
-     Just [" 0: *"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Any}X/8"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing,
-     Just ["/^\\P{Any}X/8"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Any}?X/8"],
-     Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{Any}?X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "ABXYZ   "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}+X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers",
-     "XYZ"]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{Any}+X" [ERROR]
-    ["** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "XYZ"]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}*X" [ERROR]
-    ["XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers"]
-    [Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing]
-,
-testRegex "^\\P{Any}*X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{Any}]X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "X  ",
-     "",
-     "/^[\\P{Any}]X/8",
-     "** Failers",
-     "AX",
-     "",
-     "/^[\\p{Any}]?X/8",
-     "XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "ABXYZ   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing,
-     Just ["/^[\\P{Any}]X/8"],
-     Nothing,
-     Nothing,
-     Just ["/^[\\p{Any}]?X/8"],
-     Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{Any}]?X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "ABXYZ   "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{Any}]+X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers",
-     "XYZ"]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{Any}]+X" [ERROR]
-    ["** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "XYZ"]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{Any}]*X" [ERROR]
-    ["XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers"]
-    [Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing]
-,
-testRegex "^[\\P{Any}]*X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}{3,5}?" [ERROR]
-    ["abcdefgh",
-     "\\x{1234}\\n\\r\\x{3456}xyz "]
-    [Just [" 0: abc"],
-     Just [" 0: \\x{1234}\\x{0a}\\x{0d}"]]
-,
-testRegex "^\\p{Any}{3,5}" [ERROR]
-    ["abcdefgh",
-     "\\x{1234}\\n\\r\\x{3456}xyz "]
-    [Just [" 0: abcde"],
-     Just [" 0: \\x{1234}\\x{0a}\\x{0d}\\x{3456}x"]]
-,
-testRegex "^\\P{Any}{3,5}?" [ERROR]
-    ["** Failers",
-     "abcdefgh",
-     "\\x{1234}\\n\\r\\x{3456}xyz "]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{L&}X" [ERROR]
-    ["AXY",
-     "aXY",
-     "\\x{1c5}XY",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: \\x{1c5}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{L&}]X" [ERROR]
-    ["AXY",
-     "aXY",
-     "\\x{1c5}XY",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: \\x{1c5}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{L&}+X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEXypqreX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{L&}]+X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEXypqreX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{L&}+?X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{L&}]+?X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{L&}X" [ERROR]
-    ["!XY",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "** Failers",
-     "\\x{1c5}XY",
-     "AXY      "]
-    [Just [" 0: !X"],
-     Just [" 0: \\x{1bb}X"],
-     Just [" 0: \\x{2b0}X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{L&}]X" [ERROR]
-    ["!XY",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "** Failers",
-     "\\x{1c5}XY",
-     "AXY      "]
-    [Just [" 0: !X"],
-     Just [" 0: \\x{1bb}X"],
-     Just [" 0: \\x{2b0}X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(\\p{Z}[^\\p{C}\\p{Z}]+)*$" []
-    ["\\xa0!"]
-    [Just [" 0: \\xa0!"],
-     Just [" 1: \\xa0!"]]
-,
-testRegex "^[\\pL](abc)(?1)" []
-    ["AabcabcYZ    "]
-    [Just [" 0: Aabcabc"],
-     Just [" 1: abc"]]
-,
-testRegex "([\\pL]=(abc))*X" []
-    ["L=abcX"]
-    [Just [" 0: L=abcX"],
-     Just [" 1: L=abc"],
-     Just [" 2: abc"]]
-,
-testRegex "ERROR" []
-    ["will match it only with UCP support, because without that it has no notion",
-     "of case for anything other than the ASCII letters. / "]
-    [Just ["will match it only with UCP support, because without that it has no notion"],
-     Just ["of case for anything other than the ASCII letters. / "]]
-,
-testRegex "((?i)[\\x{c0}])" [ERROR]
-    ["\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{c0}"],
-     Just [" 1: \\x{c0}"],
-     Just [" 0: \\x{e0}"],
-     Just [" 1: \\x{e0}"]]
-,
-testRegex "(?i:[\\x{c0}])" [ERROR]
-    ["\\x{c0}",
-     "\\x{e0} ",
-     "",
-     "/^\\p{Balinese}\\p{Cuneiform}\\p{Nko}\\p{Phags_Pa}\\p{Phoenician}/8",
-     "\\x{1b00}\\x{12000}\\x{7c0}\\x{a840}\\x{10900}"]
-    [Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"],
-     Just ["/^\\p{Balinese}\\p{Cuneiform}\\p{Nko}\\p{Phags_Pa}\\p{Phoenician}/8"],
-     Just [" 0: \\x{1b00}\\x{12000}\\x{7c0}\\x{a840}\\x{10900}"]]
-,
-testRegex "ERROR" []
-    ["same character differ. The first went wrong with heap fram storage; the 2nd",
-     "was broken in all cases./"]
-    [Just ["same character differ. The first went wrong with heap fram storage; the 2nd"],
-     Just ["was broken in all cases./"]]
-,
-testRegex "^\\x{023a}+?(\\x{0130}+)" [caseless]
-    ["\\x{023a}\\x{2c65}\\x{0130}",
-     "",
-     "/^\\x{023a}+([^X])/8i",
-     "\\x{023a}\\x{2c65}X"]
-    [Just [" 0: \\x{23a}\\x{2c65}\\x{130}"],
-     Just [" 1: \\x{130}"],
-     Just ["/^\\x{023a}+([^X])/8i"],
-     Just [" 0: \\x{23a}\\x{2c65}"],
-     Just [" 1: \\x{2c65}"]]
-,
-testRegex "Check property support in non-UTF-8 mode" []
-    ["",
-     "/\\p{L}{4}/",
-     "123abcdefg",
-     "123abc\\xc4\\xc5zz"]
-    [Just ["/\\p{L}{4}/"],
-     Just [" 0: abcd"],
-     Just [" 0: abc\\xc4"]]
-,
-testRegex "\\X{1,3}\\d" []
-    ["\\x8aBCD",
-     "",
-     "/\\X?\\d/",
-     "\\x8aBCD "]
-    [Nothing,
-     Just ["/\\X?\\d/"],
-     Nothing]
-,
-testRegex "\\P{L}?\\d" []
-    ["\\x8aBCD "]
-    [Nothing]
-,
-testRegex "[\\PPP\\x8a]{1,}\\x80" []
-    ["A\\x80"]
-    [Just [" 0: A\\x80"]]
-,
-testRegex "(?:[\\PPa*]*){8,}" []
-    []
-    []
-,
-testRegex "[\\P{Any}]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "[\\P{Any}\\E]" [ERROR]
-    []
-    [Just ["------------------------------------------------------------------"],
-     Just ["------------------------------------------------------------------"]]
-,
-testRegex "(\\P{Yi}+\\277)" []
-    []
-    []
-,
-testRegex "(\\P{Yi}+\\277)?" []
-    []
-    []
-,
-testRegex "(?<=\\P{Yi}{3}A)X" []
-    []
-    []
-,
-testRegex "\\p{Yi}+(\\P{Yi}+)(?1)" []
-    []
-    []
-,
-testRegex "(\\P{Yi}{2}\\277)?" []
-    []
-    []
-,
-testRegex "[\\P{Yi}A]" []
-    []
-    []
-,
-testRegex "[\\P{Yi}\\P{Yi}\\P{Yi}A]" []
-    []
-    []
-,
-testRegex "[^\\P{Yi}A]" []
-    []
-    []
-,
-testRegex "[^\\P{Yi}\\P{Yi}\\P{Yi}A]" []
-    []
-    []
-,
-testRegex "(\\P{Yi}*\\277)*" []
-    []
-    []
-,
-testRegex "(\\P{Yi}*?\\277)*" []
-    []
-    []
-,
-testRegex "(\\p{Yi}*+\\277)*" []
-    []
-    []
-,
-testRegex "(\\P{Yi}?\\277)*" []
-    []
-    []
-,
-testRegex "(\\P{Yi}??\\277)*" []
-    []
-    []
-,
-testRegex "(\\p{Yi}?+\\277)*" []
-    []
-    []
-,
-testRegex "(\\P{Yi}{0,3}\\277)*" []
-    []
-    []
-,
-testRegex "(\\P{Yi}{0,3}?\\277)*" []
-    []
-    []
-,
-testRegex "(\\p{Yi}{0,3}+\\277)*" []
-    []
-    []
-,
-testRegex " End of testinput6 " []
-    []
-    []
diff --git a/tests/testdata/regex7.tests b/tests/testdata/regex7.tests
deleted file mode 100644
--- a/tests/testdata/regex7.tests
+++ /dev/null
@@ -1,8167 +0,0 @@
-testRegex "abc" []
-    ["abc",
-     "",
-     "/ab*c/",
-     "abc",
-     "abbbbc",
-     "ac",
-     "",
-     "/ab+c/",
-     "abc",
-     "abbbbbbc",
-     "*** Failers ",
-     "ac",
-     "ab",
-     "",
-     "/a*/",
-     "a",
-     "aaaaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\F ",
-     "",
-     "/(a|abcd|african)/",
-     "a",
-     "abcd",
-     "african",
-     "",
-     "/^abc/",
-     "abcdef",
-     "*** Failers",
-     "xyzabc",
-     "xyz\\nabc    ",
-     "",
-     "/^abc/m",
-     "abcdef",
-     "xyz\\nabc    ",
-     "*** Failers",
-     "xyzabc",
-     "",
-     "/\\Aabc/",
-     "abcdef",
-     "*** Failers",
-     "xyzabc",
-     "xyz\\nabc    ",
-     "",
-     "/\\Aabc/m",
-     "abcdef",
-     "*** Failers",
-     "xyzabc",
-     "xyz\\nabc    ",
-     "",
-     "/\\Gabc/",
-     "abcdef",
-     "xyzabc\\>3",
-     "*** Failers",
-     "xyzabc    ",
-     "xyzabc\\>2 ",
-     "",
-     "/x\\dy\\Dz/",
-     "x9yzz",
-     "x0y+z",
-     "*** Failers",
-     "xyz",
-     "xxy0z     ",
-     "",
-     "/x\\sy\\Sz/",
-     "x yzz",
-     "x y+z",
-     "*** Failers",
-     "xyz",
-     "xxyyz",
-     "",
-     "/x\\wy\\Wz/",
-     "xxy+z",
-     "*** Failers",
-     "xxy0z",
-     "x+y+z         ",
-     "",
-     "/x.y/",
-     "x+y",
-     "x-y",
-     "*** Failers",
-     "x\\ny",
-     "",
-     "/x.y/s",
-     "x+y",
-     "x-y",
-     "x\\ny"]
-    [Just [" 0: abc"],
-     Just ["/ab*c/"],
-     Just [" 0: abc"],
-     Just [" 0: abbbbc"],
-     Just [" 0: ac"],
-     Just ["/ab+c/"],
-     Just [" 0: abc"],
-     Just [" 0: abbbbbbc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaa"],
-     Just [" 8: aaaaaaaaa"],
-     Just [" 9: aaaaaaaa"],
-     Just ["10: aaaaaaa"],
-     Just ["11: aaaaaa"],
-     Just ["12: aaaaa"],
-     Just ["13: aaaa"],
-     Just ["14: aaa"],
-     Just ["15: aa"],
-     Just ["16: a"],
-     Just ["17: "],
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaa"],
-     Just ["21: aaaaaaaaa"],
-     Just [" 0: "],
-     Just ["/(a|abcd|african)/"],
-     Just [" 0: a"],
-     Just [" 0: abcd"],
-     Just [" 1: a"],
-     Just [" 0: african"],
-     Just [" 1: a"],
-     Just ["/^abc/"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^abc/m"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Just ["/\\Aabc/"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\Aabc/m"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\Gabc/"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/x\\dy\\Dz/"],
-     Just [" 0: x9yzz"],
-     Just [" 0: x0y+z"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/x\\sy\\Sz/"],
-     Just [" 0: x yzz"],
-     Just [" 0: x y+z"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/x\\wy\\Wz/"],
-     Just [" 0: xxy+z"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/x.y/"],
-     Just [" 0: x+y"],
-     Just [" 0: x-y"],
-     Nothing,
-     Nothing,
-     Just ["/x.y/s"],
-     Just [" 0: x+y"],
-     Just [" 0: x-y"],
-     Just [" 0: x\\x0ay"]]
-,
-testRegex "(a.b(?s)c.d|x.y)p.q" []
-    ["a+bc+dp+q",
-     "a+bc\\ndp+q",
-     "x\\nyp+q ",
-     "*** Failers ",
-     "a\\nbc\\ndp+q",
-     "a+bc\\ndp\\nq",
-     "x\\nyp\\nq "]
-    [Just [" 0: a+bc+dp+q"],
-     Just [" 0: a+bc\\x0adp+q"],
-     Just [" 0: x\\x0ayp+q"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\d\\z" []
-    ["ba0",
-     "*** Failers",
-     "ba0\\n",
-     "ba0\\ncd   "]
-    [Just [" 0: a0"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\d\\z" [ERROR]
-    ["ba0",
-     "*** Failers",
-     "ba0\\n",
-     "ba0\\ncd   "]
-    [Just [" 0: a0"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\d\\Z" []
-    ["ba0",
-     "ba0\\n",
-     "*** Failers",
-     "ba0\\ncd   "]
-    [Just [" 0: a0"],
-     Just [" 0: a0"],
-     Nothing,
-     Nothing]
-,
-testRegex "a\\d\\Z" [ERROR]
-    ["ba0",
-     "ba0\\n",
-     "*** Failers",
-     "ba0\\ncd   "]
-    [Just [" 0: a0"],
-     Just [" 0: a0"],
-     Nothing,
-     Nothing]
-,
-testRegex "a\\d$" []
-    ["ba0",
-     "ba0\\n",
-     "*** Failers",
-     "ba0\\ncd   "]
-    [Just [" 0: a0"],
-     Just [" 0: a0"],
-     Nothing,
-     Nothing]
-,
-testRegex "a\\d$" [ERROR]
-    ["ba0",
-     "ba0\\n",
-     "ba0\\ncd   ",
-     "*** Failers"]
-    [Just [" 0: a0"],
-     Just [" 0: a0"],
-     Just [" 0: a0"],
-     Nothing]
-,
-testRegex "abc" [caseless]
-    ["abc",
-     "aBc",
-     "ABC",
-     "",
-     "/[^a]/",
-     "abcd",
-     "",
-     "/ab?\\w/",
-     "abz",
-     "abbz",
-     "azz  "]
-    [Just [" 0: abc"],
-     Just [" 0: aBc"],
-     Just [" 0: ABC"],
-     Just ["/[^a]/"],
-     Just [" 0: b"],
-     Just ["/ab?\\w/"],
-     Just [" 0: abz"],
-     Just [" 1: ab"],
-     Just [" 0: abb"],
-     Just [" 1: ab"],
-     Just [" 0: az"]]
-,
-testRegex "x{0,3}yz" []
-    ["ayzq",
-     "axyzq",
-     "axxyz",
-     "axxxyzq",
-     "axxxxyzq",
-     "*** Failers",
-     "ax",
-     "axx     ",
-     "",
-     "/x{3}yz/",
-     "axxxyzq",
-     "axxxxyzq",
-     "*** Failers",
-     "ax",
-     "axx     ",
-     "ayzq",
-     "axyzq",
-     "axxyz",
-     "",
-     "/x{2,3}yz/",
-     "axxyz",
-     "axxxyzq",
-     "axxxxyzq",
-     "*** Failers",
-     "ax",
-     "axx     ",
-     "ayzq",
-     "axyzq",
-     "",
-     "/[^a]+/",
-     "bac",
-     "bcdefax",
-     "*** Failers",
-     "aaaaa   "]
-    [Just [" 0: yz"],
-     Just [" 0: xyz"],
-     Just [" 0: xxyz"],
-     Just [" 0: xxxyz"],
-     Just [" 0: xxxyz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/x{3}yz/"],
-     Just [" 0: xxxyz"],
-     Just [" 0: xxxyz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/x{2,3}yz/"],
-     Just [" 0: xxyz"],
-     Just [" 0: xxxyz"],
-     Just [" 0: xxxyz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/[^a]+/"],
-     Just [" 0: b"],
-     Just [" 0: bcdef"],
-     Just [" 1: bcde"],
-     Just [" 2: bcd"],
-     Just [" 3: bc"],
-     Just [" 4: b"],
-     Just [" 0: *** F"],
-     Just [" 1: *** "],
-     Just [" 2: ***"],
-     Just [" 3: **"],
-     Just [" 4: *"],
-     Nothing]
-,
-testRegex "[^a]*" []
-    ["bac",
-     "bcdefax",
-     "*** Failers",
-     "aaaaa   ",
-     "",
-     "/[^a]{3,5}/",
-     "xyz",
-     "awxyza",
-     "abcdefa",
-     "abcdefghijk",
-     "*** Failers",
-     "axya",
-     "axa",
-     "aaaaa         "]
-    [Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: bcdef"],
-     Just [" 1: bcde"],
-     Just [" 2: bcd"],
-     Just [" 3: bc"],
-     Just [" 4: b"],
-     Just [" 5: "],
-     Just [" 0: *** F"],
-     Just [" 1: *** "],
-     Just [" 2: ***"],
-     Just [" 3: **"],
-     Just [" 4: *"],
-     Just [" 5: "],
-     Just [" 0: "],
-     Just ["/[^a]{3,5}/"],
-     Just [" 0: xyz"],
-     Just [" 0: wxyz"],
-     Just [" 1: wxy"],
-     Just [" 0: bcdef"],
-     Just [" 1: bcde"],
-     Just [" 2: bcd"],
-     Just [" 0: bcdef"],
-     Just [" 1: bcde"],
-     Just [" 2: bcd"],
-     Just [" 0: *** F"],
-     Just [" 1: *** "],
-     Just [" 2: ***"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\d*" []
-    ["1234b567",
-     "xyz",
-     "",
-     "/\\D*/",
-     "a1234b567",
-     "xyz",
-     "",
-     "/\\d+/",
-     "ab1234c56",
-     "*** Failers",
-     "xyz",
-     "",
-     "/\\D+/",
-     "ab123c56",
-     "*** Failers",
-     "789",
-     "",
-     "/\\d?A/",
-     "045ABC",
-     "ABC",
-     "*** Failers",
-     "XYZ",
-     "",
-     "/\\D?A/",
-     "ABC",
-     "BAC",
-     "9ABC             ",
-     "*** Failers"]
-    [Just [" 0: 1234"],
-     Just [" 1: 123"],
-     Just [" 2: 12"],
-     Just [" 3: 1"],
-     Just [" 4: "],
-     Just [" 0: "],
-     Just ["/\\D*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: xyz"],
-     Just [" 1: xy"],
-     Just [" 2: x"],
-     Just [" 3: "],
-     Just ["/\\d+/"],
-     Just [" 0: 1234"],
-     Just [" 1: 123"],
-     Just [" 2: 12"],
-     Just [" 3: 1"],
-     Nothing,
-     Nothing,
-     Just ["/\\D+/"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 0: *** Failers"],
-     Just [" 1: *** Failer"],
-     Just [" 2: *** Faile"],
-     Just [" 3: *** Fail"],
-     Just [" 4: *** Fai"],
-     Just [" 5: *** Fa"],
-     Just [" 6: *** F"],
-     Just [" 7: *** "],
-     Just [" 8: ***"],
-     Just [" 9: **"],
-     Just ["10: *"],
-     Nothing,
-     Just ["/\\d?A/"],
-     Just [" 0: 5A"],
-     Just [" 0: A"],
-     Nothing,
-     Nothing,
-     Just ["/\\D?A/"],
-     Just [" 0: A"],
-     Just [" 0: BA"],
-     Just [" 0: A"],
-     Nothing]
-,
-testRegex "a+" []
-    ["aaaa"]
-    [Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"]]
-,
-testRegex "^.*xyz" []
-    ["xyz",
-     "ggggggggxyz",
-     "",
-     "/^.+xyz/",
-     "abcdxyz",
-     "axyz",
-     "*** Failers",
-     "xyz",
-     "",
-     "/^.?xyz/",
-     "xyz",
-     "cxyz       "]
-    [Just [" 0: xyz"],
-     Just [" 0: ggggggggxyz"],
-     Just ["/^.+xyz/"],
-     Just [" 0: abcdxyz"],
-     Just [" 0: axyz"],
-     Nothing,
-     Nothing,
-     Just ["/^.?xyz/"],
-     Just [" 0: xyz"],
-     Just [" 0: cxyz"]]
-,
-testRegex "^\\d{2,3}X" []
-    ["12X",
-     "123X",
-     "*** Failers",
-     "X",
-     "1X",
-     "1234X     "]
-    [Just [" 0: 12X"],
-     Just [" 0: 123X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[abcd]\\d" []
-    ["a45",
-     "b93",
-     "c99z",
-     "d04",
-     "*** Failers",
-     "e45",
-     "abcd      ",
-     "abcd1234",
-     "1234  "]
-    [Just [" 0: a4"],
-     Just [" 0: b9"],
-     Just [" 0: c9"],
-     Just [" 0: d0"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[abcd]*\\d" []
-    ["a45",
-     "b93",
-     "c99z",
-     "d04",
-     "abcd1234",
-     "1234  ",
-     "*** Failers",
-     "e45",
-     "abcd      "]
-    [Just [" 0: a4"],
-     Just [" 0: b9"],
-     Just [" 0: c9"],
-     Just [" 0: d0"],
-     Just [" 0: abcd1"],
-     Just [" 0: 1"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[abcd]+\\d" []
-    ["a45",
-     "b93",
-     "c99z",
-     "d04",
-     "abcd1234",
-     "*** Failers",
-     "1234  ",
-     "e45",
-     "abcd      "]
-    [Just [" 0: a4"],
-     Just [" 0: b9"],
-     Just [" 0: c9"],
-     Just [" 0: d0"],
-     Just [" 0: abcd1"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^a+X" []
-    ["aX",
-     "aaX "]
-    [Just [" 0: aX"],
-     Just [" 0: aaX"]]
-,
-testRegex "^[abcd]?\\d" []
-    ["a45",
-     "b93",
-     "c99z",
-     "d04",
-     "1234  ",
-     "*** Failers",
-     "abcd1234",
-     "e45"]
-    [Just [" 0: a4"],
-     Just [" 0: b9"],
-     Just [" 0: c9"],
-     Just [" 0: d0"],
-     Just [" 0: 1"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[abcd]{2,3}\\d" []
-    ["ab45",
-     "bcd93",
-     "*** Failers",
-     "1234 ",
-     "a36 ",
-     "abcd1234",
-     "ee45"]
-    [Just [" 0: ab4"],
-     Just [" 0: bcd9"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(abc)*\\d" []
-    ["abc45",
-     "abcabcabc45",
-     "42xyz ",
-     "*** Failers"]
-    [Just [" 0: abc4"],
-     Just [" 0: abcabcabc4"],
-     Just [" 0: 4"],
-     Nothing]
-,
-testRegex "^(abc)+\\d" []
-    ["abc45",
-     "abcabcabc45",
-     "*** Failers",
-     "42xyz "]
-    [Just [" 0: abc4"],
-     Just [" 0: abcabcabc4"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(abc)?\\d" []
-    ["abc45",
-     "42xyz ",
-     "*** Failers",
-     "abcabcabc45"]
-    [Just [" 0: abc4"],
-     Just [" 0: 4"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(abc){2,3}\\d" []
-    ["abcabc45",
-     "abcabcabc45",
-     "*** Failers",
-     "abcabcabcabc45",
-     "abc45",
-     "42xyz "]
-    [Just [" 0: abcabc4"],
-     Just [" 0: abcabcabc4"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "1(abc|xyz)2(?1)3" []
-    ["1abc2abc3456",
-     "1abc2xyz3456 "]
-    [Just [" 0: 1abc2abc3"],
-     Just [" 0: 1abc2xyz3"]]
-,
-testRegex "^(a*\\w|ab)=(a*\\w|ab)" []
-    ["ab=ab"]
-    [Just [" 0: ab=ab"],
-     Just [" 1: ab=a"]]
-,
-testRegex "^(a*\\w|ab)=(?1)" []
-    ["ab=ab"]
-    [Just [" 0: ab=ab"]]
-,
-testRegex "^([^()]|\\((?1)*\\))*$" []
-    ["abc",
-     "a(b)c",
-     "a(b(c))d  ",
-     "*** Failers)",
-     "a(b(c)d  "]
-    [Just [" 0: abc"],
-     Just [" 0: a(b)c"],
-     Just [" 0: a(b(c))d"],
-     Nothing,
-     Nothing]
-,
-testRegex "^>abc>([^()]|\\((?1)*\\))*<xyz<$" []
-    [">abc>123<xyz<",
-     ">abc>1(2)3<xyz<",
-     ">abc>(1(2)3)<xyz<"]
-    [Just [" 0: >abc>123<xyz<"],
-     Just [" 0: >abc>1(2)3<xyz<"],
-     Just [" 0: >abc>(1(2)3)<xyz<"]]
-,
-testRegex "^(?>a*)\\d" []
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876",
-     "*** Failers ",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9"],
-     Nothing,
-     Nothing]
-,
-testRegex "< (?: (?(R) \\d++  | [^<>]*+) | (?R)) * >" [ERROR]
-    ["<>",
-     "<abcd>",
-     "<abc <123> hij>",
-     "<abc <def> hij>",
-     "<abc<>def> ",
-     "<abc<>      ",
-     "*** Failers",
-     "<abc"]
-    [Just [" 0: <>"],
-     Just [" 0: <abcd>"],
-     Just [" 0: <abc <123> hij>"],
-     Just [" 0: <def>"],
-     Just [" 0: <abc<>def>"],
-     Just [" 0: <>"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" [ERROR]
-    ["abc:                          ",
-     "12                             ",
-     "*** Failers                     ",
-     "123                       ",
-     "xyz                        ",
-     "",
-     "/^(?(?!abc)\\d\\d|\\w{3}:)$/      ",
-     "abc:                        ",
-     "12         ",
-     "*** Failers",
-     "123",
-     "xyz    "]
-    [Just [" 0: abc:"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^(?(?!abc)\\d\\d|\\w{3}:)$/      "],
-     Just [" 0: abc:"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(?=abc)\\w{5}:$" [ERROR]
-    ["abcde:                          ",
-     "*** Failers                     ",
-     "abc.. ",
-     "123                       ",
-     "vwxyz                        ",
-     "",
-     "/^(?!abc)\\d\\d$/      ",
-     "12         ",
-     "*** Failers",
-     "abcde:",
-     "abc..  ",
-     "123",
-     "vwxyz    "]
-    [Just [" 0: abcde:"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^(?!abc)\\d\\d$/      "],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=abc|xy)123" []
-    ["abc12345",
-     "wxy123z",
-     "*** Failers",
-     "123abc"]
-    [Just [" 0: 123"],
-     Just [" 0: 123"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<!abc|xy)123" []
-    ["123abc",
-     "mno123456 ",
-     "*** Failers",
-     "abc12345",
-     "wxy123z"]
-    [Just [" 0: 123"],
-     Just [" 0: 123"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "abc(?C1)xyz" []
-    ["abcxyz",
-     "123abcxyz999 "]
-    [Just ["--->abcxyz"],
-     Just [" 0: abcxyz"],
-     Just ["--->123abcxyz999"],
-     Just [" 0: abcxyz"]]
-,
-testRegex "(ab|cd){3,4}" [ERROR]
-    ["ababab",
-     "abcdabcd",
-     "abcdcdcdcdcd  "]
-    [Just ["--->ababab"],
-     Just [" +0 ^          (ab|cd){3,4}"],
-     Just [" +1 ^          a"],
-     Just [" +4 ^          c"],
-     Just [" +2 ^^         b"],
-     Just [" +3 ^ ^        |"],
-     Just [" +1 ^ ^        a"],
-     Just [" +4 ^ ^        c"],
-     Just [" +2 ^  ^       b"],
-     Just [" +3 ^   ^      |"],
-     Just [" +1 ^   ^      a"],
-     Just [" +4 ^   ^      c"],
-     Just [" +2 ^    ^     b"],
-     Just [" +3 ^     ^    |"],
-     Just ["+12 ^     ^    "],
-     Just [" +1 ^     ^    a"],
-     Just [" +4 ^     ^    c"],
-     Just [" 0: ababab"],
-     Just ["--->abcdabcd"],
-     Just [" +0 ^            (ab|cd){3,4}"],
-     Just [" +1 ^            a"],
-     Just [" +4 ^            c"],
-     Just [" +2 ^^           b"],
-     Just [" +3 ^ ^          |"],
-     Just [" +1 ^ ^          a"],
-     Just [" +4 ^ ^          c"],
-     Just [" +5 ^  ^         d"],
-     Just [" +6 ^   ^        )"],
-     Just [" +1 ^   ^        a"],
-     Just [" +4 ^   ^        c"],
-     Just [" +2 ^    ^       b"],
-     Just [" +3 ^     ^      |"],
-     Just ["+12 ^     ^      "],
-     Just [" +1 ^     ^      a"],
-     Just [" +4 ^     ^      c"],
-     Just [" +5 ^      ^     d"],
-     Just [" +6 ^       ^    )"],
-     Just ["+12 ^       ^    "],
-     Just [" 0: abcdabcd"],
-     Just [" 1: abcdab"],
-     Just ["--->abcdcdcdcdcd"],
-     Just [" +0 ^                (ab|cd){3,4}"],
-     Just [" +1 ^                a"],
-     Just [" +4 ^                c"],
-     Just [" +2 ^^               b"],
-     Just [" +3 ^ ^              |"],
-     Just [" +1 ^ ^              a"],
-     Just [" +4 ^ ^              c"],
-     Just [" +5 ^  ^             d"],
-     Just [" +6 ^   ^            )"],
-     Just [" +1 ^   ^            a"],
-     Just [" +4 ^   ^            c"],
-     Just [" +5 ^    ^           d"],
-     Just [" +6 ^     ^          )"],
-     Just ["+12 ^     ^          "],
-     Just [" +1 ^     ^          a"],
-     Just [" +4 ^     ^          c"],
-     Just [" +5 ^      ^         d"],
-     Just [" +6 ^       ^        )"],
-     Just ["+12 ^       ^        "],
-     Just [" 0: abcdcdcd"],
-     Just [" 1: abcdcd"]]
-,
-testRegex "^abc" []
-    ["abcdef",
-     "*** Failers",
-     "abcdef\\B  "]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(a*|xyz)" []
-    ["bcd",
-     "aaabcd",
-     "xyz",
-     "xyz\\N  ",
-     "*** Failers",
-     "bcd\\N   ",
-     "",
-     "/xyz$/",
-     "xyz",
-     "xyz\\n",
-     "*** Failers",
-     "xyz\\Z",
-     "xyz\\n\\Z    ",
-     "",
-     "/xyz$/m",
-     "xyz",
-     "xyz\\n ",
-     "abcxyz\\npqr ",
-     "abcxyz\\npqr\\Z ",
-     "xyz\\n\\Z    ",
-     "*** Failers",
-     "xyz\\Z"]
-    [Just [" 0: "],
-     Just [" 0: aaa"],
-     Just [" 1: aa"],
-     Just [" 2: a"],
-     Just [" 3: "],
-     Just [" 0: xyz"],
-     Just [" 1: "],
-     Just [" 0: xyz"],
-     Just [" 0: "],
-     Nothing,
-     Just ["/xyz$/"],
-     Just [" 0: xyz"],
-     Just [" 0: xyz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/xyz$/m"],
-     Just [" 0: xyz"],
-     Just [" 0: xyz"],
-     Just [" 0: xyz"],
-     Just [" 0: xyz"],
-     Just [" 0: xyz"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\Gabc" []
-    ["abcdef",
-     "defabcxyz\\>3 ",
-     "*** Failers ",
-     "defabcxyz"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^abcdef" []
-    ["ab\\P",
-     "abcde\\P",
-     "abcdef\\P",
-     "*** Failers",
-     "abx\\P    "]
-    [Just ["Partial match: ab"],
-     Just ["Partial match: abcde"],
-     Just [" 0: abcdef"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a{2,4}\\d+z" []
-    ["a\\P",
-     "aa\\P",
-     "aa2\\P ",
-     "aaa\\P",
-     "aaa23\\P ",
-     "aaaa12345\\P",
-     "aa0z\\P",
-     "aaaa4444444444444z\\P ",
-     "*** Failers",
-     "az\\P ",
-     "aaaaa\\P ",
-     "a56\\P "]
-    [Just ["Partial match: a"],
-     Just ["Partial match: aa"],
-     Just ["Partial match: aa2"],
-     Just ["Partial match: aaa"],
-     Just ["Partial match: aaa23"],
-     Just ["Partial match: aaaa12345"],
-     Just [" 0: aa0z"],
-     Just [" 0: aaaa4444444444444z"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abcdef" []
-    ["abc\\P",
-     "def\\R ",
-     "",
-     "/(?<=foo)bar/",
-     "xyzfo\\P ",
-     "foob\\P\\>2 ",
-     "foobar...\\R\\P\\>4 ",
-     "xyzfo\\P",
-     "foobar\\>2  ",
-     "*** Failers",
-     "xyzfo\\P",
-     "obar\\R   "]
-    [Just ["Partial match: abc"],
-     Just [" 0: def"],
-     Just ["/(?<=foo)bar/"],
-     Nothing,
-     Just ["Partial match: b"],
-     Just [" 0: ar"],
-     Nothing,
-     Just [" 0: bar"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(ab*(cd|ef))+X" []
-    ["adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\\P\\Z",
-     "lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\\P\\B\\Z",
-     "cdabbbbbbbb\\P\\R\\B\\Z",
-     "efabbbbbbbbbbbbbbbb\\P\\R\\B\\Z",
-     "bbbbbbbbbbbbcdXyasdfadf\\P\\R\\B\\Z    "]
-    [Nothing,
-     Just ["Partial match: abbbbbbcdaefabbbbbbbefa"],
-     Just ["Partial match: cdabbbbbbbb"],
-     Just ["Partial match: efabbbbbbbbbbbbbbbb"],
-     Just [" 0: bbbbbbbbbbbbcdX"]]
-,
-testRegex "(a|b)" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "** Failers",
-     "def  ",
-     "",
-     "/the quick brown fox/",
-     "the quick brown fox",
-     "The quick brown FOX",
-     "What do you know about the quick brown fox?",
-     "What do you know about THE QUICK BROWN FOX?"]
-    [Just ["Compiled regex written to testsavedregex"],
-     Just ["Study data written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
-     Just ["Study data loaded from testsavedregex"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Nothing,
-     Just ["/the quick brown fox/"],
-     Just [" 0: the quick brown fox"],
-     Nothing,
-     Just [" 0: the quick brown fox"],
-     Nothing]
-,
-testRegex "The quick brown fox" [caseless]
-    ["the quick brown fox",
-     "The quick brown FOX",
-     "What do you know about the quick brown fox?",
-     "What do you know about THE QUICK BROWN FOX?"]
-    [Just [" 0: the quick brown fox"],
-     Just [" 0: The quick brown FOX"],
-     Just [" 0: the quick brown fox"],
-     Just [" 0: THE QUICK BROWN FOX"]]
-,
-testRegex "abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz" []
-    ["abcd\\t\\n\\r\\f\\a\\e9;\\$\\\\?caxyz"]
-    [Just [" 0: abcd\\x09\\x0a\\x0d\\x0c\\x07\\x1b9;$\\?caxyz"]]
-,
-testRegex "a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" []
-    ["abxyzpqrrrabbxyyyypqAzz",
-     "abxyzpqrrrabbxyyyypqAzz",
-     "aabxyzpqrrrabbxyyyypqAzz",
-     "aaabxyzpqrrrabbxyyyypqAzz",
-     "aaaabxyzpqrrrabbxyyyypqAzz",
-     "abcxyzpqrrrabbxyyyypqAzz",
-     "aabcxyzpqrrrabbxyyyypqAzz",
-     "aaabcxyzpqrrrabbxyyyypAzz",
-     "aaabcxyzpqrrrabbxyyyypqAzz",
-     "aaabcxyzpqrrrabbxyyyypqqAzz",
-     "aaabcxyzpqrrrabbxyyyypqqqAzz",
-     "aaabcxyzpqrrrabbxyyyypqqqqAzz",
-     "aaabcxyzpqrrrabbxyyyypqqqqqAzz",
-     "aaabcxyzpqrrrabbxyyyypqqqqqqAzz",
-     "aaaabcxyzpqrrrabbxyyyypqAzz",
-     "abxyzzpqrrrabbxyyyypqAzz",
-     "aabxyzzzpqrrrabbxyyyypqAzz",
-     "aaabxyzzzzpqrrrabbxyyyypqAzz",
-     "aaaabxyzzzzpqrrrabbxyyyypqAzz",
-     "abcxyzzpqrrrabbxyyyypqAzz",
-     "aabcxyzzzpqrrrabbxyyyypqAzz",
-     "aaabcxyzzzzpqrrrabbxyyyypqAzz",
-     "aaaabcxyzzzzpqrrrabbxyyyypqAzz",
-     "aaaabcxyzzzzpqrrrabbbxyyyypqAzz",
-     "aaaabcxyzzzzpqrrrabbbxyyyyypqAzz",
-     "aaabcxyzpqrrrabbxyyyypABzz",
-     "aaabcxyzpqrrrabbxyyyypABBzz",
-     ">>>aaabxyzpqrrrabbxyyyypqAzz",
-     ">aaaabxyzpqrrrabbxyyyypqAzz",
-     ">>>>abcxyzpqrrrabbxyyyypqAzz",
-     "*** Failers",
-     "abxyzpqrrabbxyyyypqAzz",
-     "abxyzpqrrrrabbxyyyypqAzz",
-     "abxyzpqrrrabxyyyypqAzz",
-     "aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz",
-     "aaaabcxyzzzzpqrrrabbbxyyypqAzz",
-     "aaabcxyzpqrrrabbxyyyypqqqqqqqAzz"]
-    [Just [" 0: abxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: abxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aabxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaabxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaaabxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: abcxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aabcxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypqqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypqqqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypqqqqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz"],
-     Just [" 0: aaaabcxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: abxyzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aabxyzzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaabxyzzzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaaabxyzzzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: abcxyzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aabcxyzzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaabcxyzzzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz"],
-     Just [" 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypABzz"],
-     Just [" 0: aaabcxyzpqrrrabbxyyyypABBzz"],
-     Just [" 0: aaabxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: aaaabxyzpqrrrabbxyyyypqAzz"],
-     Just [" 0: abcxyzpqrrrabbxyyyypqAzz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(abc){1,2}zz" []
-    ["abczz",
-     "abcabczz",
-     "*** Failers",
-     "zz",
-     "abcabcabczz",
-     ">>abczz"]
-    [Just [" 0: abczz"],
-     Just [" 0: abcabczz"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(b+?|a){1,2}?c" []
-    ["bc",
-     "bbc",
-     "bbbc",
-     "bac",
-     "bbac",
-     "aac",
-     "abbbbbbbbbbbc",
-     "bbbbbbbbbbbac",
-     "*** Failers",
-     "aaac",
-     "abbbbbbbbbbbac"]
-    [Just [" 0: bc"],
-     Just [" 0: bbc"],
-     Just [" 0: bbbc"],
-     Just [" 0: bac"],
-     Just [" 0: bbac"],
-     Just [" 0: aac"],
-     Just [" 0: abbbbbbbbbbbc"],
-     Just [" 0: bbbbbbbbbbbac"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(b+|a){1,2}c" []
-    ["bc",
-     "bbc",
-     "bbbc",
-     "bac",
-     "bbac",
-     "aac",
-     "abbbbbbbbbbbc",
-     "bbbbbbbbbbbac",
-     "*** Failers",
-     "aaac",
-     "abbbbbbbbbbbac"]
-    [Just [" 0: bc"],
-     Just [" 0: bbc"],
-     Just [" 0: bbbc"],
-     Just [" 0: bac"],
-     Just [" 0: bbac"],
-     Just [" 0: aac"],
-     Just [" 0: abbbbbbbbbbbc"],
-     Just [" 0: bbbbbbbbbbbac"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(b+|a){1,2}?bc" []
-    ["bbc"]
-    [Just [" 0: bbc"]]
-,
-testRegex "^(b*|ba){1,2}?bc" []
-    ["babc",
-     "bbabc",
-     "bababc",
-     "*** Failers",
-     "bababbc",
-     "babababc"]
-    [Just [" 0: babc"],
-     Just [" 0: bbabc"],
-     Just [" 0: bababc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(ba|b*){1,2}?bc" []
-    ["babc",
-     "bbabc",
-     "bababc",
-     "*** Failers",
-     "bababbc",
-     "babababc"]
-    [Just [" 0: babc"],
-     Just [" 0: bbabc"],
-     Just [" 0: bababc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\ca\\cA\\c[\\c{\\c:" []
-    ["\\x01\\x01\\e;z"]
-    [Just [" 0: \\x01\\x01\\x1b;z"]]
-,
-testRegex "^[ab\\]cde]" []
-    ["athing",
-     "bthing",
-     "]thing",
-     "cthing",
-     "dthing",
-     "ething",
-     "*** Failers",
-     "fthing",
-     "[thing",
-     "\\\\thing"]
-    [Just [" 0: a"],
-     Just [" 0: b"],
-     Just [" 0: ]"],
-     Just [" 0: c"],
-     Just [" 0: d"],
-     Just [" 0: e"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[]cde]" []
-    ["]thing",
-     "cthing",
-     "dthing",
-     "ething",
-     "*** Failers",
-     "athing",
-     "fthing"]
-    [Just [" 0: ]"],
-     Just [" 0: c"],
-     Just [" 0: d"],
-     Just [" 0: e"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[^ab\\]cde]" []
-    ["fthing",
-     "[thing",
-     "\\\\thing",
-     "*** Failers",
-     "athing",
-     "bthing",
-     "]thing",
-     "cthing",
-     "dthing",
-     "ething"]
-    [Just [" 0: f"],
-     Just [" 0: ["],
-     Just [" 0: \\"],
-     Just [" 0: *"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[^]cde]" []
-    ["athing",
-     "fthing",
-     "*** Failers",
-     "]thing",
-     "cthing",
-     "dthing",
-     "ething"]
-    [Just [" 0: a"],
-     Just [" 0: f"],
-     Just [" 0: *"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\\129" []
-    ["\129"]
-    [Just [" 0: \\x81"]]
-,
-testRegex "^\255" []
-    ["\255"]
-    [Just [" 0: \\xff"]]
-,
-testRegex "^[0-9]+$" []
-    ["0",
-     "1",
-     "2",
-     "3",
-     "4",
-     "5",
-     "6",
-     "7",
-     "8",
-     "9",
-     "10",
-     "100",
-     "*** Failers",
-     "abc"]
-    [Just [" 0: 0"],
-     Just [" 0: 1"],
-     Just [" 0: 2"],
-     Just [" 0: 3"],
-     Just [" 0: 4"],
-     Just [" 0: 5"],
-     Just [" 0: 6"],
-     Just [" 0: 7"],
-     Just [" 0: 8"],
-     Just [" 0: 9"],
-     Just [" 0: 10"],
-     Just [" 0: 100"],
-     Nothing,
-     Nothing]
-,
-testRegex "^.*nter" []
-    ["enter",
-     "inter",
-     "uponter"]
-    [Just [" 0: enter"],
-     Just [" 0: inter"],
-     Just [" 0: uponter"]]
-,
-testRegex "^xxx[0-9]+$" []
-    ["xxx0",
-     "xxx1234",
-     "*** Failers",
-     "xxx"]
-    [Just [" 0: xxx0"],
-     Just [" 0: xxx1234"],
-     Nothing,
-     Nothing]
-,
-testRegex "^.+[0-9][0-9][0-9]$" []
-    ["x123",
-     "xx123",
-     "123456",
-     "*** Failers",
-     "123",
-     "x1234"]
-    [Just [" 0: x123"],
-     Just [" 0: xx123"],
-     Just [" 0: 123456"],
-     Nothing,
-     Nothing,
-     Just [" 0: x1234"]]
-,
-testRegex "^.+?[0-9][0-9][0-9]$" []
-    ["x123",
-     "xx123",
-     "123456",
-     "*** Failers",
-     "123",
-     "x1234"]
-    [Just [" 0: x123"],
-     Just [" 0: xx123"],
-     Just [" 0: 123456"],
-     Nothing,
-     Nothing,
-     Just [" 0: x1234"]]
-,
-testRegex "^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" []
-    ["abc!pqr=apquxz.ixr.zzz.ac.uk",
-     "*** Failers",
-     "!pqr=apquxz.ixr.zzz.ac.uk",
-     "abc!=apquxz.ixr.zzz.ac.uk",
-     "abc!pqr=apquxz:ixr.zzz.ac.uk",
-     "abc!pqr=apquxz.ixr.zzz.ac.ukk"]
-    [Just [" 0: abc!pqr=apquxz.ixr.zzz.ac.uk"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex ":" []
-    ["Well, we need a colon: somewhere",
-     "*** Fail if we don't"]
-    [Just [" 0: :"],
-     Nothing]
-,
-testRegex "([\\da-f:]+)$" [caseless]
-    ["0abc",
-     "abc",
-     "fed",
-     "E",
-     "::",
-     "5f03:12C0::932e",
-     "fed def",
-     "Any old stuff",
-     "*** Failers",
-     "0zzz",
-     "gzzz",
-     "fed\\x20",
-     "Any old rubbish"]
-    [Just [" 0: 0abc"],
-     Just [" 0: abc"],
-     Just [" 0: fed"],
-     Just [" 0: E"],
-     Just [" 0: ::"],
-     Just [" 0: 5f03:12C0::932e"],
-     Just [" 0: def"],
-     Just [" 0: ff"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" []
-    [".1.2.3",
-     "A.12.123.0",
-     "*** Failers",
-     ".1.2.3333",
-     "1.2.3",
-     "1234.2.3"]
-    [Just [" 0: .1.2.3"],
-     Just [" 0: A.12.123.0"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" []
-    ["1 IN SOA non-sp1 non-sp2(",
-     "1    IN    SOA    non-sp1    non-sp2   (",
-     "*** Failers",
-     "1IN SOA non-sp1 non-sp2("]
-    [Just [" 0: 1 IN SOA non-sp1 non-sp2("],
-     Just [" 0: 1    IN    SOA    non-sp1    non-sp2   ("],
-     Nothing,
-     Nothing]
-,
-testRegex "^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" []
-    ["a.",
-     "Z.",
-     "2.",
-     "ab-c.pq-r.",
-     "sxk.zzz.ac.uk.",
-     "x-.y-.",
-     "*** Failers",
-     "-abc.peq."]
-    [Just [" 0: a."],
-     Just [" 0: Z."],
-     Just [" 0: 2."],
-     Just [" 0: ab-c.pq-r."],
-     Just [" 0: sxk.zzz.ac.uk."],
-     Just [" 0: x-.y-."],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" []
-    ["*.a",
-     "*.b0-a",
-     "*.c3-b.c",
-     "*.c-a.b-c",
-     "*** Failers",
-     "*.0",
-     "*.a-",
-     "*.a-b.c-",
-     "*.c-a.0-c"]
-    [Just [" 0: *.a"],
-     Just [" 0: *.b0-a"],
-     Just [" 0: *.c3-b.c"],
-     Just [" 0: *.c-a.b-c"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(?=ab(de))(abd)(e)" []
-    ["abde"]
-    [Just [" 0: abde"]]
-,
-testRegex "^(?!(ab)de|x)(abd)(f)" []
-    ["abdf"]
-    [Just [" 0: abdf"]]
-,
-testRegex "^(?=(ab(cd)))(ab)" []
-    ["abcd"]
-    [Just [" 0: ab"]]
-,
-testRegex "^[\\da-f](\\.[\\da-f])*$" [caseless]
-    ["a.b.c.d",
-     "A.B.C.D",
-     "a.b.c.1.2.3.C"]
-    [Just [" 0: a.b.c.d"],
-     Just [" 0: A.B.C.D"],
-     Just [" 0: a.b.c.1.2.3.C"]]
-,
-testRegex "^\\\".*\\\"\\s*(;.*)?$" []
-    ["\\\"1234\\\"",
-     "\\\"abcd\\\" ;",
-     "\\\"\\\" ; rhubarb",
-     "*** Failers",
-     "\\\"1234\\\" : things"]
-    [Just [" 0: \"1234\""],
-     Just [" 0: \"abcd\" ;"],
-     Just [" 0: \"\" ; rhubarb"],
-     Nothing,
-     Nothing]
-,
-testRegex "^$" []
-    ["\\",
-     "*** Failers"]
-    [Just [" 0: "],
-     Nothing]
-,
-testRegex "   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" [ERROR]
-    ["ab c",
-     "*** Failers",
-     "abc",
-     "ab cde"]
-    [Just [" 0: ab c"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?x)   ^    a   (?# begins with a)  b\\sc (?# then b c) $ (?# then end)" []
-    ["ab c",
-     "*** Failers",
-     "abc",
-     "ab cde"]
-    [Just [" 0: ab c"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^   a\\ b[c ]d       $" [ERROR]
-    ["a bcd",
-     "a b d",
-     "*** Failers",
-     "abcd",
-     "ab d"]
-    [Just [" 0: a bcd"],
-     Just [" 0: a b d"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$" []
-    ["abcdefhijklm"]
-    [Just [" 0: abcdefhijklm"]]
-,
-testRegex "^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$" []
-    ["abcdefhijklm"]
-    [Just [" 0: abcdefhijklm"]]
-,
-testRegex "^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]" []
-    ["a+ Z0+\\x08\\n\\x1d\\x12"]
-    [Just [" 0: a+ Z0+\\x08\\x0a\\x1d\\x12"]]
-,
-testRegex "^[.^$|()*+?{,}]+" []
-    [".^\\$(*+)|{?,?}"]
-    [Just [" 0: .^$(*+)|{?,?}"],
-     Just [" 1: .^$(*+)|{?,?"],
-     Just [" 2: .^$(*+)|{?,"],
-     Just [" 3: .^$(*+)|{?"],
-     Just [" 4: .^$(*+)|{"],
-     Just [" 5: .^$(*+)|"],
-     Just [" 6: .^$(*+)"],
-     Just [" 7: .^$(*+"],
-     Just [" 8: .^$(*"],
-     Just [" 9: .^$("],
-     Just ["10: .^$"],
-     Just ["11: .^"],
-     Just ["12: ."]]
-,
-testRegex "^a*\\w" []
-    ["z",
-     "az",
-     "aaaz",
-     "a",
-     "aa",
-     "aaaa",
-     "a+",
-     "aa+"]
-    [Just [" 0: z"],
-     Just [" 0: az"],
-     Just [" 1: a"],
-     Just [" 0: aaaz"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"]]
-,
-testRegex "^a*?\\w" []
-    ["z",
-     "az",
-     "aaaz",
-     "a",
-     "aa",
-     "aaaa",
-     "a+",
-     "aa+"]
-    [Just [" 0: z"],
-     Just [" 0: az"],
-     Just [" 1: a"],
-     Just [" 0: aaaz"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"]]
-,
-testRegex "^a+\\w" []
-    ["az",
-     "aaaz",
-     "aa",
-     "aaaa",
-     "aa+"]
-    [Just [" 0: az"],
-     Just [" 0: aaaz"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 0: aa"],
-     Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 0: aa"]]
-,
-testRegex "^a+?\\w" []
-    ["az",
-     "aaaz",
-     "aa",
-     "aaaa",
-     "aa+"]
-    [Just [" 0: az"],
-     Just [" 0: aaaz"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 0: aa"],
-     Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 0: aa"]]
-,
-testRegex "^\\d{8}\\w{2,}" []
-    ["1234567890",
-     "12345678ab",
-     "12345678__",
-     "*** Failers",
-     "1234567"]
-    [Just [" 0: 1234567890"],
-     Just [" 0: 12345678ab"],
-     Just [" 0: 12345678__"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[aeiou\\d]{4,5}$" []
-    ["uoie",
-     "1234",
-     "12345",
-     "aaaaa",
-     "*** Failers",
-     "123456"]
-    [Just [" 0: uoie"],
-     Just [" 0: 1234"],
-     Just [" 0: 12345"],
-     Just [" 0: aaaaa"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[aeiou\\d]{4,5}?" []
-    ["uoie",
-     "1234",
-     "12345",
-     "aaaaa",
-     "123456"]
-    [Just [" 0: uoie"],
-     Just [" 0: 1234"],
-     Just [" 0: 12345"],
-     Just [" 1: 1234"],
-     Just [" 0: aaaaa"],
-     Just [" 1: aaaa"],
-     Just [" 0: 12345"],
-     Just [" 1: 1234"]]
-,
-testRegex "^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]" []
-    ["From abcd  Mon Sep 01 12:33:02 1997"]
-    [Just [" 0: From abcd  Mon Sep 01 12:33"]]
-,
-testRegex "^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" []
-    ["From abcd  Mon Sep 01 12:33:02 1997",
-     "From abcd  Mon Sep  1 12:33:02 1997",
-     "*** Failers",
-     "From abcd  Sep 01 12:33:02 1997"]
-    [Just [" 0: From abcd  Mon Sep 01 12:33"],
-     Just [" 0: From abcd  Mon Sep  1 12:33"],
-     Nothing,
-     Nothing]
-,
-testRegex "^12.34" [ERROR]
-    ["12\\n34",
-     "12\\r34"]
-    [Just [" 0: 12\\x0a34"],
-     Just [" 0: 12\\x0d34"]]
-,
-testRegex "\\w+(?=\\t)" []
-    ["the quick brown\\t fox"]
-    [Just [" 0: brown"]]
-,
-testRegex "foo(?!bar)(.*)" []
-    ["foobar is foolish see?"]
-    [Just [" 0: foolish see?"],
-     Just [" 1: foolish see"],
-     Just [" 2: foolish se"],
-     Just [" 3: foolish s"],
-     Just [" 4: foolish "],
-     Just [" 5: foolish"],
-     Just [" 6: foolis"],
-     Just [" 7: fooli"],
-     Just [" 8: fool"],
-     Just [" 9: foo"]]
-,
-testRegex "(?:(?!foo)...|^.{0,2})bar(.*)" []
-    ["foobar crowbar etc",
-     "barrel",
-     "2barrel",
-     "A barrel"]
-    [Just [" 0: rowbar etc"],
-     Just [" 1: rowbar et"],
-     Just [" 2: rowbar e"],
-     Just [" 3: rowbar "],
-     Just [" 4: rowbar"],
-     Just [" 0: barrel"],
-     Just [" 1: barre"],
-     Just [" 2: barr"],
-     Just [" 3: bar"],
-     Just [" 0: 2barrel"],
-     Just [" 1: 2barre"],
-     Just [" 2: 2barr"],
-     Just [" 3: 2bar"],
-     Just [" 0: A barrel"],
-     Just [" 1: A barre"],
-     Just [" 2: A barr"],
-     Just [" 3: A bar"]]
-,
-testRegex "^(\\D*)(?=\\d)(?!123)" []
-    ["abc456",
-     "*** Failers",
-     "abc123"]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "ERROR" []
-    ["inside)/",
-     "1234"]
-    [Just [" 0: 1234"]]
-,
-testRegex "ERROR" []
-    ["/x",
-     "1234"]
-    [Just [" 0: 1234"]]
-,
-testRegex "ERROR" []
-    ["abcd/x",
-     "abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "^abcd#rhubarb" [ERROR]
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "(?!^)abc" []
-    ["the abc",
-     "*** Failers",
-     "abc"]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?=^)abc" []
-    ["abc",
-     "*** Failers",
-     "the abc"]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[ab]{1,3}(ab*|b)" []
-    ["aabbbbb"]
-    [Just [" 0: aabbbbb"],
-     Just [" 1: aabbbb"],
-     Just [" 2: aabbb"],
-     Just [" 3: aabb"],
-     Just [" 4: aab"],
-     Just [" 5: aa"]]
-,
-testRegex "^[ab]{1,3}?(ab*|b)" []
-    ["aabbbbb"]
-    [Just [" 0: aabbbbb"],
-     Just [" 1: aabbbb"],
-     Just [" 2: aabbb"],
-     Just [" 3: aabb"],
-     Just [" 4: aab"],
-     Just [" 5: aa"]]
-,
-testRegex "^[ab]{1,3}?(ab*?|b)" []
-    ["aabbbbb"]
-    [Just [" 0: aabbbbb"],
-     Just [" 1: aabbbb"],
-     Just [" 2: aabbb"],
-     Just [" 3: aabb"],
-     Just [" 4: aab"],
-     Just [" 5: aa"]]
-,
-testRegex "^[ab]{1,3}(ab*?|b)" []
-    ["aabbbbb"]
-    [Just [" 0: aabbbbb"],
-     Just [" 1: aabbbb"],
-     Just [" 2: aabbb"],
-     Just [" 3: aabb"],
-     Just [" 4: aab"],
-     Just [" 5: aa"]]
-,
-testRegex "ERROR" []
-    ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*                          # optional leading comment",
-     "(?:    (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\" (?:                      # opening quote...",
-     "[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote",
-     "|                     #    or",
-     "\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)",
-     ")* \"  # closing quote",
-     ")                    # initial word",
-     "(?:  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  \\.  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*   (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\" (?:                      # opening quote...",
-     "[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote",
-     "|                     #    or",
-     "\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)",
-     ")* \"  # closing quote",
-     ")  )* # further okay, if led by a period",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  @  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*    (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                           # initial subdomain",
-     "(?:                                  #",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  \\.                        # if led by a period...",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*   (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                     #   ...further okay",
-     ")*",
-     "# address",
-     "|                     #  or",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\" (?:                      # opening quote...",
-     "[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote",
-     "|                     #    or",
-     "\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)",
-     ")* \"  # closing quote",
-     ")             # one word, optionally followed by....",
-     "(?:",
-     "[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or...",
-     "\\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)       |  # comments, or..."]
-    [Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*                          # optional leading comment"],
-     Just ["(?:    (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\" (?:                      # opening quote..."],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote"],
-     Just ["|                     #    or"],
-     Just ["\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)"],
-     Just [")* \"  # closing quote"],
-     Just [")                    # initial word"],
-     Just ["(?:  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  \\.  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*   (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\" (?:                      # opening quote..."],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote"],
-     Just ["|                     #    or"],
-     Just ["\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)"],
-     Just [")* \"  # closing quote"],
-     Just [")  )* # further okay, if led by a period"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  @  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*    (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                           # initial subdomain"],
-     Just ["(?:                                  #"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  \\.                        # if led by a period..."],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*   (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                     #   ...further okay"],
-     Just [")*"],
-     Just ["# address"],
-     Just ["|                     #  or"],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\" (?:                      # opening quote..."],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote"],
-     Just ["|                     #    or"],
-     Just ["\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)"],
-     Just [")* \"  # closing quote"],
-     Just [")             # one word, optionally followed by...."],
-     Just ["(?:"],
-     Just ["[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037]  |  # atom and space parts, or..."],
-     Just ["\\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)       |  # comments, or..."]]
-,
-testRegex "ERROR" []
-    ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote",
-     "|                     #    or",
-     "\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)",
-     ")* \"  # closing quote",
-     "# quoted strings",
-     ")*",
-     "<  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*                     # leading <",
-     "(?:  @  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*    (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                           # initial subdomain",
-     "(?:                                  #",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  \\.                        # if led by a period...",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*   (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                     #   ...further okay",
-     ")*"]
-    [Just ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote"],
-     Just ["|                     #    or"],
-     Just ["\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)"],
-     Just [")* \"  # closing quote"],
-     Just ["# quoted strings"],
-     Just [")*"],
-     Just ["<  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*                     # leading <"],
-     Just ["(?:  @  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*    (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                           # initial subdomain"],
-     Just ["(?:                                  #"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  \\.                        # if led by a period..."],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*   (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                     #   ...further okay"],
-     Just [")*"]]
-,
-testRegex "ERROR" []
-    ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  ,  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  @  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*    (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                           # initial subdomain",
-     "(?:                                  #",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  \\.                        # if led by a period...",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*   (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                     #   ...further okay",
-     ")*",
-     ")* # further okay, if led by comma",
-     ":                                # closing colon",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  )? #       optional route",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\" (?:                      # opening quote...",
-     "[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote",
-     "|                     #    or",
-     "\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)",
-     ")* \"  # closing quote",
-     ")                    # initial word",
-     "(?:  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  \\.  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*   (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\" (?:                      # opening quote...",
-     "[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote",
-     "|                     #    or",
-     "\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)",
-     ")* \"  # closing quote",
-     ")  )* # further okay, if led by a period",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  @  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*    (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                           # initial subdomain",
-     "(?:                                  #",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  \\.                        # if led by a period...",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*   (?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|   \\[                         # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff",
-     "\\]                        #           ]",
-     ")                     #   ...further okay",
-     ")*",
-     "#       address spec",
-     "(?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*  > #                  trailing >",
-     "# name and address",
-     ")  (?: [\\040\\t] |  \\(",
-     "(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*",
-     "\\)  )*                       # optional trailing comment",
-     "/x",
-     "Alan Other <user\\@dom.ain>",
-     "<user\\@dom.ain>",
-     "user\\@dom.ain",
-     "\\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)",
-     "A. Other <user.1234\\@dom.ain> (a comment)",
-     "\\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay",
-     "A missing angle <user\\@some.where",
-     "*** Failers",
-     "The quick brown fox"]
-    [Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  ,  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  @  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*    (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                           # initial subdomain"],
-     Just ["(?:                                  #"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  \\.                        # if led by a period..."],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*   (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                     #   ...further okay"],
-     Just [")*"],
-     Just [")* # further okay, if led by comma"],
-     Just [":                                # closing colon"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  )? #       optional route"],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\" (?:                      # opening quote..."],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote"],
-     Just ["|                     #    or"],
-     Just ["\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)"],
-     Just [")* \"  # closing quote"],
-     Just [")                    # initial word"],
-     Just ["(?:  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  \\.  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*   (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\" (?:                      # opening quote..."],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"]                #   Anything except backslash and quote"],
-     Just ["|                     #    or"],
-     Just ["\\\\ [^\\x80-\\xff]           #   Escaped something (something != CR)"],
-     Just [")* \"  # closing quote"],
-     Just [")  )* # further okay, if led by a period"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  @  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*    (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                           # initial subdomain"],
-     Just ["(?:                                  #"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  \\.                        # if led by a period..."],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*   (?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|   \\[                         # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*    #    stuff"],
-     Just ["\\]                        #           ]"],
-     Just [")                     #   ...further okay"],
-     Just [")*"],
-     Just ["#       address spec"],
-     Just ["(?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*  > #                  trailing >"],
-     Just ["# name and address"],
-     Just [")  (?: [\\040\\t] |  \\("],
-     Just ["(?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  |  \\( (?:  [^\\\\\\x80-\\xff\\n\\015()]  |  \\\\ [^\\x80-\\xff]  )* \\)  )*"],
-     Just ["\\)  )*                       # optional trailing comment"],
-     Just ["/x"],
-     Just [" 0: Alan Other <user@dom.ain>"],
-     Just [" 0: user@dom.ain"],
-     Just [" 1: user@dom"],
-     Just [" 0: user@dom.ain"],
-     Just [" 1: user@dom"],
-     Just [" 0: \"A. Other\" <user.1234@dom.ain> (a comment)"],
-     Just [" 1: \"A. Other\" <user.1234@dom.ain> "],
-     Just [" 2: \"A. Other\" <user.1234@dom.ain>"],
-     Just [" 0:  Other <user.1234@dom.ain> (a comment)"],
-     Just [" 1:  Other <user.1234@dom.ain> "],
-     Just [" 2:  Other <user.1234@dom.ain>"],
-     Just [" 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay"],
-     Just [" 1: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re"],
-     Just [" 0: user@some.where"],
-     Just [" 1: user@some"],
-     Nothing,
-     Nothing]
-,
-testRegex "ERROR" []
-    ["(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional leading comment",
-     "(?:",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "# Atom",
-     "|                       #  or",
-     "\"                                     # \"",
-     "[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal",
-     "(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*",
-     "\"                                     #        \"",
-     "# Quoted string",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "\\.",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "# Atom",
-     "|                       #  or",
-     "\"                                     # \"",
-     "[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal",
-     "(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*",
-     "\"                                     #        \"",
-     "# Quoted string",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# additional words",
-     ")*",
-     "@",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     "(?:",
-     "\\.",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     ")*",
-     "# address",
-     "|                             #  or",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "# Atom",
-     "|                       #  or",
-     "\"                                     # \"",
-     "[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal",
-     "(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*",
-     "\"                                     #        \"",
-     "# Quoted string",
-     ")",
-     "# leading word",
-     "[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *               # \"normal\" atoms and or spaces",
-     "(?:",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "|",
-     "\"                                     # \"",
-     "[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal",
-     "(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*",
-     "\"                                     #        \"",
-     ") # \"special\" comment or quoted string",
-     "[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *            #  more \"normal\"",
-     ")*",
-     "<",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# <",
-     "(?:",
-     "@",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     "(?:",
-     "\\.",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     ")*",
-     "(?: ,",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "@",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     "(?:",
-     "\\.",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     ")*",
-     ")*  # additional domains",
-     ":",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     ")?     #       optional route",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "# Atom",
-     "|                       #  or",
-     "\"                                     # \"",
-     "[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal",
-     "(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*",
-     "\"                                     #        \"",
-     "# Quoted string",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "\\.",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "# Atom",
-     "|                       #  or",
-     "\"                                     # \"",
-     "[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal",
-     "(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*",
-     "\"                                     #        \"",
-     "# Quoted string",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# additional words",
-     ")*",
-     "@",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     "(?:",
-     "\\.",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "(?:",
-     "[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters...",
-     "(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
-     "|",
-     "\\[                            # [",
-     "(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff",
-     "\\]                           #           ]",
-     ")",
-     "[\\040\\t]*                    # Nab whitespace.",
-     "(?:",
-     "\\(                              #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*",
-     "(?:                                 #       (",
-     "(?:  \\\\ [^\\x80-\\xff]  |",
-     "\\(                            #  (",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*",
-     "(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*",
-     "\\)                           #                       )",
-     ")    #         special",
-     "[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*",
-     ")*                                  #            )*",
-     "\\)                             #                )",
-     "[\\040\\t]* )*    # If comment found, allow more spaces.",
-     "# optional trailing comments",
-     ")*",
-     "#       address spec",
-     ">                    #                 >",
-     "# name and address",
-     ")",
-     "/x",
-     "Alan Other <user\\@dom.ain>",
-     "<user\\@dom.ain>",
-     "user\\@dom.ain",
-     "\\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)",
-     "A. Other <user.1234\\@dom.ain> (a comment)",
-     "\\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay",
-     "A missing angle <user\\@some.where",
-     "*** Failers",
-     "The quick brown fox"]
-    [Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional leading comment"],
-     Just ["(?:"],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["# Atom"],
-     Just ["|                       #  or"],
-     Just ["\"                                     # \""],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*"],
-     Just ["\"                                     #        \""],
-     Just ["# Quoted string"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["\\."],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["# Atom"],
-     Just ["|                       #  or"],
-     Just ["\"                                     # \""],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*"],
-     Just ["\"                                     #        \""],
-     Just ["# Quoted string"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# additional words"],
-     Just [")*"],
-     Just ["@"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just ["(?:"],
-     Just ["\\."],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just [")*"],
-     Just ["# address"],
-     Just ["|                             #  or"],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["# Atom"],
-     Just ["|                       #  or"],
-     Just ["\"                                     # \""],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*"],
-     Just ["\"                                     #        \""],
-     Just ["# Quoted string"],
-     Just [")"],
-     Just ["# leading word"],
-     Just ["[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *               # \"normal\" atoms and or spaces"],
-     Just ["(?:"],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["|"],
-     Just ["\"                                     # \""],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*"],
-     Just ["\"                                     #        \""],
-     Just [") # \"special\" comment or quoted string"],
-     Just ["[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] *            #  more \"normal\""],
-     Just [")*"],
-     Just ["<"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# <"],
-     Just ["(?:"],
-     Just ["@"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just ["(?:"],
-     Just ["\\."],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just [")*"],
-     Just ["(?: ,"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["@"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just ["(?:"],
-     Just ["\\."],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just [")*"],
-     Just [")*  # additional domains"],
-     Just [":"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just [")?     #       optional route"],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["# Atom"],
-     Just ["|                       #  or"],
-     Just ["\"                                     # \""],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*"],
-     Just ["\"                                     #        \""],
-     Just ["# Quoted string"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["\\."],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["# Atom"],
-     Just ["|                       #  or"],
-     Just ["\"                                     # \""],
-     Just ["[^\\\\\\x80-\\xff\\n\\015\"] *                            #   normal"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  [^\\\\\\x80-\\xff\\n\\015\"] * )*        #   ( special normal* )*"],
-     Just ["\"                                     #        \""],
-     Just ["# Quoted string"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# additional words"],
-     Just [")*"],
-     Just ["@"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just ["(?:"],
-     Just ["\\."],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["(?:"],
-     Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+    # some number of atom characters..."],
-     Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
-     Just ["|"],
-     Just ["\\[                            # ["],
-     Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] |  \\\\ [^\\x80-\\xff]  )*     #    stuff"],
-     Just ["\\]                           #           ]"],
-     Just [")"],
-     Just ["[\\040\\t]*                    # Nab whitespace."],
-     Just ["(?:"],
-     Just ["\\(                              #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                             #     normal*"],
-     Just ["(?:                                 #       ("],
-     Just ["(?:  \\\\ [^\\x80-\\xff]  |"],
-     Just ["\\(                            #  ("],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                            #     normal*"],
-     Just ["(?:  \\\\ [^\\x80-\\xff]   [^\\\\\\x80-\\xff\\n\\015()] * )*        #     (special normal*)*"],
-     Just ["\\)                           #                       )"],
-     Just [")    #         special"],
-     Just ["[^\\\\\\x80-\\xff\\n\\015()] *                         #         normal*"],
-     Just [")*                                  #            )*"],
-     Just ["\\)                             #                )"],
-     Just ["[\\040\\t]* )*    # If comment found, allow more spaces."],
-     Just ["# optional trailing comments"],
-     Just [")*"],
-     Just ["#       address spec"],
-     Just [">                    #                 >"],
-     Just ["# name and address"],
-     Just [")"],
-     Just ["/x"],
-     Just [" 0: Alan Other <user@dom.ain>"],
-     Just [" 0: user@dom.ain"],
-     Just [" 1: user@dom"],
-     Just [" 0: user@dom.ain"],
-     Just [" 1: user@dom"],
-     Just [" 0: \"A. Other\" <user.1234@dom.ain>"],
-     Just [" 0:  Other <user.1234@dom.ain>"],
-     Just [" 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay"],
-     Just [" 1: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re"],
-     Just [" 0: user@some.where"],
-     Just [" 1: user@some"],
-     Nothing,
-     Nothing]
-,
-testRegex "abc\\0def\\00pqr\\000xyz\\0000AB" []
-    ["abc\\0def\\00pqr\\000xyz\\0000AB",
-     "abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE"]
-    [Just [" 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB"],
-     Just [" 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB"]]
-,
-testRegex "abc\\x0def\\x00pqr\\x000xyz\\x0000AB" []
-    ["abc\\x0def\\x00pqr\\x000xyz\\x0000AB",
-     "abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE"]
-    [Just [" 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB"],
-     Just [" 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB"]]
-,
-testRegex "^[\\000-\\037]" []
-    ["\\0A",
-     "\\01B",
-     "\\037C"]
-    [Just [" 0: \\x00"],
-     Just [" 0: \\x01"],
-     Just [" 0: \\x1f"]]
-,
-testRegex "\\0*" []
-    ["\\0\\0\\0\\0"]
-    [Just [" 0: \\x00\\x00\\x00\\x00"],
-     Just [" 1: \\x00\\x00\\x00"],
-     Just [" 2: \\x00\\x00"],
-     Just [" 3: \\x00"],
-     Just [" 4: "]]
-,
-testRegex "A\\x0{2,3}Z" []
-    ["The A\\x0\\x0Z",
-     "An A\\0\\x0\\0Z",
-     "*** Failers",
-     "A\\0Z",
-     "A\\0\\x0\\0\\x0Z"]
-    [Just [" 0: A\\x00\\x00Z"],
-     Just [" 0: A\\x00\\x00\\x00Z"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\s" []
-    ["\\040abc",
-     "\\x0cabc",
-     "\\nabc",
-     "\\rabc",
-     "\\tabc",
-     "*** Failers",
-     "abc"]
-    [Just [" 0:  "],
-     Just [" 0: \\x0c"],
-     Just [" 0: \\x0a"],
-     Just [" 0: \\x0d"],
-     Just [" 0: \\x09"],
-     Nothing,
-     Nothing]
-,
-testRegex "ERROR" []
-    ["c/x",
-     "abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "ab{1,3}bc" []
-    ["abbbbc",
-     "abbbc",
-     "abbc",
-     "*** Failers",
-     "abc",
-     "abbbbbc"]
-    [Just [" 0: abbbbc"],
-     Just [" 0: abbbc"],
-     Just [" 0: abbc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" []
-    ["track1.title:TBlah blah blah"]
-    [Just [" 0: track1.title:TBlah blah blah"],
-     Just [" 1: track1.title:TBlah blah bla"],
-     Just [" 2: track1.title:TBlah blah bl"],
-     Just [" 3: track1.title:TBlah blah b"],
-     Just [" 4: track1.title:TBlah blah "],
-     Just [" 5: track1.title:TBlah blah"],
-     Just [" 6: track1.title:TBlah bla"],
-     Just [" 7: track1.title:TBlah bl"],
-     Just [" 8: track1.title:TBlah b"],
-     Just [" 9: track1.title:TBlah "],
-     Just ["10: track1.title:TBlah"],
-     Just ["11: track1.title:TBla"],
-     Just ["12: track1.title:TBl"],
-     Just ["13: track1.title:TB"],
-     Just ["14: track1.title:T"]]
-,
-testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" [caseless]
-    ["track1.title:TBlah blah blah"]
-    [Just [" 0: track1.title:TBlah blah blah"],
-     Just [" 1: track1.title:TBlah blah bla"],
-     Just [" 2: track1.title:TBlah blah bl"],
-     Just [" 3: track1.title:TBlah blah b"],
-     Just [" 4: track1.title:TBlah blah "],
-     Just [" 5: track1.title:TBlah blah"],
-     Just [" 6: track1.title:TBlah bla"],
-     Just [" 7: track1.title:TBlah bl"],
-     Just [" 8: track1.title:TBlah b"],
-     Just [" 9: track1.title:TBlah "],
-     Just ["10: track1.title:TBlah"],
-     Just ["11: track1.title:TBla"],
-     Just ["12: track1.title:TBl"],
-     Just ["13: track1.title:TB"],
-     Just ["14: track1.title:T"]]
-,
-testRegex "([^.]*)\\.([^:]*):[t ]+(.*)" [caseless]
-    ["track1.title:TBlah blah blah"]
-    [Just [" 0: track1.title:TBlah blah blah"],
-     Just [" 1: track1.title:TBlah blah bla"],
-     Just [" 2: track1.title:TBlah blah bl"],
-     Just [" 3: track1.title:TBlah blah b"],
-     Just [" 4: track1.title:TBlah blah "],
-     Just [" 5: track1.title:TBlah blah"],
-     Just [" 6: track1.title:TBlah bla"],
-     Just [" 7: track1.title:TBlah bl"],
-     Just [" 8: track1.title:TBlah b"],
-     Just [" 9: track1.title:TBlah "],
-     Just ["10: track1.title:TBlah"],
-     Just ["11: track1.title:TBla"],
-     Just ["12: track1.title:TBl"],
-     Just ["13: track1.title:TB"],
-     Just ["14: track1.title:T"]]
-,
-testRegex "^[W-c]+$" []
-    ["WXY_^abc",
-     "*** Failers",
-     "wxy"]
-    [Just [" 0: WXY_^abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[W-c]+$" [caseless]
-    ["WXY_^abc",
-     "wxy_^ABC"]
-    [Just [" 0: WXY_^abc"],
-     Just [" 0: wxy_^ABC"]]
-,
-testRegex "^[\\x3f-\\x5F]+$" [caseless]
-    ["WXY_^abc",
-     "wxy_^ABC"]
-    [Just [" 0: WXY_^abc"],
-     Just [" 0: wxy_^ABC"]]
-,
-testRegex "^abc$" [ERROR]
-    ["abc",
-     "qqq\\nabc",
-     "abc\\nzzz",
-     "qqq\\nabc\\nzzz"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"]]
-,
-testRegex "^abc$" []
-    ["abc",
-     "*** Failers",
-     "qqq\\nabc",
-     "abc\\nzzz",
-     "qqq\\nabc\\nzzz"]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\Aabc\\Z" [ERROR]
-    ["abc",
-     "abc\\n ",
-     "*** Failers",
-     "qqq\\nabc",
-     "abc\\nzzz",
-     "qqq\\nabc\\nzzz",
-     "",
-     "/\\A(.)*\\Z/s",
-     "abc\\ndef"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\A(.)*\\Z/s"],
-     Just [" 0: abc\\x0adef"]]
-,
-testRegex "\\A(.)*\\Z" [ERROR]
-    ["*** Failers",
-     "abc\\ndef"]
-    [Just [" 0: *** Failers"],
-     Nothing]
-,
-testRegex "(?:b)|(?::+)" []
-    ["b::c",
-     "c::b"]
-    [Just [" 0: b"],
-     Just [" 0: ::"],
-     Just [" 1: :"]]
-,
-testRegex "[-az]+" []
-    ["az-",
-     "*** Failers",
-     "b"]
-    [Just [" 0: az-"],
-     Just [" 1: az"],
-     Just [" 2: a"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "[az-]+" []
-    ["za-",
-     "*** Failers",
-     "b"]
-    [Just [" 0: za-"],
-     Just [" 1: za"],
-     Just [" 2: z"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "[a\\-z]+" []
-    ["a-z",
-     "*** Failers",
-     "b"]
-    [Just [" 0: a-z"],
-     Just [" 1: a-"],
-     Just [" 2: a"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "[a-z]+" []
-    ["abcdxyz"]
-    [Just [" 0: abcdxyz"],
-     Just [" 1: abcdxy"],
-     Just [" 2: abcdx"],
-     Just [" 3: abcd"],
-     Just [" 4: abc"],
-     Just [" 5: ab"],
-     Just [" 6: a"]]
-,
-testRegex "[\\d-]+" []
-    ["12-34",
-     "*** Failers",
-     "aaa"]
-    [Just [" 0: 12-34"],
-     Just [" 1: 12-3"],
-     Just [" 2: 12-"],
-     Just [" 3: 12"],
-     Just [" 4: 1"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\d-z]+" []
-    ["12-34z",
-     "*** Failers",
-     "aaa"]
-    [Just [" 0: 12-34z"],
-     Just [" 1: 12-34"],
-     Just [" 2: 12-3"],
-     Just [" 3: 12-"],
-     Just [" 4: 12"],
-     Just [" 5: 1"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\x5c" []
-    ["\\\\"]
-    [Just [" 0: \\"]]
-,
-testRegex "\\x20Z" []
-    ["the Zoo",
-     "*** Failers",
-     "Zulu"]
-    [Just [" 0:  Z"],
-     Nothing,
-     Nothing]
-,
-testRegex "ab{3cd" []
-    ["ab{3cd"]
-    [Just [" 0: ab{3cd"]]
-,
-testRegex "ab{3,cd" []
-    ["ab{3,cd"]
-    [Just [" 0: ab{3,cd"]]
-,
-testRegex "ab{3,4a}cd" []
-    ["ab{3,4a}cd"]
-    [Just [" 0: ab{3,4a}cd"]]
-,
-testRegex "{4,5a}bc" []
-    ["{4,5a}bc"]
-    [Just [" 0: {4,5a}bc"]]
-,
-testRegex "^a.b" [ERROR]
-    ["a\\rb",
-     "*** Failers",
-     "a\\nb"]
-    [Just [" 0: a\\x0db"],
-     Nothing,
-     Nothing]
-,
-testRegex "abc$" []
-    ["abc",
-     "abc\\n",
-     "*** Failers",
-     "abc\\ndef"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "(abc)\\123" []
-    ["abc\\x53"]
-    [Just [" 0: abcS"]]
-,
-testRegex "(abc)\\223" []
-    ["abc\\x93"]
-    [Just [" 0: abc\\x93"]]
-,
-testRegex "(abc)\\323" []
-    ["abc\\xd3"]
-    [Just [" 0: abc\\xd3"]]
-,
-testRegex "(abc)\\100" []
-    ["abc\\x40",
-     "abc\\100"]
-    [Just [" 0: abc@"],
-     Just [" 0: abc@"]]
-,
-testRegex "(abc)\\1000" []
-    ["abc\\x400",
-     "abc\\x40\\x30",
-     "abc\\1000",
-     "abc\\100\\x30",
-     "abc\\100\\060",
-     "abc\\100\\60"]
-    [Just [" 0: abc@0"],
-     Just [" 0: abc@0"],
-     Just [" 0: abc@0"],
-     Just [" 0: abc@0"],
-     Just [" 0: abc@0"],
-     Just [" 0: abc@0"]]
-,
-testRegex "abc\\81" []
-    ["abc\\081",
-     "abc\\0\\x38\\x31"]
-    [Just [" 0: abc\\x0081"],
-     Just [" 0: abc\\x0081"]]
-,
-testRegex "abc\\91" []
-    ["abc\\091",
-     "abc\\0\\x39\\x31"]
-    [Just [" 0: abc\\x0091"],
-     Just [" 0: abc\\x0091"]]
-,
-testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123" []
-    ["abcdefghijk\\12S"]
-    [Just [" 0: abcdefghijk\\x0aS"]]
-,
-testRegex "ab\\idef" []
-    ["abidef"]
-    [Just [" 0: abidef"]]
-,
-testRegex "a{0}bc" []
-    ["bc"]
-    [Just [" 0: bc"]]
-,
-testRegex "(a|(bc)){0,0}?xyz" []
-    ["xyz"]
-    [Just [" 0: xyz"]]
-,
-testRegex "abc[\\10]de" []
-    ["abc\\010de"]
-    [Just [" 0: abc\\x08de"]]
-,
-testRegex "abc[\\1]de" []
-    ["abc\\1de"]
-    [Just [" 0: abc\\x01de"]]
-,
-testRegex "(abc)[\\1]de" []
-    ["abc\\1de"]
-    [Just [" 0: abc\\x01de"]]
-,
-testRegex "(?s)a.b" []
-    ["a\\nb"]
-    [Just [" 0: a\\x0ab"]]
-,
-testRegex "^([^a])([^\\b])([^c]*)([^d]{3,4})" []
-    ["baNOTccccd",
-     "baNOTcccd",
-     "baNOTccd",
-     "bacccd",
-     "*** Failers",
-     "anything",
-     "b\\bc   ",
-     "baccd"]
-    [Just [" 0: baNOTcccc"],
-     Just [" 1: baNOTccc"],
-     Just [" 2: baNOTcc"],
-     Just [" 3: baNOTc"],
-     Just [" 4: baNOT"],
-     Just [" 0: baNOTccc"],
-     Just [" 1: baNOTcc"],
-     Just [" 2: baNOTc"],
-     Just [" 3: baNOT"],
-     Just [" 0: baNOTcc"],
-     Just [" 1: baNOTc"],
-     Just [" 2: baNOT"],
-     Just [" 0: baccc"],
-     Just [" 0: *** Failers"],
-     Just [" 1: *** Failer"],
-     Just [" 2: *** Faile"],
-     Just [" 3: *** Fail"],
-     Just [" 4: *** Fai"],
-     Just [" 5: *** Fa"],
-     Just [" 6: *** F"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^a]" []
-    ["Abc",
-     "",
-     "/[^a]/i",
-     "Abc "]
-    [Just [" 0: A"],
-     Just ["/[^a]/i"],
-     Just [" 0: b"]]
-,
-testRegex "[^a]+" []
-    ["AAAaAbc",
-     "",
-     "/[^a]+/i",
-     "AAAaAbc "]
-    [Just [" 0: AAA"],
-     Just [" 1: AA"],
-     Just [" 2: A"],
-     Just ["/[^a]+/i"],
-     Just [" 0: bc"],
-     Just [" 1: b"]]
-,
-testRegex "[^a]+" []
-    ["bbb\\nccc",
-     "",
-     "/[^k]$/",
-     "abc",
-     "*** Failers",
-     "abk   ",
-     "",
-     "/[^k]{2,3}$/",
-     "abc",
-     "kbc",
-     "kabc ",
-     "*** Failers",
-     "abk",
-     "akb",
-     "akk "]
-    [Just [" 0: bbb\\x0accc"],
-     Just [" 1: bbb\\x0acc"],
-     Just [" 2: bbb\\x0ac"],
-     Just [" 3: bbb\\x0a"],
-     Just [" 4: bbb"],
-     Just [" 5: bb"],
-     Just [" 6: b"],
-     Just ["/[^k]$/"],
-     Just [" 0: c"],
-     Just [" 0: s"],
-     Nothing,
-     Just ["/[^k]{2,3}$/"],
-     Just [" 0: abc"],
-     Just [" 0: bc"],
-     Just [" 0: abc"],
-     Just [" 0: ers"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\d{8,}\\@.+[^k]$" []
-    ["12345678\\@a.b.c.d",
-     "123456789\\@x.y.z",
-     "*** Failers",
-     "12345678\\@x.y.uk",
-     "1234567\\@a.b.c.d       "]
-    [Just [" 0: 12345678@a.b.c.d"],
-     Just [" 0: 123456789@x.y.z"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^a]" []
-    ["aaaabcd",
-     "aaAabcd "]
-    [Just [" 0: b"],
-     Just [" 0: A"]]
-,
-testRegex "[^a]" [caseless]
-    ["aaaabcd",
-     "aaAabcd "]
-    [Just [" 0: b"],
-     Just [" 0: b"]]
-,
-testRegex "[^az]" []
-    ["aaaabcd",
-     "aaAabcd "]
-    [Just [" 0: b"],
-     Just [" 0: A"]]
-,
-testRegex "[^az]" [caseless]
-    ["aaaabcd",
-     "aaAabcd "]
-    [Just [" 0: b"],
-     Just [" 0: b"]]
-,
-testRegex "\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377" []
-    ["\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377"]
-    [Just [" \\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377"],
-     Just [" 0: \\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff"]]
-,
-testRegex "P[^*]TAIRE[^*]{1,6}?LL" []
-    ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
-    [Just [" 0: PSTAIREISLL"]]
-,
-testRegex "P[^*]TAIRE[^*]{1,}?LL" []
-    ["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
-    [Just [" 0: PSTAIREISLL"]]
-,
-testRegex "(\\.\\d\\d[1-9]?)\\d+" []
-    ["1.230003938",
-     "1.875000282   ",
-     "1.235  ",
-     "",
-     "/(\\.\\d\\d((?=0)|\\d(?=\\d)))/",
-     "1.230003938      ",
-     "1.875000282",
-     "*** Failers ",
-     "1.235 ",
-     "",
-     "/a(?)b/",
-     "ab ",
-     "",
-     "/\\b(foo)\\s+(\\w+)/i",
-     "Food is on the foo table",
-     "",
-     "/foo(.*)bar/",
-     "The food is under the bar in the barn.",
-     "",
-     "/foo(.*?)bar/  ",
-     "The food is under the bar in the barn."]
-    [Just [" 0: .230003938"],
-     Just [" 1: .23000393"],
-     Just [" 2: .2300039"],
-     Just [" 3: .230003"],
-     Just [" 4: .23000"],
-     Just [" 5: .2300"],
-     Just [" 6: .230"],
-     Just [" 0: .875000282"],
-     Just [" 1: .87500028"],
-     Just [" 2: .8750002"],
-     Just [" 3: .875000"],
-     Just [" 4: .87500"],
-     Just [" 5: .8750"],
-     Just [" 6: .875"],
-     Just [" 0: .235"],
-     Just ["/(\\.\\d\\d((?=0)|\\d(?=\\d)))/"],
-     Just [" 0: .230"],
-     Just [" 1: .23"],
-     Just [" 0: .875"],
-     Nothing,
-     Nothing,
-     Just ["/a(?)b/"],
-     Just [" 0: ab"],
-     Just ["/\\b(foo)\\s+(\\w+)/i"],
-     Just [" 0: foo table"],
-     Just [" 1: foo tabl"],
-     Just [" 2: foo tab"],
-     Just [" 3: foo ta"],
-     Just [" 4: foo t"],
-     Just ["/foo(.*)bar/"],
-     Just [" 0: food is under the bar in the bar"],
-     Just [" 1: food is under the bar"],
-     Just ["/foo(.*?)bar/  "],
-     Just [" 0: food is under the bar in the bar"],
-     Just [" 1: food is under the bar"]]
-,
-testRegex "(.*)(\\d*)" []
-    ["I have 2 numbers: 53147",
-     "",
-     "/(.*)(\\d+)/",
-     "I have 2 numbers: 53147",
-     "",
-     "/(.*?)(\\d*)/",
-     "I have 2 numbers: 53147"]
-    [Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: I have 2 numbers: 53147"],
-     Just [" 1: I have 2 numbers: 5314"],
-     Just [" 2: I have 2 numbers: 531"],
-     Just [" 3: I have 2 numbers: 53"],
-     Just [" 4: I have 2 numbers: 5"],
-     Just [" 5: I have 2 numbers: "],
-     Just [" 6: I have 2 numbers:"],
-     Just [" 7: I have 2 numbers"],
-     Just [" 8: I have 2 number"],
-     Just [" 9: I have 2 numbe"],
-     Just ["10: I have 2 numb"],
-     Just ["11: I have 2 num"],
-     Just ["12: I have 2 nu"],
-     Just ["13: I have 2 n"],
-     Just ["14: I have 2 "],
-     Just ["15: I have 2"],
-     Just ["16: I have "],
-     Just ["17: I have"],
-     Just ["18: I hav"],
-     Just ["19: I ha"],
-     Just ["20: I h"],
-     Just ["21: I "],
-     Just ["/(.*)(\\d+)/"],
-     Just [" 0: I have 2 numbers: 53147"],
-     Just [" 1: I have 2 numbers: 5314"],
-     Just [" 2: I have 2 numbers: 531"],
-     Just [" 3: I have 2 numbers: 53"],
-     Just [" 4: I have 2 numbers: 5"],
-     Just [" 5: I have 2"],
-     Just ["/(.*?)(\\d*)/"],
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: I have 2 numbers: 53147"],
-     Just [" 1: I have 2 numbers: 5314"],
-     Just [" 2: I have 2 numbers: 531"],
-     Just [" 3: I have 2 numbers: 53"],
-     Just [" 4: I have 2 numbers: 5"],
-     Just [" 5: I have 2 numbers: "],
-     Just [" 6: I have 2 numbers:"],
-     Just [" 7: I have 2 numbers"],
-     Just [" 8: I have 2 number"],
-     Just [" 9: I have 2 numbe"],
-     Just ["10: I have 2 numb"],
-     Just ["11: I have 2 num"],
-     Just ["12: I have 2 nu"],
-     Just ["13: I have 2 n"],
-     Just ["14: I have 2 "],
-     Just ["15: I have 2"],
-     Just ["16: I have "],
-     Just ["17: I have"],
-     Just ["18: I hav"],
-     Just ["19: I ha"],
-     Just ["20: I h"],
-     Just ["21: I "]]
-,
-testRegex "(.*?)(\\d+)" []
-    ["I have 2 numbers: 53147"]
-    [Just [" 0: I have 2 numbers: 53147"],
-     Just [" 1: I have 2 numbers: 5314"],
-     Just [" 2: I have 2 numbers: 531"],
-     Just [" 3: I have 2 numbers: 53"],
-     Just [" 4: I have 2 numbers: 5"],
-     Just [" 5: I have 2"]]
-,
-testRegex "(.*)(\\d+)$" []
-    ["I have 2 numbers: 53147"]
-    [Just [" 0: I have 2 numbers: 53147"]]
-,
-testRegex "(.*?)(\\d+)$" []
-    ["I have 2 numbers: 53147"]
-    [Just [" 0: I have 2 numbers: 53147"]]
-,
-testRegex "(.*)\\b(\\d+)$" []
-    ["I have 2 numbers: 53147"]
-    [Just [" 0: I have 2 numbers: 53147"]]
-,
-testRegex "(.*\\D)(\\d+)$" []
-    ["I have 2 numbers: 53147"]
-    [Just [" 0: I have 2 numbers: 53147"]]
-,
-testRegex "^\\D*(?!123)" []
-    ["ABC123",
-     "",
-     "/^(\\D*)(?=\\d)(?!123)/",
-     "ABC445",
-     "*** Failers",
-     "ABC123",
-     "",
-     "/^[W-]46]/",
-     "W46]789 ",
-     "-46]789",
-     "*** Failers",
-     "Wall",
-     "Zebra",
-     "42",
-     "[abcd] ",
-     "]abcd[",
-     "",
-     "/^[W-\\]46]/",
-     "W46]789 ",
-     "Wall",
-     "Zebra",
-     "Xylophone  ",
-     "42",
-     "[abcd] ",
-     "]abcd[",
-     "\\\\backslash ",
-     "*** Failers",
-     "-46]789",
-     "well",
-     "",
-     "/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/",
-     "01/01/2000"]
-    [Just [" 0: AB"],
-     Just [" 1: A"],
-     Just [" 2: "],
-     Just ["/^(\\D*)(?=\\d)(?!123)/"],
-     Just [" 0: ABC"],
-     Nothing,
-     Nothing,
-     Just ["/^[W-]46]/"],
-     Just [" 0: W46]"],
-     Just [" 0: -46]"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^[W-\\]46]/"],
-     Just [" 0: W"],
-     Just [" 0: W"],
-     Just [" 0: Z"],
-     Just [" 0: X"],
-     Just [" 0: 4"],
-     Just [" 0: ["],
-     Just [" 0: ]"],
-     Just [" 0: \\"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/"],
-     Just [" 0: 01/01/2000"]]
-,
-testRegex "word (?:[a-zA-Z0-9]+ ){0,10}otherword" []
-    ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
-     "word cat dog elephant mussel cow horse canary baboon snake shark"]
-    [Just [" 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
-     Nothing]
-,
-testRegex "word (?:[a-zA-Z0-9]+ ){0,300}otherword" []
-    ["word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
-    [Nothing]
-,
-testRegex "^(a){0,0}" []
-    ["bcd",
-     "abc",
-     "aab     "]
-    [Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "]]
-,
-testRegex "^(a){0,1}" []
-    ["bcd",
-     "abc",
-     "aab  "]
-    [Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: a"],
-     Just [" 1: "]]
-,
-testRegex "^(a){0,2}" []
-    ["bcd",
-     "abc",
-     "aab  "]
-    [Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 2: "]]
-,
-testRegex "^(a){0,3}" []
-    ["bcd",
-     "abc",
-     "aab",
-     "aaa   "]
-    [Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 2: "],
-     Just [" 0: aaa"],
-     Just [" 1: aa"],
-     Just [" 2: a"],
-     Just [" 3: "]]
-,
-testRegex "^(a){0,}" []
-    ["bcd",
-     "abc",
-     "aab",
-     "aaa",
-     "aaaaaaaa    "]
-    [Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 2: "],
-     Just [" 0: aaa"],
-     Just [" 1: aa"],
-     Just [" 2: a"],
-     Just [" 3: "],
-     Just [" 0: aaaaaaaa"],
-     Just [" 1: aaaaaaa"],
-     Just [" 2: aaaaaa"],
-     Just [" 3: aaaaa"],
-     Just [" 4: aaaa"],
-     Just [" 5: aaa"],
-     Just [" 6: aa"],
-     Just [" 7: a"],
-     Just [" 8: "]]
-,
-testRegex "^(a){1,1}" []
-    ["bcd",
-     "abc",
-     "aab  "]
-    [Nothing,
-     Just [" 0: a"],
-     Just [" 0: a"]]
-,
-testRegex "^(a){1,2}" []
-    ["bcd",
-     "abc",
-     "aab  "]
-    [Nothing,
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"]]
-,
-testRegex "^(a){1,3}" []
-    ["bcd",
-     "abc",
-     "aab",
-     "aaa   "]
-    [Nothing,
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: aaa"],
-     Just [" 1: aa"],
-     Just [" 2: a"]]
-,
-testRegex "^(a){1,}" []
-    ["bcd",
-     "abc",
-     "aab",
-     "aaa",
-     "aaaaaaaa    "]
-    [Nothing,
-     Just [" 0: a"],
-     Just [" 0: aa"],
-     Just [" 1: a"],
-     Just [" 0: aaa"],
-     Just [" 1: aa"],
-     Just [" 2: a"],
-     Just [" 0: aaaaaaaa"],
-     Just [" 1: aaaaaaa"],
-     Just [" 2: aaaaaa"],
-     Just [" 3: aaaaa"],
-     Just [" 4: aaaa"],
-     Just [" 5: aaa"],
-     Just [" 6: aa"],
-     Just [" 7: a"]]
-,
-testRegex ".*\\.gif" []
-    ["borfle\\nbib.gif\\nno"]
-    [Just [" 0: bib.gif"]]
-,
-testRegex ".{0,}\\.gif" []
-    ["borfle\\nbib.gif\\nno"]
-    [Just [" 0: bib.gif"]]
-,
-testRegex ".*\\.gif" [ERROR]
-    ["borfle\\nbib.gif\\nno"]
-    [Just [" 0: bib.gif"]]
-,
-testRegex ".*\\.gif" [ERROR]
-    ["borfle\\nbib.gif\\nno"]
-    [Just [" 0: borfle\\x0abib.gif"]]
-,
-testRegex ".*\\.gif" [ERROR]
-    ["borfle\\nbib.gif\\nno",
-     "",
-     "/.*$/",
-     "borfle\\nbib.gif\\nno"]
-    [Just [" 0: borfle\\x0abib.gif"],
-     Just ["/.*$/"],
-     Just [" 0: no"]]
-,
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno"]
-    [Just [" 0: borfle"]]
-,
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno"]
-    [Just [" 0: borfle\\x0abib.gif\\x0ano"]]
-,
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno",
-     "",
-     "/.*$/",
-     "borfle\\nbib.gif\\nno\\n"]
-    [Just [" 0: borfle\\x0abib.gif\\x0ano"],
-     Just [" 1: borfle\\x0abib.gif"],
-     Just [" 2: borfle"],
-     Just ["/.*$/"],
-     Just [" 0: no"]]
-,
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno\\n"]
-    [Just [" 0: borfle"]]
-,
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno\\n"]
-    [Just [" 0: borfle\\x0abib.gif\\x0ano\\x0a"],
-     Just [" 1: borfle\\x0abib.gif\\x0ano"]]
-,
-testRegex ".*$" [ERROR]
-    ["borfle\\nbib.gif\\nno\\n",
-     "",
-     "/(.*X|^B)/",
-     "abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers",
-     "abcde\\nBar  "]
-    [Just [" 0: borfle\\x0abib.gif\\x0ano\\x0a"],
-     Just [" 1: borfle\\x0abib.gif\\x0ano"],
-     Just [" 2: borfle\\x0abib.gif"],
-     Just [" 3: borfle"],
-     Just ["/(.*X|^B)/"],
-     Just [" 0: 1234X"],
-     Just [" 0: B"],
-     Nothing,
-     Nothing]
-,
-testRegex "(.*X|^B)" [ERROR]
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "abcde\\nBar  "]
-    [Just [" 0: 1234X"],
-     Just [" 0: B"],
-     Just [" 0: B"]]
-,
-testRegex "(.*X|^B)" [ERROR]
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Nothing,
-     Nothing]
-,
-testRegex "(.*X|^B)" [ERROR]
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Just [" 0: B"]]
-,
-testRegex "(?s)(.*X|^B)" []
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers ",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?s:.*X|^B)" []
-    ["abcde\\n1234Xyz",
-     "BarFoo ",
-     "*** Failers ",
-     "abcde\\nBar  "]
-    [Just [" 0: abcde\\x0a1234X"],
-     Just [" 0: B"],
-     Nothing,
-     Nothing]
-,
-testRegex "^.*B" []
-    ["**** Failers",
-     "abc\\nB",
-     "",
-     "/(?s)^.*B/",
-     "abc\\nB"]
-    [Nothing,
-     Nothing,
-     Just ["/(?s)^.*B/"],
-     Just [" 0: abc\\x0aB"]]
-,
-testRegex "(?m)^.*B" []
-    ["abc\\nB",
-     "",
-     "/(?ms)^.*B/",
-     "abc\\nB"]
-    [Just [" 0: B"],
-     Just ["/(?ms)^.*B/"],
-     Just [" 0: abc\\x0aB"]]
-,
-testRegex "(?ms)^B" []
-    ["abc\\nB"]
-    [Just [" 0: B"]]
-,
-testRegex "(?s)B$" []
-    ["B\\n"]
-    [Just [" 0: B"]]
-,
-testRegex "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" []
-    ["123456654321",
-     "",
-     "/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/",
-     "123456654321 "]
-    [Just [" 0: 123456654321"],
-     Just ["/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/"],
-     Just [" 0: 123456654321"]]
-,
-testRegex "^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]" []
-    ["123456654321",
-     "",
-     "/^[abc]{12}/",
-     "abcabcabcabc",
-     "",
-     "/^[a-c]{12}/",
-     "abcabcabcabc",
-     "",
-     "/^(a|b|c){12}/",
-     "abcabcabcabc "]
-    [Just [" 0: 123456654321"],
-     Just ["/^[abc]{12}/"],
-     Just [" 0: abcabcabcabc"],
-     Just ["/^[a-c]{12}/"],
-     Just [" 0: abcabcabcabc"],
-     Just ["/^(a|b|c){12}/"],
-     Just [" 0: abcabcabcabc"]]
-,
-testRegex "^[abcdefghijklmnopqrstuvwxy0123456789]" []
-    ["n",
-     "*** Failers ",
-     "z "]
-    [Just [" 0: n"],
-     Nothing,
-     Nothing]
-,
-testRegex "abcde{0,0}" []
-    ["abcd",
-     "*** Failers",
-     "abce  "]
-    [Just [" 0: abcd"],
-     Nothing,
-     Nothing]
-,
-testRegex "ab[cd]{0,0}e" []
-    ["abe",
-     "*** Failers",
-     "abcde ",
-     "",
-     "/ab(c){0,0}d/",
-     "abd",
-     "*** Failers",
-     "abcd   "]
-    [Just [" 0: abe"],
-     Nothing,
-     Nothing,
-     Just ["/ab(c){0,0}d/"],
-     Just [" 0: abd"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(b*)" []
-    ["a",
-     "ab",
-     "abbbb",
-     "*** Failers",
-     "bbbbb    ",
-     "",
-     "/ab\\d{0}e/",
-     "abe",
-     "*** Failers",
-     "ab1e   ",
-     "",
-     "/\"([^\\\\\"]+|\\\\.)*\"/",
-     "the \\\"quick\\\" brown fox",
-     "\\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" "]
-    [Just [" 0: a"],
-     Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 0: abbbb"],
-     Just [" 1: abbb"],
-     Just [" 2: abb"],
-     Just [" 3: ab"],
-     Just [" 4: a"],
-     Just [" 0: a"],
-     Nothing,
-     Just ["/ab\\d{0}e/"],
-     Just [" 0: abe"],
-     Nothing,
-     Nothing,
-     Just ["/\"([^\\\\\"]+|\\\\.)*\"/"],
-     Just [" 0: \"quick\""],
-     Just [" 0: \"the \\\"quick\\\" brown fox\""]]
-,
-testRegex ".*?" [ERROR]
-    ["abc",
-     "",
-     "/\\b/g+",
-     "abc "]
-    [Just [" 0: abc"],
-     Just [" 0+ "],
-     Just [" 1: ab"],
-     Just [" 2: a"],
-     Just [" 3: "],
-     Just [" 0: "],
-     Just [" 0+ "],
-     Just ["/\\b/g+"],
-     Just [" 0: "],
-     Just [" 0+ abc"],
-     Just [" 0: "],
-     Just [" 0+ "]]
-,
-testRegex "\\b" [ERROR]
-    ["abc "]
-    [Just [" 0: "],
-     Just [" 0+ abc"],
-     Just [" 0: "],
-     Just [" 0+ "]]
-,
-testRegex "" [ERROR]
-    ["abc"]
-    [Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "]]
-,
-testRegex "<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>" [ERROR]
-    ["<TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>"]
-    [Just [" 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>"]]
-,
-testRegex "a[^a]b" []
-    ["acb",
-     "a\\nb",
-     "",
-     "/a.b/",
-     "acb",
-     "*** Failers ",
-     "a\\nb   ",
-     "",
-     "/a[^a]b/s",
-     "acb",
-     "a\\nb  ",
-     "",
-     "/a.b/s",
-     "acb",
-     "a\\nb  "]
-    [Just [" 0: acb"],
-     Just [" 0: a\\x0ab"],
-     Just ["/a.b/"],
-     Just [" 0: acb"],
-     Nothing,
-     Nothing,
-     Just ["/a[^a]b/s"],
-     Just [" 0: acb"],
-     Just [" 0: a\\x0ab"],
-     Just ["/a.b/s"],
-     Just [" 0: acb"],
-     Just [" 0: a\\x0ab"]]
-,
-testRegex "^(b+?|a){1,2}?c" []
-    ["bac",
-     "bbac",
-     "bbbac",
-     "bbbbac",
-     "bbbbbac "]
-    [Just [" 0: bac"],
-     Just [" 0: bbac"],
-     Just [" 0: bbbac"],
-     Just [" 0: bbbbac"],
-     Just [" 0: bbbbbac"]]
-,
-testRegex "^(b+|a){1,2}?c" []
-    ["bac",
-     "bbac",
-     "bbbac",
-     "bbbbac",
-     "bbbbbac ",
-     "",
-     "/(?!\\A)x/m",
-     "x\\nb\\n",
-     "a\\bx\\n  ",
-     "",
-     "/\\x0{ab}/",
-     "\\0{ab} "]
-    [Just [" 0: bac"],
-     Just [" 0: bbac"],
-     Just [" 0: bbbac"],
-     Just [" 0: bbbbac"],
-     Just [" 0: bbbbbac"],
-     Just ["/(?!\\A)x/m"],
-     Nothing,
-     Just [" 0: x"],
-     Just ["/\\x0{ab}/"],
-     Just [" 0: \\x00{ab}"]]
-,
-testRegex "(A|B)*?CD" []
-    ["CD ",
-     "",
-     "/(A|B)*CD/",
-     "CD "]
-    [Just [" 0: CD"],
-     Just ["/(A|B)*CD/"],
-     Just [" 0: CD"]]
-,
-testRegex "(?<!bar)foo" []
-    ["foo",
-     "catfood",
-     "arfootle",
-     "rfoosh",
-     "*** Failers",
-     "barfoo",
-     "towbarfoo"]
-    [Just [" 0: foo"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\w{3}(?<!bar)foo" []
-    ["catfood",
-     "*** Failers",
-     "foo",
-     "barfoo",
-     "towbarfoo"]
-    [Just [" 0: catfoo"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=(foo)a)bar" []
-    ["fooabar",
-     "*** Failers",
-     "bar",
-     "foobbar",
-     "",
-     "/\\Aabc\\z/m",
-     "abc",
-     "*** Failers",
-     "abc\\n   ",
-     "qqq\\nabc",
-     "abc\\nzzz",
-     "qqq\\nabc\\nzzz"]
-    [Just [" 0: bar"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\Aabc\\z/m"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?>.*/)foo" [ERROR]
-    ["/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/"]
-    [Nothing]
-,
-testRegex "(?>.*/)foo" [ERROR]
-    ["/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo"]
-    [Just [" 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo"]]
-,
-testRegex "(?>(\\.\\d\\d[1-9]?))\\d+" []
-    ["1.230003938",
-     "1.875000282",
-     "*** Failers ",
-     "1.235 "]
-    [Just [" 0: .230003938"],
-     Just [" 1: .23000393"],
-     Just [" 2: .2300039"],
-     Just [" 3: .230003"],
-     Just [" 4: .23000"],
-     Just [" 5: .2300"],
-     Just [" 6: .230"],
-     Just [" 0: .875000282"],
-     Just [" 1: .87500028"],
-     Just [" 2: .8750002"],
-     Just [" 3: .875000"],
-     Just [" 4: .87500"],
-     Just [" 5: .8750"],
-     Nothing,
-     Nothing]
-,
-testRegex "^((?>\\w+)|(?>\\s+))*$" []
-    ["now is the time for all good men to come to the aid of the party",
-     "*** Failers",
-     "this is not a line with only words and spaces!",
-     "",
-     "/(\\d+)(\\w)/",
-     "12345a",
-     "12345+ "]
-    [Just [" 0: now is the time for all good men to come to the aid of the party"],
-     Nothing,
-     Nothing,
-     Just ["/(\\d+)(\\w)/"],
-     Just [" 0: 12345a"],
-     Just [" 1: 12345"],
-     Just [" 2: 1234"],
-     Just [" 3: 123"],
-     Just [" 4: 12"],
-     Just [" 0: 12345"],
-     Just [" 1: 1234"],
-     Just [" 2: 123"],
-     Just [" 3: 12"]]
-,
-testRegex "((?>\\d+))(\\w)" []
-    ["12345a",
-     "*** Failers",
-     "12345+ "]
-    [Just [" 0: 12345a"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?>a+)b" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-testRegex "((?>a+)b)" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-testRegex "(?>(a+))b" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-testRegex "(?>b)+" []
-    ["aaabbbccc"]
-    [Just [" 0: bbb"],
-     Just [" 1: bb"],
-     Just [" 2: b"]]
-,
-testRegex "(?>a+|b+|c+)*c" []
-    ["aaabbbbccccd",
-     "",
-     "/(a+|b+|c+)*c/",
-     "aaabbbbccccd"]
-    [Just [" 0: aaabbbbcccc"],
-     Just [" 1: aaabbbbc"],
-     Just ["/(a+|b+|c+)*c/"],
-     Just [" 0: aaabbbbcccc"],
-     Just [" 1: aaabbbbccc"],
-     Just [" 2: aaabbbbcc"],
-     Just [" 3: aaabbbbc"]]
-,
-testRegex "((?>[^()]+)|\\([^()]*\\))+" []
-    ["((abc(ade)ufh()()x",
-     "",
-     "/\\(((?>[^()]+)|\\([^()]+\\))+\\)/ ",
-     "(abc)",
-     "(abc(def)xyz)",
-     "*** Failers",
-     "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   "]
-    [Just [" 0: abc(ade)ufh()()x"],
-     Just [" 1: abc(ade)ufh()()"],
-     Just [" 2: abc(ade)ufh()"],
-     Just [" 3: abc(ade)ufh"],
-     Just [" 4: abc(ade)"],
-     Just [" 5: abc"],
-     Just ["/\\(((?>[^()]+)|\\([^()]+\\))+\\)/ "],
-     Just [" 0: (abc)"],
-     Just [" 0: (abc(def)xyz)"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(?-i)b" [caseless]
-    ["ab",
-     "Ab",
-     "*** Failers ",
-     "aB",
-     "AB",
-     "",
-     "/(a (?x)b c)d e/",
-     "a bcd e",
-     "*** Failers",
-     "a b cd e",
-     "abcd e   ",
-     "a bcde ",
-     "",
-     "/(a b(?x)c d (?-x)e f)/",
-     "a bcde f",
-     "*** Failers",
-     "abcdef  "]
-    [Just [" 0: ab"],
-     Just [" 0: Ab"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(a (?x)b c)d e/"],
-     Just [" 0: a bcd e"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(a b(?x)c d (?-x)e f)/"],
-     Just [" 0: a bcde f"],
-     Nothing,
-     Nothing]
-,
-testRegex "(a(?i)b)c" []
-    ["abc",
-     "aBc",
-     "*** Failers",
-     "abC",
-     "aBC  ",
-     "Abc",
-     "ABc",
-     "ABC",
-     "AbC",
-     "",
-     "/a(?i:b)c/",
-     "abc",
-     "aBc",
-     "*** Failers ",
-     "ABC",
-     "abC",
-     "aBC",
-     "",
-     "/a(?i:b)*c/",
-     "aBc",
-     "aBBc",
-     "*** Failers ",
-     "aBC",
-     "aBBC",
-     "",
-     "/a(?=b(?i)c)\\w\\wd/",
-     "abcd",
-     "abCd",
-     "*** Failers",
-     "aBCd",
-     "abcD     ",
-     "",
-     "/(?s-i:more.*than).*million/i",
-     "more than million",
-     "more than MILLION",
-     "more \\n than Million ",
-     "*** Failers",
-     "MORE THAN MILLION    ",
-     "more \\n than \\n million "]
-    [Just [" 0: abc"],
-     Just [" 0: aBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a(?i:b)c/"],
-     Just [" 0: abc"],
-     Just [" 0: aBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a(?i:b)*c/"],
-     Just [" 0: aBc"],
-     Just [" 0: aBBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a(?=b(?i)c)\\w\\wd/"],
-     Just [" 0: abcd"],
-     Just [" 0: abCd"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?s-i:more.*than).*million/i"],
-     Just [" 0: more than million"],
-     Just [" 0: more than MILLION"],
-     Just [" 0: more \\x0a than Million"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?:(?s-i)more.*than).*million" [caseless]
-    ["more than million",
-     "more than MILLION",
-     "more \\n than Million ",
-     "*** Failers",
-     "MORE THAN MILLION    ",
-     "more \\n than \\n million ",
-     "",
-     "/(?>a(?i)b+)+c/ ",
-     "abc",
-     "aBbc",
-     "aBBc ",
-     "*** Failers",
-     "Abc",
-     "abAb    ",
-     "abbC ",
-     "",
-     "/(?=a(?i)b)\\w\\wc/",
-     "abc",
-     "aBc",
-     "*** Failers",
-     "Ab ",
-     "abC",
-     "aBC     ",
-     "",
-     "/(?<=a(?i)b)(\\w\\w)c/",
-     "abxxc",
-     "aBxxc",
-     "*** Failers",
-     "Abxxc",
-     "ABxxc",
-     "abxxC      "]
-    [Just [" 0: more than million"],
-     Just [" 0: more than MILLION"],
-     Just [" 0: more \\x0a than Million"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?>a(?i)b+)+c/ "],
-     Just [" 0: abc"],
-     Just [" 0: aBbc"],
-     Just [" 0: aBBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?=a(?i)b)\\w\\wc/"],
-     Just [" 0: abc"],
-     Just [" 0: aBc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?<=a(?i)b)(\\w\\w)c/"],
-     Just [" 0: xxc"],
-     Just [" 0: xxc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" []
-    ["abc:",
-     "12",
-     "*** Failers",
-     "123",
-     "xyz    "]
-    [Just [" 0: abc:"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^(?(?!abc)\\d\\d|\\w{3}:)$" []
-    ["abc:",
-     "12",
-     "*** Failers",
-     "123",
-     "xyz    ",
-     "",
-     "/(?(?<=foo)bar|cat)/",
-     "foobar",
-     "cat",
-     "fcat",
-     "focat   ",
-     "*** Failers",
-     "foocat  "]
-    [Just [" 0: abc:"],
-     Just [" 0: 12"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?(?<=foo)bar|cat)/"],
-     Just [" 0: bar"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?(?<!foo)cat|bar)" []
-    ["foobar",
-     "cat",
-     "fcat",
-     "focat   ",
-     "*** Failers",
-     "foocat  "]
-    [Just [" 0: bar"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Just [" 0: cat"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?>a*)*" []
-    ["a",
-     "aa",
-     "aaaa",
-     "",
-     "/(abc|)+/",
-     "abc",
-     "abcabc",
-     "abcabcabc",
-     "xyz      "]
-    [Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: "],
-     Just [" 0: aaaa"],
-     Just [" 1: "],
-     Just ["/(abc|)+/"],
-     Just [" 0: abc"],
-     Just [" 1: "],
-     Just [" 0: abcabc"],
-     Just [" 1: abc"],
-     Just [" 2: "],
-     Just [" 0: abcabcabc"],
-     Just [" 1: abcabc"],
-     Just [" 2: abc"],
-     Just [" 3: "],
-     Just [" 0: "]]
-,
-testRegex "([a]*)*" []
-    ["a",
-     "aaaaa ",
-     "",
-     "/([ab]*)*/",
-     "a",
-     "b",
-     "ababab",
-     "aaaabcde",
-     "bbbb    ",
-     "",
-     "/([^a]*)*/",
-     "b",
-     "bbbb",
-     "aaa   ",
-     "",
-     "/([^ab]*)*/",
-     "cccc",
-     "abab  ",
-     "",
-     "/([a]*?)*/",
-     "a",
-     "aaaa ",
-     "",
-     "/([ab]*?)*/",
-     "a",
-     "b",
-     "abab",
-     "baba   ",
-     "",
-     "/([^a]*?)*/",
-     "b",
-     "bbbb",
-     "aaa   ",
-     "",
-     "/([^ab]*?)*/",
-     "c",
-     "cccc",
-     "baba   ",
-     "",
-     "/(?>a*)*/",
-     "a",
-     "aaabcde ",
-     "",
-     "/((?>a*))*/",
-     "aaaaa",
-     "aabbaa ",
-     "",
-     "/((?>a*?))*/",
-     "aaaaa",
-     "aabbaa "]
-    [Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aaaaa"],
-     Just [" 1: aaaa"],
-     Just [" 2: aaa"],
-     Just [" 3: aa"],
-     Just [" 4: a"],
-     Just [" 5: "],
-     Just ["/([ab]*)*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: ababab"],
-     Just [" 1: ababa"],
-     Just [" 2: abab"],
-     Just [" 3: aba"],
-     Just [" 4: ab"],
-     Just [" 5: a"],
-     Just [" 6: "],
-     Just [" 0: aaaab"],
-     Just [" 1: aaaa"],
-     Just [" 2: aaa"],
-     Just [" 3: aa"],
-     Just [" 4: a"],
-     Just [" 5: "],
-     Just [" 0: bbbb"],
-     Just [" 1: bbb"],
-     Just [" 2: bb"],
-     Just [" 3: b"],
-     Just [" 4: "],
-     Just ["/([^a]*)*/"],
-     Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: bbbb"],
-     Just [" 1: bbb"],
-     Just [" 2: bb"],
-     Just [" 3: b"],
-     Just [" 4: "],
-     Just [" 0: "],
-     Just ["/([^ab]*)*/"],
-     Just [" 0: cccc"],
-     Just [" 1: ccc"],
-     Just [" 2: cc"],
-     Just [" 3: c"],
-     Just [" 4: "],
-     Just [" 0: "],
-     Just ["/([a]*?)*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 4: "],
-     Just ["/([ab]*?)*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: abab"],
-     Just [" 1: aba"],
-     Just [" 2: ab"],
-     Just [" 3: a"],
-     Just [" 4: "],
-     Just [" 0: baba"],
-     Just [" 1: bab"],
-     Just [" 2: ba"],
-     Just [" 3: b"],
-     Just [" 4: "],
-     Just ["/([^a]*?)*/"],
-     Just [" 0: b"],
-     Just [" 1: "],
-     Just [" 0: bbbb"],
-     Just [" 1: bbb"],
-     Just [" 2: bb"],
-     Just [" 3: b"],
-     Just [" 4: "],
-     Just [" 0: "],
-     Just ["/([^ab]*?)*/"],
-     Just [" 0: c"],
-     Just [" 1: "],
-     Just [" 0: cccc"],
-     Just [" 1: ccc"],
-     Just [" 2: cc"],
-     Just [" 3: c"],
-     Just [" 4: "],
-     Just [" 0: "],
-     Just ["/(?>a*)*/"],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: aaa"],
-     Just [" 1: "],
-     Just ["/((?>a*))*/"],
-     Just [" 0: aaaaa"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: "],
-     Just ["/((?>a*?))*/"],
-     Just [" 0: aaaaa"],
-     Just [" 1: "],
-     Just [" 0: aa"],
-     Just [" 1: "]]
-,
-testRegex "(?(?=[^a-z]+[a-z])  \\d{2}-[a-z]{3}-\\d{2}  |  \\d{2}-\\d{2}-\\d{2} ) " [ERROR]
-    ["12-sep-98",
-     "12-09-98",
-     "*** Failers",
-     "sep-12-98",
-     "",
-     "/(?i:saturday|sunday)/",
-     "saturday",
-     "sunday",
-     "Saturday",
-     "Sunday",
-     "SATURDAY",
-     "SUNDAY",
-     "SunDay",
-     "",
-     "/(a(?i)bc|BB)x/",
-     "abcx",
-     "aBCx",
-     "bbx",
-     "BBx",
-     "*** Failers",
-     "abcX",
-     "aBCX",
-     "bbX",
-     "BBX               "]
-    [Just [" 0: 12-sep-98"],
-     Just [" 0: 12-09-98"],
-     Nothing,
-     Nothing,
-     Just ["/(?i:saturday|sunday)/"],
-     Just [" 0: saturday"],
-     Just [" 0: sunday"],
-     Just [" 0: Saturday"],
-     Just [" 0: Sunday"],
-     Just [" 0: SATURDAY"],
-     Just [" 0: SUNDAY"],
-     Just [" 0: SunDay"],
-     Just ["/(a(?i)bc|BB)x/"],
-     Just [" 0: abcx"],
-     Just [" 0: aBCx"],
-     Just [" 0: bbx"],
-     Just [" 0: BBx"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^([ab](?i)[cd]|[ef])" []
-    ["ac",
-     "aC",
-     "bD",
-     "elephant",
-     "Europe ",
-     "frog",
-     "France",
-     "*** Failers",
-     "Africa     "]
-    [Just [" 0: ac"],
-     Just [" 0: aC"],
-     Just [" 0: bD"],
-     Just [" 0: e"],
-     Just [" 0: E"],
-     Just [" 0: f"],
-     Just [" 0: F"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)" []
-    ["ab",
-     "aBd",
-     "xy",
-     "xY",
-     "zebra",
-     "Zambesi",
-     "*** Failers",
-     "aCD  ",
-     "XY  "]
-    [Just [" 0: ab"],
-     Just [" 0: aBd"],
-     Just [" 0: xy"],
-     Just [" 0: xY"],
-     Just [" 0: z"],
-     Just [" 0: Z"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=foo\\n)^bar" [ERROR]
-    ["foo\\nbar",
-     "*** Failers",
-     "bar",
-     "baz\\nbar   "]
-    [Just [" 0: bar"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=(?<!foo)bar)baz" []
-    ["barbaz",
-     "barbarbaz ",
-     "koobarbaz ",
-     "*** Failers",
-     "baz",
-     "foobarbaz "]
-    [Just [" 0: baz"],
-     Just [" 0: baz"],
-     Just [" 0: baz"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "The following tests are taken from the Perl 5.005 test suite; some of them" []
-    ["/are compatible with 5.004, but I'd rather not have to sort them out./"]
-    [Just ["/are compatible with 5.004, but I'd rather not have to sort them out./"],
-     Nothing]
-,
-testRegex "abc" []
-    ["abc",
-     "xabcy",
-     "ababc",
-     "*** Failers",
-     "xbc",
-     "axc",
-     "abx"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "ab*c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "ab*bc" []
-    ["abc",
-     "abbc",
-     "abbbbc"]
-    [Just [" 0: abc"],
-     Just [" 0: abbc"],
-     Just [" 0: abbbbc"]]
-,
-testRegex ".{1}" []
-    ["abbbbc"]
-    [Just [" 0: a"]]
-,
-testRegex ".{3,4}" []
-    ["abbbbc"]
-    [Just [" 0: abbb"],
-     Just [" 1: abb"]]
-,
-testRegex "ab{0,}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-testRegex "ab+bc" []
-    ["abbc",
-     "*** Failers",
-     "abc",
-     "abq"]
-    [Just [" 0: abbc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "ab{1,}bc" []
-    []
-    []
-,
-testRegex "ab+bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-testRegex "ab{1,}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-testRegex "ab{1,3}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-testRegex "ab{3,4}bc" []
-    ["abbbbc"]
-    [Just [" 0: abbbbc"]]
-,
-testRegex "ab{4,5}bc" []
-    ["*** Failers",
-     "abq",
-     "abbbbc"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "ab?bc" []
-    ["abbc",
-     "abc"]
-    [Just [" 0: abbc"],
-     Just [" 0: abc"]]
-,
-testRegex "ab{0,1}bc" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "ab?bc" []
-    []
-    []
-,
-testRegex "ab?c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "ab{0,1}c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "^abc$" []
-    ["abc",
-     "*** Failers",
-     "abbbbc",
-     "abcc"]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" []
-    ["abcc"]
-    [Just [" 0: abc"]]
-,
-testRegex "^abc$" []
-    []
-    []
-,
-testRegex "abc$" []
-    ["aabc",
-     "*** Failers",
-     "aabc",
-     "aabcd"]
-    [Just [" 0: abc"],
-     Nothing,
-     Just [" 0: abc"],
-     Nothing]
-,
-testRegex "^" []
-    ["abc"]
-    [Just [" 0: "]]
-,
-testRegex "$" []
-    ["abc"]
-    [Just [" 0: "]]
-,
-testRegex "a.c" []
-    ["abc",
-     "axc"]
-    [Just [" 0: abc"],
-     Just [" 0: axc"]]
-,
-testRegex "a.*c" []
-    ["axyzc"]
-    [Just [" 0: axyzc"]]
-,
-testRegex "a[bc]d" []
-    ["abd",
-     "*** Failers",
-     "axyzd",
-     "abc"]
-    [Just [" 0: abd"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a[b-d]e" []
-    ["ace"]
-    [Just [" 0: ace"]]
-,
-testRegex "a[b-d]" []
-    ["aac"]
-    [Just [" 0: ac"]]
-,
-testRegex "a[-b]" []
-    ["a-"]
-    [Just [" 0: a-"]]
-,
-testRegex "a[b-]" []
-    ["a-"]
-    [Just [" 0: a-"]]
-,
-testRegex "a]" []
-    ["a]"]
-    [Just [" 0: a]"]]
-,
-testRegex "a[]]b" []
-    ["a]b"]
-    [Just [" 0: a]b"]]
-,
-testRegex "a[^bc]d" []
-    ["aed",
-     "*** Failers",
-     "abd",
-     "abd"]
-    [Just [" 0: aed"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a[^-b]c" []
-    ["adc"]
-    [Just [" 0: adc"]]
-,
-testRegex "a[^]b]c" []
-    ["adc",
-     "*** Failers",
-     "a-c",
-     "a]c"]
-    [Just [" 0: adc"],
-     Nothing,
-     Just [" 0: a-c"],
-     Nothing]
-,
-testRegex "\\ba\\b" []
-    ["a-",
-     "-a",
-     "-a-"]
-    [Just [" 0: a"],
-     Just [" 0: a"],
-     Just [" 0: a"]]
-,
-testRegex "\\by\\b" []
-    ["*** Failers",
-     "xy",
-     "yz",
-     "xyz"]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\Ba\\B" []
-    ["*** Failers",
-     "a-",
-     "-a",
-     "-a-"]
-    [Just [" 0: a"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\By\\b" []
-    ["xy"]
-    [Just [" 0: y"]]
-,
-testRegex "\\by\\B" []
-    ["yz"]
-    [Just [" 0: y"]]
-,
-testRegex "\\By\\B" []
-    ["xyz"]
-    [Just [" 0: y"]]
-,
-testRegex "\\w" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-testRegex "\\W" []
-    ["-",
-     "*** Failers",
-     "-",
-     "a"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-testRegex "a\\sb" []
-    ["a b"]
-    [Just [" 0: a b"]]
-,
-testRegex "a\\Sb" []
-    ["a-b",
-     "*** Failers",
-     "a-b",
-     "a b"]
-    [Just [" 0: a-b"],
-     Nothing,
-     Just [" 0: a-b"],
-     Nothing]
-,
-testRegex "\\d" []
-    ["1"]
-    [Just [" 0: 1"]]
-,
-testRegex "\\D" []
-    ["-",
-     "*** Failers",
-     "-",
-     "1"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-testRegex "[\\w]" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-testRegex "[\\W]" []
-    ["-",
-     "*** Failers",
-     "-",
-     "a"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-testRegex "a[\\s]b" []
-    ["a b"]
-    [Just [" 0: a b"]]
-,
-testRegex "a[\\S]b" []
-    ["a-b",
-     "*** Failers",
-     "a-b",
-     "a b"]
-    [Just [" 0: a-b"],
-     Nothing,
-     Just [" 0: a-b"],
-     Nothing]
-,
-testRegex "[\\d]" []
-    ["1"]
-    [Just [" 0: 1"]]
-,
-testRegex "[\\D]" []
-    ["-",
-     "*** Failers",
-     "-",
-     "1"]
-    [Just [" 0: -"],
-     Just [" 0: *"],
-     Just [" 0: -"],
-     Nothing]
-,
-testRegex "ab|cd" []
-    ["abc",
-     "abcd"]
-    [Just [" 0: ab"],
-     Just [" 0: ab"]]
-,
-testRegex "()ef" []
-    ["def"]
-    [Just [" 0: ef"]]
-,
-testRegex "$b" []
-    []
-    []
-,
-testRegex "a\\(b" []
-    ["a(b"]
-    [Just [" 0: a(b"]]
-,
-testRegex "a\\(*b" []
-    ["ab",
-     "a((b"]
-    [Just [" 0: ab"],
-     Just [" 0: a((b"]]
-,
-testRegex "a\\\\b" []
-    ["a\\b"]
-    [Nothing]
-,
-testRegex "((a))" []
-    ["abc"]
-    [Just [" 0: a"]]
-,
-testRegex "(a)b(c)" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "a+b+c" []
-    ["aabbabc"]
-    [Just [" 0: abc"]]
-,
-testRegex "a{1,}b{1,}c" []
-    ["aabbabc"]
-    [Just [" 0: abc"]]
-,
-testRegex "a.+?c" []
-    ["abcabc"]
-    [Just [" 0: abcabc"],
-     Just [" 1: abc"]]
-,
-testRegex "(a+|b)*" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 2: "]]
-,
-testRegex "(a+|b){0,}" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 2: "]]
-,
-testRegex "(a+|b)+" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"]]
-,
-testRegex "(a+|b){1,}" []
-    ["ab"]
-    [Just [" 0: ab"],
-     Just [" 1: a"]]
-,
-testRegex "(a+|b)?" []
-    ["ab"]
-    [Just [" 0: a"],
-     Just [" 1: "]]
-,
-testRegex "(a+|b){0,1}" []
-    ["ab"]
-    [Just [" 0: a"],
-     Just [" 1: "]]
-,
-testRegex "[^ab]*" []
-    ["cde"]
-    [Just [" 0: cde"],
-     Just [" 1: cd"],
-     Just [" 2: c"],
-     Just [" 3: "]]
-,
-testRegex "abc" []
-    ["*** Failers",
-     "b",
-     ""]
-    [Nothing,
-     Nothing]
-,
-testRegex "a*" []
-    [""]
-    []
-,
-testRegex "([abc])*d" []
-    ["abbbcd"]
-    [Just [" 0: abbbcd"]]
-,
-testRegex "([abc])*bcd" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "a|b|c|d|e" []
-    ["e"]
-    [Just [" 0: e"]]
-,
-testRegex "(a|b|c|d|e)f" []
-    ["ef"]
-    [Just [" 0: ef"]]
-,
-testRegex "abcd*efg" []
-    ["abcdefg"]
-    [Just [" 0: abcdefg"]]
-,
-testRegex "ab*" []
-    ["xabyabbbz",
-     "xayabbbz"]
-    [Just [" 0: ab"],
-     Just [" 1: a"],
-     Just [" 0: a"]]
-,
-testRegex "(ab|cd)e" []
-    ["abcde"]
-    [Just [" 0: cde"]]
-,
-testRegex "[abhgefdc]ij" []
-    ["hij"]
-    [Just [" 0: hij"]]
-,
-testRegex "^(ab|cd)e" []
-    []
-    []
-,
-testRegex "(abc|)ef" []
-    ["abcdef"]
-    [Just [" 0: ef"]]
-,
-testRegex "(a|b)c*d" []
-    ["abcd"]
-    [Just [" 0: bcd"]]
-,
-testRegex "(ab|ab*)bc" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "a([bc]*)c*" []
-    ["abc"]
-    [Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 2: a"]]
-,
-testRegex "a([bc]*)(c*d)" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "a([bc]+)(c*d)" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "a([bc]*)(c+d)" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "a[bcd]*dcdcde" []
-    ["adcdcde"]
-    [Just [" 0: adcdcde"]]
-,
-testRegex "a[bcd]+dcdcde" []
-    ["*** Failers",
-     "abcde",
-     "adcdcde"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(ab|a)b*c" []
-    ["abc"]
-    [Just [" 0: abc"]]
-,
-testRegex "((a)(b)c)(d)" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "[a-zA-Z_][a-zA-Z0-9_]*" []
-    ["alpha"]
-    [Just [" 0: alpha"],
-     Just [" 1: alph"],
-     Just [" 2: alp"],
-     Just [" 3: al"],
-     Just [" 4: a"]]
-,
-testRegex "^a(bc+|b[eh])g|.h$" []
-    ["abh"]
-    [Just [" 0: bh"]]
-,
-testRegex "(bc+d$|ef*g.|h?i(j|k))" []
-    ["effgz",
-     "ij",
-     "reffgz",
-     "*** Failers",
-     "effg",
-     "bcdd"]
-    [Just [" 0: effgz"],
-     Just [" 0: ij"],
-     Just [" 0: effgz"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((((((((((a))))))))))" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-testRegex "(((((((((a)))))))))" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-testRegex "multiple words of text" []
-    ["*** Failers",
-     "aa",
-     "uh-uh"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "multiple words" []
-    ["multiple words, yeah"]
-    [Just [" 0: multiple words"]]
-,
-testRegex "(.*)c(.*)" []
-    ["abcde"]
-    [Just [" 0: abcde"],
-     Just [" 1: abcd"],
-     Just [" 2: abc"]]
-,
-testRegex "\\((.*), (.*)\\)" []
-    ["(a, b)"]
-    [Just [" 0: (a, b)"]]
-,
-testRegex "[k]" []
-    []
-    []
-,
-testRegex "abcd" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "a(bc)d" []
-    ["abcd"]
-    [Just [" 0: abcd"]]
-,
-testRegex "a[-]?c" []
-    ["ac"]
-    [Just [" 0: ac"]]
-,
-testRegex "abc" [caseless]
-    ["ABC",
-     "XABCY",
-     "ABABC",
-     "*** Failers",
-     "aaxabxbaxbbx",
-     "XBC",
-     "AXC",
-     "ABX"]
-    [Just [" 0: ABC"],
-     Just [" 0: ABC"],
-     Just [" 0: ABC"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "ab*c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "ab*bc" [caseless]
-    ["ABC",
-     "ABBC"]
-    [Just [" 0: ABC"],
-     Just [" 0: ABBC"]]
-,
-testRegex "ab*?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-testRegex "ab{0,}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-testRegex "ab+?bc" [caseless]
-    ["ABBC"]
-    [Just [" 0: ABBC"]]
-,
-testRegex "ab+bc" [caseless]
-    ["*** Failers",
-     "ABC",
-     "ABQ"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "ab{1,}bc" [caseless]
-    []
-    []
-,
-testRegex "ab+bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-testRegex "ab{1,}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-testRegex "ab{1,3}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-testRegex "ab{3,4}?bc" [caseless]
-    ["ABBBBC"]
-    [Just [" 0: ABBBBC"]]
-,
-testRegex "ab{4,5}?bc" [caseless]
-    ["*** Failers",
-     "ABQ",
-     "ABBBBC"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "ab??bc" [caseless]
-    ["ABBC",
-     "ABC"]
-    [Just [" 0: ABBC"],
-     Just [" 0: ABC"]]
-,
-testRegex "ab{0,1}?bc" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "ab??bc" [caseless]
-    []
-    []
-,
-testRegex "ab??c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "ab{0,1}?c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "^abc$" [caseless]
-    ["ABC",
-     "*** Failers",
-     "ABBBBC",
-     "ABCC"]
-    [Just [" 0: ABC"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abc" [caseless]
-    ["ABCC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "^abc$" [caseless]
-    []
-    []
-,
-testRegex "abc$" [caseless]
-    ["AABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "^" [caseless]
-    ["ABC"]
-    [Just [" 0: "]]
-,
-testRegex "$" [caseless]
-    ["ABC"]
-    [Just [" 0: "]]
-,
-testRegex "a.c" [caseless]
-    ["ABC",
-     "AXC"]
-    [Just [" 0: ABC"],
-     Just [" 0: AXC"]]
-,
-testRegex "a.*?c" [caseless]
-    ["AXYZC"]
-    [Just [" 0: AXYZC"]]
-,
-testRegex "a.*c" [caseless]
-    ["*** Failers",
-     "AABC",
-     "AXYZD"]
-    [Nothing,
-     Just [" 0: AABC"],
-     Nothing]
-,
-testRegex "a[bc]d" [caseless]
-    ["ABD"]
-    [Just [" 0: ABD"]]
-,
-testRegex "a[b-d]e" [caseless]
-    ["ACE",
-     "*** Failers",
-     "ABC",
-     "ABD"]
-    [Just [" 0: ACE"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a[b-d]" [caseless]
-    ["AAC"]
-    [Just [" 0: AC"]]
-,
-testRegex "a[-b]" [caseless]
-    ["A-"]
-    [Just [" 0: A-"]]
-,
-testRegex "a[b-]" [caseless]
-    ["A-"]
-    [Just [" 0: A-"]]
-,
-testRegex "a]" [caseless]
-    ["A]"]
-    [Just [" 0: A]"]]
-,
-testRegex "a[]]b" [caseless]
-    ["A]B"]
-    [Just [" 0: A]B"]]
-,
-testRegex "a[^bc]d" [caseless]
-    ["AED"]
-    [Just [" 0: AED"]]
-,
-testRegex "a[^-b]c" [caseless]
-    ["ADC",
-     "*** Failers",
-     "ABD",
-     "A-C"]
-    [Just [" 0: ADC"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a[^]b]c" [caseless]
-    ["ADC"]
-    [Just [" 0: ADC"]]
-,
-testRegex "ab|cd" [caseless]
-    ["ABC",
-     "ABCD"]
-    [Just [" 0: AB"],
-     Just [" 0: AB"]]
-,
-testRegex "()ef" [caseless]
-    ["DEF"]
-    [Just [" 0: EF"]]
-,
-testRegex "$b" [caseless]
-    ["*** Failers",
-     "A]C",
-     "B"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\(b" [caseless]
-    ["A(B"]
-    [Just [" 0: A(B"]]
-,
-testRegex "a\\(*b" [caseless]
-    ["AB",
-     "A((B"]
-    [Just [" 0: AB"],
-     Just [" 0: A((B"]]
-,
-testRegex "a\\\\b" [caseless]
-    ["A\\B"]
-    [Nothing]
-,
-testRegex "((a))" [caseless]
-    ["ABC"]
-    [Just [" 0: A"]]
-,
-testRegex "(a)b(c)" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "a+b+c" [caseless]
-    ["AABBABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "a{1,}b{1,}c" [caseless]
-    ["AABBABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "a.+?c" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABCABC"],
-     Just [" 1: ABC"]]
-,
-testRegex "a.*?c" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABCABC"],
-     Just [" 1: ABC"]]
-,
-testRegex "a.{0,5}?c" [caseless]
-    ["ABCABC"]
-    [Just [" 0: ABCABC"],
-     Just [" 1: ABC"]]
-,
-testRegex "(a+|b)*" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: A"],
-     Just [" 2: "]]
-,
-testRegex "(a+|b){0,}" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: A"],
-     Just [" 2: "]]
-,
-testRegex "(a+|b)+" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: A"]]
-,
-testRegex "(a+|b){1,}" [caseless]
-    ["AB"]
-    [Just [" 0: AB"],
-     Just [" 1: A"]]
-,
-testRegex "(a+|b)?" [caseless]
-    ["AB"]
-    [Just [" 0: A"],
-     Just [" 1: "]]
-,
-testRegex "(a+|b){0,1}" [caseless]
-    ["AB"]
-    [Just [" 0: A"],
-     Just [" 1: "]]
-,
-testRegex "(a+|b){0,1}?" [caseless]
-    ["AB"]
-    [Just [" 0: A"],
-     Just [" 1: "]]
-,
-testRegex "[^ab]*" [caseless]
-    ["CDE"]
-    [Just [" 0: CDE"],
-     Just [" 1: CD"],
-     Just [" 2: C"],
-     Just [" 3: "]]
-,
-testRegex "abc" [caseless]
-    []
-    []
-,
-testRegex "a*" [caseless]
-    [""]
-    []
-,
-testRegex "([abc])*d" [caseless]
-    ["ABBBCD"]
-    [Just [" 0: ABBBCD"]]
-,
-testRegex "([abc])*bcd" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "a|b|c|d|e" [caseless]
-    ["E"]
-    [Just [" 0: E"]]
-,
-testRegex "(a|b|c|d|e)f" [caseless]
-    ["EF"]
-    [Just [" 0: EF"]]
-,
-testRegex "abcd*efg" [caseless]
-    ["ABCDEFG"]
-    [Just [" 0: ABCDEFG"]]
-,
-testRegex "ab*" [caseless]
-    ["XABYABBBZ",
-     "XAYABBBZ"]
-    [Just [" 0: AB"],
-     Just [" 1: A"],
-     Just [" 0: A"]]
-,
-testRegex "(ab|cd)e" [caseless]
-    ["ABCDE"]
-    [Just [" 0: CDE"]]
-,
-testRegex "[abhgefdc]ij" [caseless]
-    ["HIJ"]
-    [Just [" 0: HIJ"]]
-,
-testRegex "^(ab|cd)e" [caseless]
-    ["ABCDE"]
-    [Nothing]
-,
-testRegex "(abc|)ef" [caseless]
-    ["ABCDEF"]
-    [Just [" 0: EF"]]
-,
-testRegex "(a|b)c*d" [caseless]
-    ["ABCD"]
-    [Just [" 0: BCD"]]
-,
-testRegex "(ab|ab*)bc" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "a([bc]*)c*" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"],
-     Just [" 1: AB"],
-     Just [" 2: A"]]
-,
-testRegex "a([bc]*)(c*d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "a([bc]+)(c*d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "a([bc]*)(c+d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "a[bcd]*dcdcde" [caseless]
-    ["ADCDCDE"]
-    [Just [" 0: ADCDCDE"]]
-,
-testRegex "a[bcd]+dcdcde" [caseless]
-    []
-    []
-,
-testRegex "(ab|a)b*c" [caseless]
-    ["ABC"]
-    [Just [" 0: ABC"]]
-,
-testRegex "((a)(b)c)(d)" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "[a-zA-Z_][a-zA-Z0-9_]*" [caseless]
-    ["ALPHA"]
-    [Just [" 0: ALPHA"],
-     Just [" 1: ALPH"],
-     Just [" 2: ALP"],
-     Just [" 3: AL"],
-     Just [" 4: A"]]
-,
-testRegex "^a(bc+|b[eh])g|.h$" [caseless]
-    ["ABH"]
-    [Just [" 0: BH"]]
-,
-testRegex "(bc+d$|ef*g.|h?i(j|k))" [caseless]
-    ["EFFGZ",
-     "IJ",
-     "REFFGZ",
-     "*** Failers",
-     "ADCDCDE",
-     "EFFG",
-     "BCDD"]
-    [Just [" 0: EFFGZ"],
-     Just [" 0: IJ"],
-     Just [" 0: EFFGZ"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((((((((((a))))))))))" [caseless]
-    ["A"]
-    [Just [" 0: A"]]
-,
-testRegex "(((((((((a)))))))))" [caseless]
-    ["A"]
-    [Just [" 0: A"]]
-,
-testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))" [caseless]
-    ["A"]
-    [Just [" 0: A"]]
-,
-testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))" [caseless]
-    ["C"]
-    [Just [" 0: C"]]
-,
-testRegex "multiple words of text" [caseless]
-    ["*** Failers",
-     "AA",
-     "UH-UH"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "multiple words" [caseless]
-    ["MULTIPLE WORDS, YEAH"]
-    [Just [" 0: MULTIPLE WORDS"]]
-,
-testRegex "(.*)c(.*)" [caseless]
-    ["ABCDE"]
-    [Just [" 0: ABCDE"],
-     Just [" 1: ABCD"],
-     Just [" 2: ABC"]]
-,
-testRegex "\\((.*), (.*)\\)" [caseless]
-    ["(A, B)"]
-    [Just [" 0: (A, B)"]]
-,
-testRegex "[k]" [caseless]
-    []
-    []
-,
-testRegex "abcd" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "a(bc)d" [caseless]
-    ["ABCD"]
-    [Just [" 0: ABCD"]]
-,
-testRegex "a[-]?c" [caseless]
-    ["AC"]
-    [Just [" 0: AC"]]
-,
-testRegex "a(?!b)." []
-    ["abad"]
-    [Just [" 0: ad"]]
-,
-testRegex "a(?=d)." []
-    ["abad"]
-    [Just [" 0: ad"]]
-,
-testRegex "a(?=c|d)." []
-    ["abad"]
-    [Just [" 0: ad"]]
-,
-testRegex "a(?:b|c|d)(.)" []
-    ["ace"]
-    [Just [" 0: ace"]]
-,
-testRegex "a(?:b|c|d)*(.)" []
-    ["ace"]
-    [Just [" 0: ace"],
-     Just [" 1: ac"]]
-,
-testRegex "a(?:b|c|d)+?(.)" []
-    ["ace",
-     "acdbcdbe"]
-    [Just [" 0: ace"],
-     Just [" 0: acdbcdbe"],
-     Just [" 1: acdbcdb"],
-     Just [" 2: acdbcd"],
-     Just [" 3: acdbc"],
-     Just [" 4: acdb"],
-     Just [" 5: acd"]]
-,
-testRegex "a(?:b|c|d)+(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: acdbcdb"],
-     Just [" 2: acdbcd"],
-     Just [" 3: acdbc"],
-     Just [" 4: acdb"],
-     Just [" 5: acd"]]
-,
-testRegex "a(?:b|c|d){2}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdb"]]
-,
-testRegex "a(?:b|c|d){4,5}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdb"],
-     Just [" 1: acdbcd"]]
-,
-testRegex "a(?:b|c|d){4,5}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdb"],
-     Just [" 1: acdbcd"]]
-,
-testRegex "((foo)|(bar))*" []
-    ["foobar"]
-    [Just [" 0: foobar"],
-     Just [" 1: foo"],
-     Just [" 2: "]]
-,
-testRegex "a(?:b|c|d){6,7}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"]]
-,
-testRegex "a(?:b|c|d){6,7}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"]]
-,
-testRegex "a(?:b|c|d){5,6}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: acdbcdb"]]
-,
-testRegex "a(?:b|c|d){5,6}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: acdbcdb"]]
-,
-testRegex "a(?:b|c|d){5,7}(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: acdbcdb"]]
-,
-testRegex "a(?:b|c|d){5,7}?(.)" []
-    ["acdbcdbe"]
-    [Just [" 0: acdbcdbe"],
-     Just [" 1: acdbcdb"]]
-,
-testRegex "a(?:b|(c|e){1,2}?|d)+?(.)" []
-    ["ace"]
-    [Just [" 0: ace"]]
-,
-testRegex "^(.+)?B" []
-    ["AB"]
-    [Just [" 0: AB"]]
-,
-testRegex "^([^a-z])|(\\^)$" []
-    ["."]
-    [Just [" 0: ."]]
-,
-testRegex "^[<>]&" []
-    ["<&OUT"]
-    [Just [" 0: <&"]]
-,
-testRegex "(?:(f)(o)(o)|(b)(a)(r))*" []
-    ["foobar"]
-    [Just [" 0: foobar"],
-     Just [" 1: foo"],
-     Just [" 2: "]]
-,
-testRegex "(?<=a)b" []
-    ["ab",
-     "*** Failers",
-     "cb",
-     "b"]
-    [Just [" 0: b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<!c)b" []
-    ["ab",
-     "b",
-     "b"]
-    [Just [" 0: b"],
-     Just [" 0: b"],
-     Just [" 0: b"]]
-,
-testRegex "(?:..)*a" []
-    ["aba"]
-    [Just [" 0: aba"],
-     Just [" 1: a"]]
-,
-testRegex "(?:..)*?a" []
-    ["aba"]
-    [Just [" 0: aba"],
-     Just [" 1: a"]]
-,
-testRegex "^(){3,5}" []
-    ["abc"]
-    [Just [" 0: "]]
-,
-testRegex "^(a+)*ax" []
-    ["aax"]
-    [Just [" 0: aax"]]
-,
-testRegex "^((a|b)+)*ax" []
-    ["aax"]
-    [Just [" 0: aax"]]
-,
-testRegex "^((a|bc)+)*ax" []
-    ["aax"]
-    [Just [" 0: aax"]]
-,
-testRegex "(a|x)*ab" []
-    ["cab"]
-    [Just [" 0: ab"]]
-,
-testRegex "(a)*ab" []
-    ["cab"]
-    [Just [" 0: ab"]]
-,
-testRegex "(?:(?i)a)b" []
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "((?i)a)b" []
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "(?:(?i)a)b" []
-    ["Ab"]
-    [Just [" 0: Ab"]]
-,
-testRegex "((?i)a)b" []
-    ["Ab"]
-    [Just [" 0: Ab"]]
-,
-testRegex "(?:(?i)a)b" []
-    ["*** Failers",
-     "cb",
-     "aB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?i)a)b" []
-    []
-    []
-,
-testRegex "(?i:a)b" []
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "((?i:a))b" []
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "(?i:a)b" []
-    ["Ab"]
-    [Just [" 0: Ab"]]
-,
-testRegex "((?i:a))b" []
-    ["Ab"]
-    [Just [" 0: Ab"]]
-,
-testRegex "(?i:a)b" []
-    ["*** Failers",
-     "aB",
-     "aB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?i:a))b" []
-    []
-    []
-,
-testRegex "(?:(?-i)a)b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "((?-i)a)b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "(?:(?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "((?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "(?:(?-i)a)b" [caseless]
-    ["*** Failers",
-     "aB",
-     "Ab"]
-    [Nothing,
-     Just [" 0: aB"],
-     Nothing]
-,
-testRegex "((?-i)a)b" [caseless]
-    []
-    []
-,
-testRegex "(?:(?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "((?-i)a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "(?:(?-i)a)b" [caseless]
-    ["*** Failers",
-     "Ab",
-     "AB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?-i)a)b" [caseless]
-    []
-    []
-,
-testRegex "(?-i:a)b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "((?-i:a))b" [caseless]
-    ["ab"]
-    [Just [" 0: ab"]]
-,
-testRegex "(?-i:a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "((?-i:a))b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "(?-i:a)b" [caseless]
-    ["*** Failers",
-     "AB",
-     "Ab"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?-i:a))b" [caseless]
-    []
-    []
-,
-testRegex "(?-i:a)b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "((?-i:a))b" [caseless]
-    ["aB"]
-    [Just [" 0: aB"]]
-,
-testRegex "(?-i:a)b" [caseless]
-    ["*** Failers",
-     "Ab",
-     "AB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?-i:a))b" [caseless]
-    []
-    []
-,
-testRegex "((?-i:a.))b" [caseless]
-    ["*** Failers",
-     "AB",
-     "a\\nB"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?s-i:a.))b" [caseless]
-    ["a\\nB"]
-    [Just [" 0: a\\x0aB"]]
-,
-testRegex "(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))" []
-    ["cabbbb"]
-    [Just [" 0: cabbbb"]]
-,
-testRegex "(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))" []
-    ["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]
-    [Just [" 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]]
-,
-testRegex "foo\\w*\\d{4}baz" []
-    ["foobar1234baz"]
-    [Just [" 0: foobar1234baz"]]
-,
-testRegex "x(~~)*(?:(?:F)?)?" []
-    ["x~~"]
-    [Just [" 0: x~~"],
-     Just [" 1: x"]]
-,
-testRegex "^a(?#xxx){3}c" []
-    ["aaac"]
-    [Just [" 0: aaac"]]
-,
-testRegex "^a (?#xxx) (?#yyy) {3}c" [ERROR]
-    ["aaac"]
-    [Just [" 0: aaac"]]
-,
-testRegex "(?<![cd])b" []
-    ["*** Failers",
-     "B\\nB",
-     "dbcb"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?<![cd])[ab]" []
-    ["dbaacb"]
-    [Just [" 0: a"]]
-,
-testRegex "(?<!(c|d))b" []
-    []
-    []
-,
-testRegex "(?<!(c|d))[ab]" []
-    ["dbaacb"]
-    [Just [" 0: a"]]
-,
-testRegex "(?<!cd)[ab]" []
-    ["cdaccb"]
-    [Just [" 0: b"]]
-,
-testRegex "^(?:a?b?)*$" []
-    ["*** Failers",
-     "dbcb",
-     "a--"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?s)^a(.))((?m)^b$)" []
-    ["a\\nb\\nc\\n"]
-    [Just [" 0: a\\x0ab"]]
-,
-testRegex "((?m)^b$)" []
-    ["a\\nb\\nc\\n"]
-    [Just [" 0: b"]]
-,
-testRegex "(?m)^b" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"]]
-,
-testRegex "(?m)^(b)" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"]]
-,
-testRegex "((?m)^b)" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"]]
-,
-testRegex "\\n((?m)^b)" []
-    ["a\\nb\\n"]
-    [Just [" 0: \\x0ab"]]
-,
-testRegex "((?s).)c(?!.)" []
-    ["a\\nb\\nc\\n",
-     "a\\nb\\nc\\n"]
-    [Just [" 0: \\x0ac"],
-     Just [" 0: \\x0ac"]]
-,
-testRegex "((?s)b.)c(?!.)" []
-    ["a\\nb\\nc\\n",
-     "a\\nb\\nc\\n"]
-    [Just [" 0: b\\x0ac"],
-     Just [" 0: b\\x0ac"]]
-,
-testRegex "^b" []
-    []
-    []
-,
-testRegex "()^b" []
-    ["*** Failers",
-     "a\\nb\\nc\\n",
-     "a\\nb\\nc\\n"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "((?m)^b)" []
-    ["a\\nb\\nc\\n"]
-    [Just [" 0: b"]]
-,
-testRegex "(?(?!a)a|b)" []
-    []
-    []
-,
-testRegex "(?(?!a)b|a)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-testRegex "(?(?=a)b|a)" []
-    ["*** Failers",
-     "a",
-     "a"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "(?(?=a)a|b)" []
-    ["a"]
-    [Just [" 0: a"]]
-,
-testRegex "(\\w+:)+" []
-    ["one:"]
-    [Just [" 0: one:"]]
-,
-testRegex "$(?<=^(a))" []
-    ["a"]
-    [Just [" 0: "]]
-,
-testRegex "([\\w:]+::)?(\\w+)$" []
-    ["abcd",
-     "xy:z:::abcd"]
-    [Just [" 0: abcd"],
-     Just [" 0: xy:z:::abcd"]]
-,
-testRegex "^[^bcd]*(c+)" []
-    ["aexycd"]
-    [Just [" 0: aexyc"]]
-,
-testRegex "(a*)b+" []
-    ["caab"]
-    [Just [" 0: aab"]]
-,
-testRegex "([\\w:]+::)?(\\w+)$" []
-    ["abcd",
-     "xy:z:::abcd",
-     "*** Failers",
-     "abcd:",
-     "abcd:"]
-    [Just [" 0: abcd"],
-     Just [" 0: xy:z:::abcd"],
-     Just [" 0: Failers"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[^bcd]*(c+)" []
-    ["aexycd"]
-    [Just [" 0: aexyc"]]
-,
-testRegex "(>a+)ab" []
-    []
-    []
-,
-testRegex "(?>a+)b" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-testRegex "([[:]+)" []
-    ["a:[b]:"]
-    [Just [" 0: :["],
-     Just [" 1: :"]]
-,
-testRegex "([[=]+)" []
-    ["a=[b]="]
-    [Just [" 0: =["],
-     Just [" 1: ="]]
-,
-testRegex "([[.]+)" []
-    ["a.[b]."]
-    [Just [" 0: .["],
-     Just [" 1: ."]]
-,
-testRegex "((?>a+)b)" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-testRegex "(?>(a+))b" []
-    ["aaab"]
-    [Just [" 0: aaab"]]
-,
-testRegex "((?>[^()]+)|\\([^()]*\\))+" []
-    ["((abc(ade)ufh()()x"]
-    [Just [" 0: abc(ade)ufh()()x"],
-     Just [" 1: abc(ade)ufh()()"],
-     Just [" 2: abc(ade)ufh()"],
-     Just [" 3: abc(ade)ufh"],
-     Just [" 4: abc(ade)"],
-     Just [" 5: abc"]]
-,
-testRegex "a\\Z" []
-    ["*** Failers",
-     "aaab",
-     "a\\nb\\n"]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "b\\Z" []
-    ["a\\nb\\n"]
-    [Just [" 0: b"]]
-,
-testRegex "b\\z" []
-    []
-    []
-,
-testRegex "b\\Z" []
-    ["a\\nb"]
-    [Just [" 0: b"]]
-,
-testRegex "b\\z" []
-    ["a\\nb",
-     "*** Failers",
-     "",
-     "/(?>.*)(?<=(abcd|wxyz))/",
-     "alphabetabcd",
-     "endingwxyz",
-     "*** Failers",
-     "a rather long string that doesn't end with one of them"]
-    [Just [" 0: b"],
-     Nothing,
-     Just ["/(?>.*)(?<=(abcd|wxyz))/"],
-     Just [" 0: alphabetabcd"],
-     Just [" 0: endingwxyz"],
-     Nothing,
-     Nothing]
-,
-testRegex "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" []
-    ["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
-     "word cat dog elephant mussel cow horse canary baboon snake shark",
-     "",
-     "/word (?>[a-zA-Z0-9]+ ){0,30}otherword/",
-     "word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
-    [Just [" 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
-     Nothing,
-     Just ["/word (?>[a-zA-Z0-9]+ ){0,30}otherword/"],
-     Nothing]
-,
-testRegex "(?<=\\d{3}(?!999))foo" []
-    ["999foo",
-     "123999foo ",
-     "*** Failers",
-     "123abcfoo",
-     "",
-     "/(?<=(?!...999)\\d{3})foo/",
-     "999foo",
-     "123999foo ",
-     "*** Failers",
-     "123abcfoo"]
-    [Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Just ["/(?<=(?!...999)\\d{3})foo/"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=\\d{3}(?!999)...)foo" []
-    ["123abcfoo",
-     "123456foo ",
-     "*** Failers",
-     "123999foo  ",
-     "",
-     "/(?<=\\d{3}...)(?<!999)foo/",
-     "123abcfoo   ",
-     "123456foo ",
-     "*** Failers",
-     "123999foo  "]
-    [Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing,
-     Just ["/(?<=\\d{3}...)(?<!999)foo/"],
-     Just [" 0: foo"],
-     Just [" 0: foo"],
-     Nothing,
-     Nothing]
-,
-testRegex "((Z)+|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: Z"],
-     Just [" 2: "]]
-,
-testRegex "(Z()|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: Z"],
-     Just [" 2: "]]
-,
-testRegex "(Z(())|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: Z"],
-     Just [" 2: "]]
-,
-testRegex "((?>Z)+|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: ZA"],
-     Just [" 1: Z"],
-     Just [" 2: "]]
-,
-testRegex "((?>)+|A)*" []
-    ["ZABCDEFG"]
-    [Just [" 0: "]]
-,
-testRegex "a*" [ERROR]
-    ["abbab"]
-    [Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 0: "]]
-,
-testRegex "^[a-\\d]" []
-    ["abcde",
-     "-things",
-     "0digit",
-     "*** Failers",
-     "bcdef    "]
-    [Just [" 0: a"],
-     Just [" 0: -"],
-     Just [" 0: 0"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\d-a]" []
-    ["abcde",
-     "-things",
-     "0digit",
-     "*** Failers",
-     "bcdef    ",
-     "",
-     "/[[:space:]]+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/[[:blank:]]+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/[\\s]+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/\\s+/",
-     "> \\x09\\x0a\\x0c\\x0d\\x0b<",
-     "",
-     "/a\vb/x",
-     "ab"]
-    [Just [" 0: a"],
-     Just [" 0: -"],
-     Just [" 0: 0"],
-     Nothing,
-     Nothing,
-     Just ["/[[:space:]]+/"],
-     Just [" 0:  \\x09\\x0a\\x0c\\x0d\\x0b"],
-     Just [" 1:  \\x09\\x0a\\x0c\\x0d"],
-     Just [" 2:  \\x09\\x0a\\x0c"],
-     Just [" 3:  \\x09\\x0a"],
-     Just [" 4:  \\x09"],
-     Just [" 5:  "],
-     Just ["/[[:blank:]]+/"],
-     Just [" 0:  \\x09"],
-     Just [" 1:  "],
-     Just ["/[\\s]+/"],
-     Just [" 0:  \\x09\\x0a\\x0c\\x0d"],
-     Just [" 1:  \\x09\\x0a\\x0c"],
-     Just [" 2:  \\x09\\x0a"],
-     Just [" 3:  \\x09"],
-     Just [" 4:  "],
-     Just ["/\\s+/"],
-     Just [" 0:  \\x09\\x0a\\x0c\\x0d"],
-     Just [" 1:  \\x09\\x0a\\x0c"],
-     Just [" 2:  \\x09\\x0a"],
-     Just [" 3:  \\x09"],
-     Just [" 4:  "],
-     Just ["/a\vb/x"],
-     Nothing]
-,
-testRegex "(?!\\A)x" [ERROR]
-    ["a\\nxb\\n"]
-    [Just [" 0: x"]]
-,
-testRegex "(?!^)x" [ERROR]
-    ["a\\nxb\\n"]
-    [Nothing]
-,
-testRegex "abc\\Qabc\\Eabc" []
-    ["abcabcabc",
-     "",
-     "/abc\\Q(*+|\\Eabc/",
-     "abc(*+|abc "]
-    [Just [" 0: abcabcabc"],
-     Just ["/abc\\Q(*+|\\Eabc/"],
-     Just [" 0: abc(*+|abc"]]
-,
-testRegex "   abc\\Q abc\\Eabc" [ERROR]
-    ["abc abcabc",
-     "*** Failers",
-     "abcabcabc  ",
-     "",
-     "/abc#comment",
-     "\\Q#not comment",
-     "literal\\E/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc abcabc"],
-     Nothing,
-     Nothing,
-     Just ["/abc#comment"],
-     Just [" 0: abc#not comment\\x0a    literal"]]
-,
-testRegex "ERROR" []
-    ["\\Q#not comment",
-     "literal/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc#not comment\\x0a    literal"]]
-,
-testRegex "ERROR" []
-    ["\\Q#not comment",
-     "literal\\E #more comment",
-     "/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc#not comment\\x0a    literal"]]
-,
-testRegex "ERROR" []
-    ["\\Q#not comment",
-     "literal\\E #more comment/x",
-     "abc#not comment\\n    literal     "]
-    [Just [" 0: abc#not comment\\x0a    literal"]]
-,
-testRegex "\\Qabc\\$xyz\\E" []
-    ["abc\\\\\\$xyz"]
-    [Just [" 0: abc\\$xyz"]]
-,
-testRegex "\\Qabc\\E\\$\\Qxyz\\E" []
-    ["abc\\$xyz"]
-    [Just [" 0: abc$xyz"]]
-,
-testRegex "\\Gabc" []
-    ["abc",
-     "*** Failers",
-     "xyzabc  "]
-    [Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\Gabc." [ERROR]
-    ["abc1abc2xyzabc3"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"]]
-,
-testRegex "abc." [ERROR]
-    ["abc1abc2xyzabc3 "]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"]]
-,
-testRegex "a(?x: b c )d" []
-    ["XabcdY",
-     "*** Failers ",
-     "Xa b c d Y "]
-    [Just [" 0: abcd"],
-     Nothing,
-     Nothing]
-,
-testRegex "((?x)x y z | a b c)" []
-    ["XabcY",
-     "AxyzB "]
-    [Just [" 0: abc"],
-     Just [" 0: xyz"]]
-,
-testRegex "(?i)AB(?-i)C" []
-    ["XabCY",
-     "*** Failers",
-     "XabcY  "]
-    [Just [" 0: abC"],
-     Nothing,
-     Nothing]
-,
-testRegex "((?i)AB(?-i)C|D)E" []
-    ["abCE",
-     "DE",
-     "*** Failers",
-     "abcE",
-     "abCe  ",
-     "dE",
-     "De    "]
-    [Just [" 0: abCE"],
-     Just [" 0: DE"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[z\\Qa-d]\\E]" []
-    ["z",
-     "a",
-     "-",
-     "d",
-     "] ",
-     "*** Failers",
-     "b     "]
-    [Just [" 0: z"],
-     Just [" 0: a"],
-     Just [" 0: -"],
-     Just [" 0: d"],
-     Just [" 0: ]"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "[\\z\\C]" []
-    ["z",
-     "C ",
-     "",
-     "/\\M/",
-     "M ",
-     "",
-     "/(a+)*b/",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
-     "",
-     "/(?i)reg(?:ul(?:[a\228]|ae)r|ex)/",
-     "REGular",
-     "regulaer",
-     "Regex  ",
-     "regul\228r "]
-    [Just [" 0: z"],
-     Just [" 0: C"],
-     Just ["/\\M/"],
-     Just [" 0: M"],
-     Just ["/(a+)*b/"],
-     Nothing,
-     Just ["/(?i)reg(?:ul(?:[a\228]|ae)r|ex)/"],
-     Just [" 0: REGular"],
-     Just [" 0: regulaer"],
-     Just [" 0: Regex"],
-     Just [" 0: regul\\xe4r"]]
-,
-testRegex "\197\230\229\228[\224-\255\192-\223]+" []
-    ["\197\230\229\228\224",
-     "\197\230\229\228\255",
-     "\197\230\229\228\192",
-     "\197\230\229\228\223"]
-    [Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xe0"],
-     Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xff"],
-     Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xc0"],
-     Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xdf"]]
-,
-testRegex "(?<=Z)X." []
-    ["\\x84XAZXB"]
-    [Just [" 0: XB"]]
-,
-testRegex "^(?(2)a|(1)(2))+$" []
-    ["123a"]
-    [Just ["Error -17"]]
-,
-testRegex "(?<=a|bbbb)c" []
-    ["ac",
-     "bbbbc"]
-    [Just [" 0: c"],
-     Just [" 0: c"]]
-,
-testRegex "abc" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "*** Failers",
-     "bca",
-     "",
-     "/abc/F>testsavedregex",
-     "<testsavedregex",
-     "abc",
-     "*** Failers",
-     "bca"]
-    [Just ["Compiled regex written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex loaded from testsavedregex"],
-     Just ["No study data"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Just ["/abc/F>testsavedregex"],
-     Just ["Compiled regex written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
-     Just ["No study data"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "(a|b)" [ERROR]
-    ["<testsavedregex",
-     "abc",
-     "*** Failers",
-     "def  ",
-     "",
-     "/(a|b)/SF>testsavedregex",
-     "<testsavedregex",
-     "abc",
-     "*** Failers",
-     "def  ",
-     "",
-     "/line\\nbreak/",
-     "this is a line\\nbreak",
-     "line one\\nthis is a line\\nbreak in the second line "]
-    [Just ["Compiled regex written to testsavedregex"],
-     Just ["Study data written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex loaded from testsavedregex"],
-     Just ["Study data loaded from testsavedregex"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Nothing,
-     Just ["/(a|b)/SF>testsavedregex"],
-     Just ["Compiled regex written to testsavedregex"],
-     Just ["Study data written to testsavedregex"],
-     Just ["<testsavedregex"],
-     Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
-     Just ["Study data loaded from testsavedregex"],
-     Just [" 0: a"],
-     Just [" 0: a"],
-     Nothing,
-     Just ["/line\\nbreak/"],
-     Just [" 0: line\\x0abreak"],
-     Just [" 0: line\\x0abreak"]]
-,
-testRegex "line\\nbreak" [ERROR]
-    ["this is a line\\nbreak",
-     "** Failers ",
-     "line one\\nthis is a line\\nbreak in the second line "]
-    [Just [" 0: line\\x0abreak"],
-     Nothing,
-     Nothing]
-,
-testRegex "line\\nbreak" [ERROR]
-    ["this is a line\\nbreak",
-     "** Failers ",
-     "line one\\nthis is a line\\nbreak in the second line "]
-    [Just [" 0: line\\x0abreak"],
-     Nothing,
-     Nothing]
-,
-testRegex "1234" []
-    ["123\\P",
-     "a4\\P\\R"]
-    [Just ["Partial match: 123"],
-     Nothing]
-,
-testRegex "1234" []
-    ["123\\P",
-     "4\\P\\R"]
-    [Just ["Partial match: 123"],
-     Just [" 0: 4"]]
-,
-testRegex "^" [ERROR]
-    ["a\\nb\\nc\\n",
-     "\\ ",
-     "",
-     "/(?<=C\\n)^/mg",
-     "A\\nC\\nC\\n "]
-    [Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just ["/(?<=C\\n)^/mg"],
-     Just [" 0: "]]
-,
-testRegex "(?s)A?B" []
-    ["AB",
-     "aB  "]
-    [Just [" 0: AB"],
-     Just [" 0: B"]]
-,
-testRegex "(?s)A*B" []
-    ["AB",
-     "aB  "]
-    [Just [" 0: AB"],
-     Just [" 0: B"]]
-,
-testRegex "(?m)A?B" []
-    ["AB",
-     "aB  "]
-    [Just [" 0: AB"],
-     Just [" 0: B"]]
-,
-testRegex "(?m)A*B" []
-    ["AB",
-     "aB  "]
-    [Just [" 0: AB"],
-     Just [" 0: B"]]
-,
-testRegex "Content-Type\\x3A[^\\r\\n]{6,}" []
-    ["Content-Type:xxxxxyyy "]
-    [Just [" 0: Content-Type:xxxxxyyy"],
-     Just [" 1: Content-Type:xxxxxyy"],
-     Just [" 2: Content-Type:xxxxxy"]]
-,
-testRegex "Content-Type\\x3A[^\\r\\n]{6,}z" []
-    ["Content-Type:xxxxxyyyz"]
-    [Just [" 0: Content-Type:xxxxxyyyz"]]
-,
-testRegex "Content-Type\\x3A[^a]{6,}" []
-    ["Content-Type:xxxyyy "]
-    [Just [" 0: Content-Type:xxxyyy"]]
-,
-testRegex "Content-Type\\x3A[^a]{6,}z" []
-    ["Content-Type:xxxyyyz"]
-    [Just [" 0: Content-Type:xxxyyyz"]]
-,
-testRegex "^abc" [ERROR]
-    ["xyz\\nabc",
-     "xyz\\nabc\\<lf>",
-     "xyz\\r\\nabc\\<lf>",
-     "xyz\\rabc\\<cr>",
-     "xyz\\r\\nabc\\<crlf>",
-     "** Failers ",
-     "xyz\\nabc\\<cr>",
-     "xyz\\r\\nabc\\<cr>",
-     "xyz\\nabc\\<crlf>",
-     "xyz\\rabc\\<crlf>",
-     "xyz\\rabc\\<lf>",
-     "",
-     "/abc$/m<lf>",
-     "xyzabc",
-     "xyzabc\\n ",
-     "xyzabc\\npqr ",
-     "xyzabc\\r\\<cr> ",
-     "xyzabc\\rpqr\\<cr> ",
-     "xyzabc\\r\\n\\<crlf> ",
-     "xyzabc\\r\\npqr\\<crlf> ",
-     "** Failers",
-     "xyzabc\\r ",
-     "xyzabc\\rpqr ",
-     "xyzabc\\r\\n ",
-     "xyzabc\\r\\npqr ",
-     "",
-     "/^abc/m<cr>",
-     "xyz\\rabcdef",
-     "xyz\\nabcdef\\<lf>",
-     "** Failers  ",
-     "xyz\\nabcdef",
-     "",
-     "/^abc/m<lf>",
-     "xyz\\nabcdef",
-     "xyz\\rabcdef\\<cr>",
-     "** Failers  ",
-     "xyz\\rabcdef",
-     "",
-     "/^abc/m<crlf>",
-     "xyz\\r\\nabcdef",
-     "xyz\\rabcdef\\<cr>",
-     "** Failers  ",
-     "xyz\\rabcdef",
-     "",
-     "/.*/<lf>",
-     "abc\\ndef",
-     "abc\\rdef",
-     "abc\\r\\ndef",
-     "\\<cr>abc\\ndef",
-     "\\<cr>abc\\rdef",
-     "\\<cr>abc\\r\\ndef",
-     "\\<crlf>abc\\ndef",
-     "\\<crlf>abc\\rdef",
-     "\\<crlf>abc\\r\\ndef"]
-    [Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/abc$/m<lf>"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^abc/m<cr>"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Just ["/^abc/m<lf>"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Just ["/^abc/m<crlf>"],
-     Just [" 0: abc"],
-     Just [" 0: abc"],
-     Nothing,
-     Nothing,
-     Just ["/.*/<lf>"],
-     Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 2: a"],
-     Just [" 3: "],
-     Just [" 0: abc\\x0ddef"],
-     Just [" 1: abc\\x0dde"],
-     Just [" 2: abc\\x0dd"],
-     Just [" 3: abc\\x0d"],
-     Just [" 4: abc"],
-     Just [" 5: ab"],
-     Just [" 6: a"],
-     Just [" 7: "],
-     Just [" 0: abc\\x0d"],
-     Just [" 1: abc"],
-     Just [" 2: ab"],
-     Just [" 3: a"],
-     Just [" 4: "],
-     Just [" 0: abc\\x0adef"],
-     Just [" 1: abc\\x0ade"],
-     Just [" 2: abc\\x0ad"],
-     Just [" 3: abc\\x0a"],
-     Just [" 4: abc"],
-     Just [" 5: ab"],
-     Just [" 6: a"],
-     Just [" 7: "],
-     Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 2: a"],
-     Just [" 3: "],
-     Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 2: a"],
-     Just [" 3: "],
-     Just [" 0: abc\\x0adef"],
-     Just [" 1: abc\\x0ade"],
-     Just [" 2: abc\\x0ad"],
-     Just [" 3: abc\\x0a"],
-     Just [" 4: abc"],
-     Just [" 5: ab"],
-     Just [" 6: a"],
-     Just [" 7: "],
-     Just [" 0: abc\\x0ddef"],
-     Just [" 1: abc\\x0dde"],
-     Just [" 2: abc\\x0dd"],
-     Just [" 3: abc\\x0d"],
-     Just [" 4: abc"],
-     Just [" 5: ab"],
-     Just [" 6: a"],
-     Just [" 7: "],
-     Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 2: a"],
-     Just [" 3: "]]
-,
-testRegex "\\w+(.)(.)?def" [ERROR]
-    ["abc\\ndef",
-     "abc\\rdef",
-     "abc\\r\\ndef"]
-    [Just [" 0: abc\\x0adef"],
-     Just [" 0: abc\\x0ddef"],
-     Just [" 0: abc\\x0d\\x0adef"]]
-,
-testRegex "^\\w+=.*(\\\\\\n.*)*" []
-    ["abc=xyz\\\\\\npqr"]
-    [Just [" 0: abc=xyz\\\\x0apqr"],
-     Just [" 1: abc=xyz\\\\x0apq"],
-     Just [" 2: abc=xyz\\\\x0ap"],
-     Just [" 3: abc=xyz\\\\x0a"],
-     Just [" 4: abc=xyz\\"],
-     Just [" 5: abc=xyz"],
-     Just [" 6: abc=xy"],
-     Just [" 7: abc=x"],
-     Just [" 8: abc="]]
-,
-testRegex "^(a()*)*" []
-    ["aaaa"]
-    [Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 4: "]]
-,
-testRegex "^(?:a(?:(?:))*)*" []
-    ["aaaa"]
-    [Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"],
-     Just [" 4: "]]
-,
-testRegex "^(a()+)+" []
-    ["aaaa"]
-    [Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"]]
-,
-testRegex "^(?:a(?:(?:))+)+" []
-    ["aaaa"]
-    [Just [" 0: aaaa"],
-     Just [" 1: aaa"],
-     Just [" 2: aa"],
-     Just [" 3: a"]]
-,
-testRegex "(a|)*\\d" []
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
-,
-testRegex "(?>a|)*\\d" []
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
-,
-testRegex "(?:a|)*\\d" []
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
-    [Nothing,
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
-,
-testRegex "^a.b" [ERROR]
-    ["a\\rb",
-     "a\\nb\\<cr> ",
-     "** Failers",
-     "a\\nb",
-     "a\\nb\\<any>",
-     "a\\rb\\<cr>   ",
-     "a\\rb\\<any>   "]
-    [Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^abc." [ERROR]
-    ["abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc6"],
-     Just [" 0: abc7"]]
-,
-testRegex "abc.$" [ERROR]
-    ["abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc7\\x{2028} abc8\\x{2029} abc9"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc6"],
-     Just [" 0: abc9"]]
-,
-testRegex "^a\\Rb" [ERROR]
-    ["a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x85b   ",
-     "** Failers",
-     "a\\n\\rb    "]
-    [Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x0bb"],
-     Just [" 0: a\\x0cb"],
-     Just [" 0: a\\x85b"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a\\R*b" [ERROR]
-    ["ab",
-     "a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x85b   ",
-     "a\\n\\rb    ",
-     "a\\n\\r\\x85\\x0cb "]
-    [Just [" 0: ab"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x0bb"],
-     Just [" 0: a\\x0cb"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0d\\x85\\x0cb"]]
-,
-testRegex "^a\\R+b" [ERROR]
-    ["a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x85b   ",
-     "a\\n\\rb    ",
-     "a\\n\\r\\x85\\x0cb ",
-     "** Failers",
-     "ab  ",
-     "",
-     "/^a\\R{1,3}b/<bsr_unicode>",
-     "a\\nb",
-     "a\\n\\rb",
-     "a\\n\\r\\x85b",
-     "a\\r\\n\\r\\nb ",
-     "a\\r\\n\\r\\n\\r\\nb ",
-     "a\\n\\r\\n\\rb",
-     "a\\n\\n\\r\\nb ",
-     "** Failers",
-     "a\\n\\n\\n\\rb",
-     "a\\r"]
-    [Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x0bb"],
-     Just [" 0: a\\x0cb"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0d\\x85\\x0cb"],
-     Nothing,
-     Nothing,
-     Just ["/^a\\R{1,3}b/<bsr_unicode>"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0d\\x85b"],
-     Just [" 0: a\\x0d\\x0a\\x0d\\x0ab"],
-     Just [" 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab"],
-     Just [" 0: a\\x0a\\x0d\\x0a\\x0db"],
-     Just [" 0: a\\x0a\\x0a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^a[\\R]b" [ERROR]
-    ["aRb",
-     "** Failers",
-     "a\\nb  "]
-    [Just [" 0: aRb"],
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" []
-    ["afoo",
-     "** Failers ",
-     "\\r\\nfoo ",
-     "\\nfoo "]
-    [Just [" 0: afoo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" [ERROR]
-    ["afoo",
-     "\\nfoo ",
-     "** Failers ",
-     "\\r\\nfoo "]
-    [Just [" 0: afoo"],
-     Just [" 0: \\x0afoo"],
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" [ERROR]
-    ["afoo",
-     "** Failers ",
-     "\\nfoo ",
-     "\\r\\nfoo "]
-    [Just [" 0: afoo"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex ".+foo" [ERROR]
-    ["afoo",
-     "\\r\\nfoo ",
-     "\\nfoo "]
-    [Just [" 0: afoo"],
-     Just [" 0: \\x0d\\x0afoo"],
-     Just [" 0: \\x0afoo"]]
-,
-testRegex "^$" [ERROR]
-    ["abc\\r\\rxyz",
-     "abc\\n\\rxyz  ",
-     "** Failers ",
-     "abc\\r\\nxyz"]
-    [Just [" 0: "],
-     Just [" 0: "],
-     Nothing,
-     Nothing]
-,
-testRegex "^X" [ERROR]
-    ["XABC",
-     "** Failers ",
-     "XABC\\B"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?m)^$" [ERROR]
-    ["abc\\r\\n\\r\\n"]
-    [Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a"]]
-,
-testRegex "(?m)^$|^\\r\\n" [ERROR]
-    ["abc\\r\\n\\r\\n",
-     "",
-     "/(?m)$/<any>g+ ",
-     "abc\\r\\n\\r\\n"]
-    [Just [" 0: \\x0d\\x0a"],
-     Just [" 0+ "],
-     Just [" 1: "],
-     Just ["/(?m)$/<any>g+ "],
-     Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a\\x0d\\x0a"],
-     Just [" 0: "],
-     Just [" 0+ \\x0d\\x0a"],
-     Just [" 0: "],
-     Just [" 0+ "]]
-,
-testRegex "(?|(abc)|(xyz))" []
-    [">abc<",
-     ">xyz< "]
-    [Just [" 0: abc"],
-     Just [" 0: xyz"]]
-,
-testRegex "(x)(?|(abc)|(xyz))(x)" []
-    ["xabcx",
-     "xxyzx "]
-    [Just [" 0: xabcx"],
-     Just [" 0: xxyzx"]]
-,
-testRegex "(x)(?|(abc)(pqr)|(xyz))(x)" []
-    ["xabcpqrx",
-     "xxyzx "]
-    [Just [" 0: xabcpqrx"],
-     Just [" 0: xxyzx"]]
-,
-testRegex "(?|(abc)|(xyz))(?1)" []
-    ["abcabc",
-     "xyzabc ",
-     "** Failers ",
-     "xyzxyz ",
-     "",
-     "/\\H\\h\\V\\v/",
-     "X X\\x0a",
-     "X\\x09X\\x0b",
-     "** Failers",
-     "\\xa0 X\\x0a   ",
-     "",
-     "/\\H*\\h+\\V?\\v{3,4}/ ",
-     "\\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a",
-     "\\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a",
-     "\\x09\\x20\\xa0\\x0a\\x0b\\x0c",
-     "** Failers ",
-     "\\x09\\x20\\xa0\\x0a\\x0b",
-     "",
-     "/\\H{3,4}/",
-     "XY  ABCDE",
-     "XY  PQR ST ",
-     "",
-     "/.\\h{3,4}./",
-     "XY  AB    PQRS"]
-    [Just [" 0: abcabc"],
-     Just [" 0: xyzabc"],
-     Nothing,
-     Nothing,
-     Just ["/\\H\\h\\V\\v/"],
-     Just [" 0: X X\\x0a"],
-     Just [" 0: X\\x09X\\x0b"],
-     Nothing,
-     Nothing,
-     Just ["/\\H*\\h+\\V?\\v{3,4}/ "],
-     Just [" 0: \\x09 \\xa0X\\x0a\\x0b\\x0c\\x0d"],
-     Just [" 1: \\x09 \\xa0X\\x0a\\x0b\\x0c"],
-     Just [" 0: \\x09 \\xa0\\x0a\\x0b\\x0c\\x0d"],
-     Just [" 1: \\x09 \\xa0\\x0a\\x0b\\x0c"],
-     Just [" 0: \\x09 \\xa0\\x0a\\x0b\\x0c"],
-     Nothing,
-     Nothing,
-     Just ["/\\H{3,4}/"],
-     Just [" 0: ABCD"],
-     Just [" 1: ABC"],
-     Just [" 0: PQR"],
-     Just ["/.\\h{3,4}./"],
-     Just [" 0: B    P"],
-     Just [" 1: B    "]]
-,
-testRegex "\\h*X\\h?\\H+Y\\H?Z" []
-    [">XNNNYZ",
-     ">  X NYQZ",
-     "** Failers",
-     ">XYZ   ",
-     ">  X NY Z"]
-    [Just [" 0: XNNNYZ"],
-     Just [" 0:   X NYQZ"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c" []
-    [">XY\\x0aZ\\x0aA\\x0bNN\\x0c",
-     ">\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c"]
-    [Just [" 0: XY\\x0aZ\\x0aA\\x0bNN\\x0c"],
-     Just [" 0: \\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c"]]
-,
-testRegex ".+A" [ERROR]
-    ["\\r\\nA",
-     "",
-     "/\\nA/<crlf>",
-     "\\r\\nA "]
-    [Nothing,
-     Just ["/\\nA/<crlf>"],
-     Just [" 0: \\x0aA"]]
-,
-testRegex "[\\r\\n]A" [ERROR]
-    ["\\r\\nA "]
-    [Just [" 0: \\x0aA"]]
-,
-testRegex "(\\r|\\n)A" [ERROR]
-    ["\\r\\nA "]
-    [Just [" 0: \\x0aA"]]
-,
-testRegex "a\\Rb" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "** Failers",
-     "a\\x85b",
-     "a\\x0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\Rb" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "a\\x85b",
-     "a\\x0bb     ",
-     "** Failers ",
-     "a\\x85b\\<bsr_anycrlf>",
-     "a\\x0bb\\<bsr_anycrlf>",
-     "",
-     "/a\\R?b/I<bsr_anycrlf>",
-     "a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "** Failers",
-     "a\\x85b",
-     "a\\x0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0bb"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a\\R?b/I<bsr_anycrlf>"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\R?b" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "a\\x85b",
-     "a\\x0bb     ",
-     "** Failers ",
-     "a\\x85b\\<bsr_anycrlf>",
-     "a\\x0bb\\<bsr_anycrlf>",
-     "",
-     "/a\\R{2,4}b/I<bsr_anycrlf>",
-     "a\\r\\n\\nb",
-     "a\\n\\r\\rb",
-     "a\\r\\n\\r\\n\\r\\n\\r\\nb",
-     "** Failers",
-     "a\\x85\\85b",
-     "a\\x0b\\0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0db"],
-     Just [" 0: a\\x0ab"],
-     Just [" 0: a\\x0d\\x0ab"],
-     Just [" 0: a\\x85b"],
-     Just [" 0: a\\x0bb"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a\\R{2,4}b/I<bsr_anycrlf>"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: bsr_anycrlf"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0d\\x0a\\x0ab"],
-     Just [" 0: a\\x0a\\x0d\\x0db"],
-     Just [" 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\R{2,4}b" [ERROR]
-    ["a\\r\\rb",
-     "a\\n\\n\\nb",
-     "a\\r\\n\\n\\r\\rb",
-     "a\\x85\\85b",
-     "a\\x0b\\0bb     ",
-     "** Failers ",
-     "a\\r\\r\\r\\r\\rb ",
-     "a\\x85\\85b\\<bsr_anycrlf>",
-     "a\\x0b\\0bb\\<bsr_anycrlf>"]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Partial matching not supported"],
-     Just ["Options: bsr_unicode"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x0d\\x0db"],
-     Just [" 0: a\\x0a\\x0a\\x0ab"],
-     Just [" 0: a\\x0d\\x0a\\x0a\\x0d\\x0db"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex " End of testinput7 " []
-    []
-    []
diff --git a/tests/testdata/regex8.tests b/tests/testdata/regex8.tests
deleted file mode 100644
--- a/tests/testdata/regex8.tests
+++ /dev/null
@@ -1,1313 +0,0 @@
-testRegex "-- Do not use the \\x{} construct except with patterns that have the --" []
-    ["/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/",
-     "/-- that option is set. However, the latest Perls recognize them always. --/"]
-    [Just ["/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/"],
-     Nothing,
-     Just ["/-- that option is set. However, the latest Perls recognize them always. --/"],
-     Nothing]
-,
-testRegex "\\x{100}ab" [ERROR]
-    ["\\x{100}ab",
-     "",
-     "/a\\x{100}*b/8",
-     "ab",
-     "a\\x{100}b  ",
-     "a\\x{100}\\x{100}b  ",
-     "",
-     "/a\\x{100}+b/8",
-     "a\\x{100}b  ",
-     "a\\x{100}\\x{100}b  ",
-     "*** Failers ",
-     "ab",
-     "",
-     "/\\bX/8",
-     "Xoanon",
-     "+Xoanon",
-     "\\x{300}Xoanon ",
-     "*** Failers ",
-     "YXoanon  ",
-     "",
-     "/\\BX/8",
-     "YXoanon",
-     "*** Failers",
-     "Xoanon",
-     "+Xoanon    ",
-     "\\x{300}Xoanon "]
-    [Just [" 0: \\x{100}ab"],
-     Just ["/a\\x{100}*b/8"],
-     Just [" 0: ab"],
-     Just [" 0: a\\x{100}b"],
-     Just [" 0: a\\x{100}\\x{100}b"],
-     Just ["/a\\x{100}+b/8"],
-     Just [" 0: a\\x{100}b"],
-     Just [" 0: a\\x{100}\\x{100}b"],
-     Nothing,
-     Nothing,
-     Just ["/\\bX/8"],
-     Just [" 0: X"],
-     Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Just ["/\\BX/8"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "X\\b" [ERROR]
-    ["X+oanon",
-     "ZX\\x{300}oanon ",
-     "FAX ",
-     "*** Failers ",
-     "Xoanon  ",
-     "",
-     "/X\\B/8",
-     "Xoanon  ",
-     "*** Failers",
-     "X+oanon",
-     "ZX\\x{300}oanon ",
-     "FAX ",
-     "",
-     "/[^a]/8",
-     "abcd",
-     "a\\x{100}   "]
-    [Just [" 0: X"],
-     Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Just ["/X\\B/8"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/[^a]/8"],
-     Just [" 0: b"],
-     Just [" 0: \\x{100}"]]
-,
-testRegex "^[abc\\x{123}\\x{400}-\\x{402}]{2,3}\\d" [ERROR]
-    ["ab99",
-     "\\x{123}\\x{123}45",
-     "\\x{400}\\x{401}\\x{402}6  ",
-     "*** Failers",
-     "d99",
-     "\\x{123}\\x{122}4   ",
-     "\\x{400}\\x{403}6  ",
-     "\\x{400}\\x{401}\\x{402}\\x{402}6  "]
-    [Just [" 0: ab9"],
-     Just [" 0: \\x{123}\\x{123}4"],
-     Just [" 0: \\x{400}\\x{401}\\x{402}6"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "abc" [ERROR]
-    ["\195]",
-     "\195",
-     "\195\195\195",
-     "\195\195\195\\?"]
-    [Just ["Error -10"],
-     Just ["Error -10"],
-     Just ["Error -10"],
-     Nothing]
-,
-testRegex "a.b" [ERROR]
-    ["acb",
-     "a\\x7fb",
-     "a\\x{100}b ",
-     "*** Failers",
-     "a\\nb  "]
-    [Just [" 0: acb"],
-     Just [" 0: a\\x{7f}b"],
-     Just [" 0: a\\x{100}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3})b" [ERROR]
-    ["a\\x{4000}xyb ",
-     "a\\x{4000}\\x7fyb ",
-     "a\\x{4000}\\x{100}yb ",
-     "*** Failers",
-     "a\\x{4000}b ",
-     "ac\\ncb "]
-    [Just [" 0: a\\x{4000}xyb"],
-     Just [" 0: a\\x{4000}\\x{7f}yb"],
-     Just [" 0: a\\x{4000}\\x{100}yb"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a(.*?)(.)" []
-    ["a\\xc0\\x88b"]
-    [Just [" 0: a\\xc0\\x88b"],
-     Just [" 1: a\\xc0\\x88"],
-     Just [" 2: a\\xc0"]]
-,
-testRegex "a(.*?)(.)" [ERROR]
-    ["a\\x{100}b"]
-    [Just [" 0: a\\x{100}b"],
-     Just [" 1: a\\x{100}"]]
-,
-testRegex "a(.*)(.)" []
-    ["a\\xc0\\x88b"]
-    [Just [" 0: a\\xc0\\x88b"],
-     Just [" 1: a\\xc0\\x88"],
-     Just [" 2: a\\xc0"]]
-,
-testRegex "a(.*)(.)" [ERROR]
-    ["a\\x{100}b"]
-    [Just [" 0: a\\x{100}b"],
-     Just [" 1: a\\x{100}"]]
-,
-testRegex "a(.)(.)" []
-    ["a\\xc0\\x92bcd"]
-    [Just [" 0: a\\xc0\\x92"]]
-,
-testRegex "a(.)(.)" [ERROR]
-    ["a\\x{240}bcd"]
-    [Just [" 0: a\\x{240}b"]]
-,
-testRegex "a(.?)(.)" []
-    ["a\\xc0\\x92bcd"]
-    [Just [" 0: a\\xc0\\x92"],
-     Just [" 1: a\\xc0"]]
-,
-testRegex "a(.?)(.)" [ERROR]
-    ["a\\x{240}bcd"]
-    [Just [" 0: a\\x{240}b"],
-     Just [" 1: a\\x{240}"]]
-,
-testRegex "a(.??)(.)" []
-    ["a\\xc0\\x92bcd"]
-    [Just [" 0: a\\xc0\\x92"],
-     Just [" 1: a\\xc0"]]
-,
-testRegex "a(.??)(.)" [ERROR]
-    ["a\\x{240}bcd"]
-    [Just [" 0: a\\x{240}b"],
-     Just [" 1: a\\x{240}"]]
-,
-testRegex "a(.{3})b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "*** Failers",
-     "a\\x{1234}b ",
-     "ac\\ncb "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,})b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "*** Failers",
-     "a\\x{1234}b "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 0: axxxxbcdefghijb"],
-     Just [" 1: axxxxb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,}?)b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "*** Failers",
-     "a\\x{1234}b "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 0: axxxxbcdefghijb"],
-     Just [" 1: axxxxb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,5})b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "axbxxbcdefghijb ",
-     "axxxxxbcdefghijb ",
-     "*** Failers",
-     "a\\x{1234}b ",
-     "axxxxxxbcdefghijb "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 0: axxxxb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Just [" 0: axbxxb"],
-     Just [" 0: axxxxxb"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a(.{3,5}?)b" [ERROR]
-    ["a\\x{1234}xyb ",
-     "a\\x{1234}\\x{4321}yb ",
-     "a\\x{1234}\\x{4321}\\x{3412}b ",
-     "axxxxbcdefghijb ",
-     "a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b ",
-     "axbxxbcdefghijb ",
-     "axxxxxbcdefghijb ",
-     "*** Failers",
-     "a\\x{1234}b ",
-     "axxxxxxbcdefghijb "]
-    [Just [" 0: a\\x{1234}xyb"],
-     Just [" 0: a\\x{1234}\\x{4321}yb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}b"],
-     Just [" 0: axxxxb"],
-     Just [" 0: a\\x{1234}\\x{4321}\\x{3412}\\x{3421}b"],
-     Just [" 0: axbxxb"],
-     Just [" 0: axxxxxb"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[a\\x{c0}]" [ERROR]
-    ["*** Failers",
-     "\\x{100}"]
-    [Nothing,
-     Nothing]
-,
-testRegex "(?<=aXb)cd" [ERROR]
-    ["aXbcd"]
-    [Just [" 0: cd"]]
-,
-testRegex "(?<=a\\x{100}b)cd" [ERROR]
-    ["a\\x{100}bcd"]
-    [Just [" 0: cd"]]
-,
-testRegex "(?<=a\\x{100000}b)cd" [ERROR]
-    ["a\\x{100000}bcd",
-     "",
-     "/(?:\\x{100}){3}b/8",
-     "\\x{100}\\x{100}\\x{100}b",
-     "*** Failers ",
-     "\\x{100}\\x{100}b"]
-    [Just [" 0: cd"],
-     Just ["/(?:\\x{100}){3}b/8"],
-     Just [" 0: \\x{100}\\x{100}\\x{100}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\x{ab}" [ERROR]
-    ["\\x{ab} ",
-     "\\xc2\\xab",
-     "*** Failers ",
-     "\\x00{ab}"]
-    [Just [" 0: \\x{ab}"],
-     Just [" 0: \\x{ab}"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=(.))X" [ERROR]
-    ["WXYZ",
-     "\\x{256}XYZ ",
-     "*** Failers",
-     "XYZ "]
-    [Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "[^a]+" [ERROR]
-    ["bcd",
-     "\\x{100}aY\\x{256}Z ",
-     "",
-     "/^[^a]{2}/8",
-     "\\x{100}bc",
-     "",
-     "/^[^a]{2,}/8",
-     "\\x{100}bcAa"]
-    [Just [" 0: bcd"],
-     Just [" 1: bc"],
-     Just [" 2: b"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: Y\\x{256}Z"],
-     Just [" 1: Y\\x{256}"],
-     Just [" 2: Y"],
-     Just ["/^[^a]{2}/8"],
-     Just [" 0: \\x{100}b"],
-     Just ["/^[^a]{2,}/8"],
-     Just [" 0: \\x{100}bcA"],
-     Just [" 1: \\x{100}bc"],
-     Just [" 2: \\x{100}b"]]
-,
-testRegex "^[^a]{2,}?" [ERROR]
-    ["\\x{100}bca"]
-    [Just [" 0: \\x{100}bc"],
-     Just [" 1: \\x{100}b"]]
-,
-testRegex "[^a]+" [ERROR]
-    ["bcd",
-     "\\x{100}aY\\x{256}Z ",
-     "",
-     "/^[^a]{2}/8i",
-     "\\x{100}bc",
-     "",
-     "/^[^a]{2,}/8i",
-     "\\x{100}bcAa"]
-    [Just [" 0: bcd"],
-     Just [" 1: bc"],
-     Just [" 2: b"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: Y\\x{256}Z"],
-     Just [" 1: Y\\x{256}"],
-     Just [" 2: Y"],
-     Just ["/^[^a]{2}/8i"],
-     Just [" 0: \\x{100}b"],
-     Just ["/^[^a]{2,}/8i"],
-     Just [" 0: \\x{100}bc"],
-     Just [" 1: \\x{100}b"]]
-,
-testRegex "^[^a]{2,}?" [caseless]
-    ["\\x{100}bca"]
-    [Just [" 0: \\x{100}bc"],
-     Just [" 1: \\x{100}b"]]
-,
-testRegex "\\x{100}{0,0}" [ERROR]
-    ["abcd",
-     "",
-     "/\\x{100}?/8",
-     "abcd",
-     "\\x{100}\\x{100} "]
-    [Just [" 0: "],
-     Just ["/\\x{100}?/8"],
-     Just [" 0: "],
-     Just [" 0: \\x{100}"],
-     Just [" 1: "]]
-,
-testRegex "\\x{100}{0,3}" [ERROR]
-    ["\\x{100}\\x{100} ",
-     "\\x{100}\\x{100}\\x{100}\\x{100} ",
-     "",
-     "/\\x{100}*/8",
-     "abce",
-     "\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}\\x{100}"],
-     Just [" 1: \\x{100}"],
-     Just [" 2: "],
-     Just [" 0: \\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}"],
-     Just [" 2: \\x{100}"],
-     Just [" 3: "],
-     Just ["/\\x{100}*/8"],
-     Just [" 0: "],
-     Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}\\x{100}"],
-     Just [" 2: \\x{100}\\x{100}"],
-     Just [" 3: \\x{100}"],
-     Just [" 4: "]]
-,
-testRegex "\\x{100}{1,1}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}"]]
-,
-testRegex "\\x{100}{1,3}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}"],
-     Just [" 2: \\x{100}"]]
-,
-testRegex "\\x{100}+" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100} "]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}\\x{100}"],
-     Just [" 2: \\x{100}\\x{100}"],
-     Just [" 3: \\x{100}"]]
-,
-testRegex "\\x{100}{3}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}XX"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}{3,5}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 2: \\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\x{100}{3,}" [ERROR]
-    ["abcd\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}XX"]
-    [Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 2: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 3: \\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 4: \\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "(?<=a\\x{100}{2}b)X" [ERROR]
-    ["Xyyya\\x{100}\\x{100}bXzzz"]
-    [Just [" 0: X"]]
-,
-testRegex "\\D*" [ERROR]
-    ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "\\D*" [ERROR]
-    ["\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"]
-    [Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 1: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 2: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 3: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 4: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 5: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 6: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 7: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 8: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just [" 9: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["10: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["11: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["12: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["13: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["14: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["15: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["16: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["17: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["18: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["19: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["20: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"],
-     Just ["21: \\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}\\x{100}"]]
-,
-testRegex "\\D" [ERROR]
-    ["1X2",
-     "1\\x{100}2 ",
-     "",
-     "/>\\S/8",
-     "> >X Y",
-     "> >\\x{100} Y",
-     "",
-     "/\\d/8",
-     "\\x{100}3",
-     "",
-     "/\\s/8",
-     "\\x{100} X",
-     "",
-     "/\\D+/8",
-     "12abcd34",
-     "*** Failers",
-     "1234  "]
-    [Just [" 0: X"],
-     Just [" 0: \\x{100}"],
-     Just ["/>\\S/8"],
-     Just [" 0: >X"],
-     Just [" 0: >\\x{100}"],
-     Just ["/\\d/8"],
-     Just [" 0: 3"],
-     Just ["/\\s/8"],
-     Just [" 0:  "],
-     Just ["/\\D+/8"],
-     Just [" 0: abcd"],
-     Just [" 1: abc"],
-     Just [" 2: ab"],
-     Just [" 3: a"],
-     Just [" 0: *** Failers"],
-     Just [" 1: *** Failer"],
-     Just [" 2: *** Faile"],
-     Just [" 3: *** Fail"],
-     Just [" 4: *** Fai"],
-     Just [" 5: *** Fa"],
-     Just [" 6: *** F"],
-     Just [" 7: *** "],
-     Just [" 8: ***"],
-     Just [" 9: **"],
-     Just ["10: *"],
-     Nothing]
-,
-testRegex "\\D{2,3}" [ERROR]
-    ["12abcd34",
-     "12ab34",
-     "*** Failers  ",
-     "1234",
-     "12a34  "]
-    [Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 0: ab"],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\D{2,3}?" [ERROR]
-    ["12abcd34",
-     "12ab34",
-     "*** Failers  ",
-     "1234",
-     "12a34  "]
-    [Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 0: ab"],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\d+" [ERROR]
-    ["12abcd34",
-     "*** Failers"]
-    [Just [" 0: 12"],
-     Just [" 1: 1"],
-     Nothing]
-,
-testRegex "\\d{2,3}" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers  ",
-     "1.4 "]
-    [Just [" 0: 12"],
-     Just [" 0: 123"],
-     Just [" 1: 12"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\d{2,3}?" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers  ",
-     "1.4 "]
-    [Just [" 0: 12"],
-     Just [" 0: 123"],
-     Just [" 1: 12"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\S+" [ERROR]
-    ["12abcd34",
-     "*** Failers",
-     "\\    \\ "]
-    [Just [" 0: 12abcd34"],
-     Just [" 1: 12abcd3"],
-     Just [" 2: 12abcd"],
-     Just [" 3: 12abc"],
-     Just [" 4: 12ab"],
-     Just [" 5: 12a"],
-     Just [" 6: 12"],
-     Just [" 7: 1"],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Just [" 2: *"],
-     Nothing]
-,
-testRegex "\\S{2,3}" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers",
-     "\\     \\  "]
-    [Just [" 0: 12a"],
-     Just [" 1: 12"],
-     Just [" 0: 123"],
-     Just [" 1: 12"],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Nothing]
-,
-testRegex "\\S{2,3}?" [ERROR]
-    ["12abcd34",
-     "1234abcd",
-     "*** Failers",
-     "\\     \\  "]
-    [Just [" 0: 12a"],
-     Just [" 1: 12"],
-     Just [" 0: 123"],
-     Just [" 1: 12"],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Nothing]
-,
-testRegex ">\\s+<" [ERROR]
-    ["12>      <34",
-     "*** Failers"]
-    [Just [" 0: >      <"],
-     Nothing]
-,
-testRegex ">\\s{2,3}<" [ERROR]
-    ["ab>  <cd",
-     "ab>   <ce",
-     "*** Failers",
-     "ab>    <cd "]
-    [Just [" 0: >  <"],
-     Just [" 0: >   <"],
-     Nothing,
-     Nothing]
-,
-testRegex ">\\s{2,3}?<" [ERROR]
-    ["ab>  <cd",
-     "ab>   <ce",
-     "*** Failers",
-     "ab>    <cd "]
-    [Just [" 0: >  <"],
-     Just [" 0: >   <"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\w+" [ERROR]
-    ["12      34",
-     "*** Failers",
-     "+++=*! "]
-    [Just [" 0: 12"],
-     Just [" 1: 1"],
-     Just [" 0: Failers"],
-     Just [" 1: Failer"],
-     Just [" 2: Faile"],
-     Just [" 3: Fail"],
-     Just [" 4: Fai"],
-     Just [" 5: Fa"],
-     Just [" 6: F"],
-     Nothing]
-,
-testRegex "\\w{2,3}" [ERROR]
-    ["ab  cd",
-     "abcd ce",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ab"],
-     Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 0: Fai"],
-     Just [" 1: Fa"],
-     Nothing]
-,
-testRegex "\\w{2,3}?" [ERROR]
-    ["ab  cd",
-     "abcd ce",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ab"],
-     Just [" 0: abc"],
-     Just [" 1: ab"],
-     Just [" 0: Fai"],
-     Just [" 1: Fa"],
-     Nothing]
-,
-testRegex "\\W+" [ERROR]
-    ["12====34",
-     "*** Failers",
-     "abcd "]
-    [Just [" 0: ===="],
-     Just [" 1: ==="],
-     Just [" 2: =="],
-     Just [" 3: ="],
-     Just [" 0: *** "],
-     Just [" 1: ***"],
-     Just [" 2: **"],
-     Just [" 3: *"],
-     Nothing]
-,
-testRegex "\\W{2,3}" [ERROR]
-    ["ab====cd",
-     "ab==cd",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ==="],
-     Just [" 1: =="],
-     Just [" 0: =="],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Nothing]
-,
-testRegex "\\W{2,3}?" [ERROR]
-    ["ab====cd",
-     "ab==cd",
-     "*** Failers",
-     "a.b.c"]
-    [Just [" 0: ==="],
-     Just [" 1: =="],
-     Just [" 0: =="],
-     Just [" 0: ***"],
-     Just [" 1: **"],
-     Nothing]
-,
-testRegex "[\\x{100}]" [ERROR]
-    ["\\x{100}",
-     "Z\\x{100}",
-     "\\x{100}Z",
-     "*** Failers "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: \\x{100}"],
-     Nothing]
-,
-testRegex "[Z\\x{100}]" [ERROR]
-    ["Z\\x{100}",
-     "\\x{100}",
-     "\\x{100}Z",
-     "*** Failers "]
-    [Just [" 0: Z"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: \\x{100}"],
-     Nothing]
-,
-testRegex "[\\x{100}\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Nothing]
-,
-testRegex "[\\x{100}-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Nothing]
-,
-testRegex "[z-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "abzcd",
-     "ab|cd  ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Just [" 0: z"],
-     Just [" 0: |"],
-     Nothing]
-,
-testRegex "[Q\\x{100}\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "Q? ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: Q"],
-     Nothing]
-,
-testRegex "[Q\\x{100}-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "Q? ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Just [" 0: Q"],
-     Nothing]
-,
-testRegex "[Qz-\\x{200}]" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{111}cd ",
-     "abzcd",
-     "ab|cd  ",
-     "Q? ",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{111}"],
-     Just [" 0: z"],
-     Just [" 0: |"],
-     Just [" 0: Q"],
-     Nothing]
-,
-testRegex "[\\x{100}\\x{200}]{1,3}" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}\\x{100}\\x{200}"],
-     Just [" 1: \\x{200}\\x{100}"],
-     Just [" 2: \\x{200}"],
-     Nothing]
-,
-testRegex "[\\x{100}\\x{200}]{1,3}?" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}\\x{100}\\x{200}"],
-     Just [" 1: \\x{200}\\x{100}"],
-     Just [" 2: \\x{200}"],
-     Nothing]
-,
-testRegex "[Q\\x{100}\\x{200}]{1,3}" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}\\x{100}\\x{200}"],
-     Just [" 1: \\x{200}\\x{100}"],
-     Just [" 2: \\x{200}"],
-     Nothing]
-,
-testRegex "[Q\\x{100}\\x{200}]{1,3}?" [ERROR]
-    ["ab\\x{100}cd",
-     "ab\\x{200}cd",
-     "ab\\x{200}\\x{100}\\x{200}\\x{100}cd",
-     "*** Failers  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{200}"],
-     Just [" 0: \\x{200}\\x{100}\\x{200}"],
-     Just [" 1: \\x{200}\\x{100}"],
-     Just [" 2: \\x{200}"],
-     Nothing]
-,
-testRegex "(?<=[\\x{100}\\x{200}])X" [ERROR]
-    ["abc\\x{200}X",
-     "abc\\x{100}X ",
-     "*** Failers",
-     "X  "]
-    [Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=[Q\\x{100}\\x{200}])X" [ERROR]
-    ["abc\\x{200}X",
-     "abc\\x{100}X ",
-     "abQX ",
-     "*** Failers",
-     "X  "]
-    [Just [" 0: X"],
-     Just [" 0: X"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "(?<=[\\x{100}\\x{200}]{3})X" [ERROR]
-    ["abc\\x{100}\\x{200}\\x{100}X",
-     "*** Failers",
-     "abc\\x{200}X",
-     "X  "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^\\x{100}\\x{200}]X" [ERROR]
-    ["AX",
-     "\\x{150}X",
-     "\\x{500}X ",
-     "*** Failers",
-     "\\x{100}X",
-     "\\x{200}X   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{150}X"],
-     Just [" 0: \\x{500}X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^Q\\x{100}\\x{200}]X" [ERROR]
-    ["AX",
-     "\\x{150}X",
-     "\\x{500}X ",
-     "*** Failers",
-     "\\x{100}X",
-     "\\x{200}X   ",
-     "QX "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{150}X"],
-     Just [" 0: \\x{500}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[^\\x{100}-\\x{200}]X" [ERROR]
-    ["AX",
-     "\\x{500}X ",
-     "*** Failers",
-     "\\x{100}X",
-     "\\x{150}X",
-     "\\x{200}X   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{500}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[z-\\x{100}]" [caseless]
-    ["z",
-     "Z ",
-     "\\x{100}",
-     "*** Failers",
-     "\\x{102}",
-     "y    "]
-    [Just [" 0: z"],
-     Just [" 0: Z"],
-     Just [" 0: \\x{100}"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[\\xFF]" []
-    [">\\xff<"]
-    [Just [" 0: \\xff"]]
-,
-testRegex "[\\xff]" [ERROR]
-    [">\\x{ff}<"]
-    [Just [" 0: \\x{ff}"]]
-,
-testRegex "[^\\xFF]" []
-    ["XYZ"]
-    [Just [" 0: X"]]
-,
-testRegex "[^\\xff]" [ERROR]
-    ["XYZ",
-     "\\x{123} "]
-    [Just [" 0: X"],
-     Just [" 0: \\x{123}"]]
-,
-testRegex "^[ac]*b" [ERROR]
-    ["xb"]
-    [Nothing]
-,
-testRegex "^[ac\\x{100}]*b" [ERROR]
-    ["xb"]
-    [Nothing]
-,
-testRegex "^[^x]*b" [caseless]
-    ["xb"]
-    [Nothing]
-,
-testRegex "^[^x]*b" [ERROR]
-    ["xb",
-     "",
-     "/^\\d*b/8",
-     "xb "]
-    [Nothing,
-     Just ["/^\\d*b/8"],
-     Nothing]
-,
-testRegex "(|a)" [ERROR]
-    ["catac",
-     "a\\x{256}a "]
-    [Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: "],
-     Just [" 0: a"],
-     Just [" 1: "],
-     Just [" 0: "]]
-,
-testRegex "^\\x{85}$" [caseless]
-    ["\\x{85}"]
-    [Just [" 0: \\x{85}"]]
-,
-testRegex "^abc." [ERROR]
-    ["abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x{0085}abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc6"],
-     Just [" 0: abc7"],
-     Just [" 0: abc8"],
-     Just [" 0: abc9"]]
-,
-testRegex "abc.$" [ERROR]
-    ["abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x{0085} abc7\\x{2028} abc8\\x{2029} abc9"]
-    [Just [" 0: abc1"],
-     Just [" 0: abc2"],
-     Just [" 0: abc3"],
-     Just [" 0: abc4"],
-     Just [" 0: abc5"],
-     Just [" 0: abc6"],
-     Just [" 0: abc7"],
-     Just [" 0: abc8"],
-     Just [" 0: abc9"]]
-,
-testRegex "^a\\Rb" [ERROR]
-    ["a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0cb",
-     "a\\x{85}b   ",
-     "a\\x{2028}b ",
-     "a\\x{2029}b ",
-     "** Failers",
-     "a\\n\\rb    "]
-    [Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{0b}b"],
-     Just [" 0: a\\x{0c}b"],
-     Just [" 0: a\\x{85}b"],
-     Just [" 0: a\\x{2028}b"],
-     Just [" 0: a\\x{2029}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a\\R*b" [ERROR]
-    ["ab",
-     "a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0c\\x{2028}\\x{2029}b",
-     "a\\x{85}b   ",
-     "a\\n\\rb    ",
-     "a\\n\\r\\x{85}\\x0cb "]
-    [Just [" 0: ab"],
-     Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{0b}b"],
-     Just [" 0: a\\x{0c}\\x{2028}\\x{2029}b"],
-     Just [" 0: a\\x{85}b"],
-     Just [" 0: a\\x{0a}\\x{0d}b"],
-     Just [" 0: a\\x{0a}\\x{0d}\\x{85}\\x{0c}b"]]
-,
-testRegex "^a\\R+b" [ERROR]
-    ["a\\nb",
-     "a\\rb",
-     "a\\r\\nb",
-     "a\\x0bb",
-     "a\\x0c\\x{2028}\\x{2029}b",
-     "a\\x{85}b   ",
-     "a\\n\\rb    ",
-     "a\\n\\r\\x{85}\\x0cb ",
-     "** Failers",
-     "ab  "]
-    [Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{0b}b"],
-     Just [" 0: a\\x{0c}\\x{2028}\\x{2029}b"],
-     Just [" 0: a\\x{85}b"],
-     Just [" 0: a\\x{0a}\\x{0d}b"],
-     Just [" 0: a\\x{0a}\\x{0d}\\x{85}\\x{0c}b"],
-     Nothing,
-     Nothing]
-,
-testRegex "^a\\R{1,3}b" [ERROR]
-    ["a\\nb",
-     "a\\n\\rb",
-     "a\\n\\r\\x{85}b",
-     "a\\r\\n\\r\\nb ",
-     "a\\r\\n\\r\\n\\r\\nb ",
-     "a\\n\\r\\n\\rb",
-     "a\\n\\n\\r\\nb ",
-     "** Failers",
-     "a\\n\\n\\n\\rb",
-     "a\\r"]
-    [Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0a}\\x{0d}b"],
-     Just [" 0: a\\x{0a}\\x{0d}\\x{85}b"],
-     Just [" 0: a\\x{0d}\\x{0a}\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{0d}\\x{0a}\\x{0d}\\x{0a}\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{0a}\\x{0d}\\x{0a}\\x{0d}b"],
-     Just [" 0: a\\x{0a}\\x{0a}\\x{0d}\\x{0a}b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\h+\\V?\\v{3,4}" [ERROR]
-    ["\\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a"]
-    [Just [" 0: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\\x{0d}"],
-     Just [" 1: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}"]]
-,
-testRegex "\\V?\\v{3,4}" [ERROR]
-    ["\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a"]
-    [Just [" 0: X\\x{0a}\\x{0b}\\x{0c}\\x{0d}"],
-     Just [" 1: X\\x{0a}\\x{0b}\\x{0c}"]]
-,
-testRegex "\\h+\\V?\\v{3,4}" [ERROR]
-    [">\\x09\\x20\\x{a0}X\\x0a\\x0a\\x0a<"]
-    [Just [" 0: \\x{09} \\x{a0}X\\x{0a}\\x{0a}\\x{0a}"]]
-,
-testRegex "\\V?\\v{3,4}" [ERROR]
-    [">\\x09\\x20\\x{a0}X\\x0a\\x0a\\x0a<"]
-    [Just [" 0: X\\x{0a}\\x{0a}\\x{0a}"]]
-,
-testRegex "\\H\\h\\V\\v" [ERROR]
-    ["X X\\x0a",
-     "X\\x09X\\x0b",
-     "** Failers",
-     "\\x{a0} X\\x0a   ",
-     "",
-     "/\\H*\\h+\\V?\\v{3,4}/8 ",
-     "\\x09\\x20\\x{a0}X\\x0a\\x0b\\x0c\\x0d\\x0a",
-     "\\x09\\x20\\x{a0}\\x0a\\x0b\\x0c\\x0d\\x0a",
-     "\\x09\\x20\\x{a0}\\x0a\\x0b\\x0c",
-     "** Failers ",
-     "\\x09\\x20\\x{a0}\\x0a\\x0b",
-     "",
-     "/\\H\\h\\V\\v/8",
-     "\\x{3001}\\x{3000}\\x{2030}\\x{2028}",
-     "X\\x{180e}X\\x{85}",
-     "** Failers",
-     "\\x{2009} X\\x0a   ",
-     "",
-     "/\\H*\\h+\\V?\\v{3,4}/8 ",
-     "\\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x0c\\x0d\\x0a",
-     "\\x09\\x{205f}\\x{a0}\\x0a\\x{2029}\\x0c\\x{2028}\\x0a",
-     "\\x09\\x20\\x{202f}\\x0a\\x0b\\x0c",
-     "** Failers ",
-     "\\x09\\x{200a}\\x{a0}\\x{2028}\\x0b",
-     "",
-     "/a\\Rb/I8<bsr_anycrlf>",
-     "a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "** Failers",
-     "a\\x{85}b",
-     "a\\x0bb     "]
-    [Just [" 0: X X\\x{0a}"],
-     Just [" 0: X\\x{09}X\\x{0b}"],
-     Nothing,
-     Nothing,
-     Just ["/\\H*\\h+\\V?\\v{3,4}/8 "],
-     Just [" 0: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}\\x{0d}"],
-     Just [" 1: \\x{09} \\x{a0}X\\x{0a}\\x{0b}\\x{0c}"],
-     Just [" 0: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}\\x{0d}"],
-     Just [" 1: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}"],
-     Just [" 0: \\x{09} \\x{a0}\\x{0a}\\x{0b}\\x{0c}"],
-     Nothing,
-     Nothing,
-     Just ["/\\H\\h\\V\\v/8"],
-     Just [" 0: \\x{3001}\\x{3000}\\x{2030}\\x{2028}"],
-     Just [" 0: X\\x{180e}X\\x{85}"],
-     Nothing,
-     Nothing,
-     Just ["/\\H*\\h+\\V?\\v{3,4}/8 "],
-     Just [" 0: \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x{0c}\\x{0d}"],
-     Just [" 1: \\x{1680}\\x{180e}\\x{2007}X\\x{2028}\\x{2029}\\x{0c}"],
-     Just [" 0: \\x{09}\\x{205f}\\x{a0}\\x{0a}\\x{2029}\\x{0c}\\x{2028}"],
-     Just [" 1: \\x{09}\\x{205f}\\x{a0}\\x{0a}\\x{2029}\\x{0c}"],
-     Just [" 0: \\x{09} \\x{202f}\\x{0a}\\x{0b}\\x{0c}"],
-     Nothing,
-     Nothing,
-     Just ["/a\\Rb/I8<bsr_anycrlf>"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf utf8"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\Rb" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "a\\x{85}b",
-     "a\\x0bb     ",
-     "** Failers ",
-     "a\\x{85}b\\<bsr_anycrlf>",
-     "a\\x0bb\\<bsr_anycrlf>",
-     "",
-     "/a\\R?b/I8<bsr_anycrlf>",
-     "a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "** Failers",
-     "a\\x{85}b",
-     "a\\x0bb     "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode utf8"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{85}b"],
-     Just [" 0: a\\x{0b}b"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/a\\R?b/I8<bsr_anycrlf>"],
-     Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_anycrlf utf8"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "a\\R?b" [ERROR]
-    ["a\\rb",
-     "a\\nb",
-     "a\\r\\nb",
-     "a\\x{85}b",
-     "a\\x0bb     ",
-     "** Failers ",
-     "a\\x{85}b\\<bsr_anycrlf>",
-     "a\\x0bb\\<bsr_anycrlf>",
-     "",
-     "/ End of testinput 8 / "]
-    [Just ["Capturing subpattern count = 0"],
-     Just ["Options: bsr_unicode utf8"],
-     Just ["First char = 'a'"],
-     Just ["Need char = 'b'"],
-     Just [" 0: a\\x{0d}b"],
-     Just [" 0: a\\x{0a}b"],
-     Just [" 0: a\\x{0d}\\x{0a}b"],
-     Just [" 0: a\\x{85}b"],
-     Just [" 0: a\\x{0b}b"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/ End of testinput 8 / "]]
diff --git a/tests/testdata/regex9.tests b/tests/testdata/regex9.tests
deleted file mode 100644
--- a/tests/testdata/regex9.tests
+++ /dev/null
@@ -1,1713 +0,0 @@
-testRegex "\\pL\\P{Nd}" [ERROR]
-    ["AB",
-     "*** Failers",
-     "A0",
-     "00   "]
-    [Just [" 0: AB"],
-     Just [" 0: Fa"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\X." [ERROR]
-    ["AB",
-     "A\\x{300}BC ",
-     "A\\x{300}\\x{301}\\x{302}BC ",
-     "*** Failers",
-     "\\x{300}  "]
-    [Just [" 0: AB"],
-     Just [" 0: A\\x{300}B"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 0: **"],
-     Nothing]
-,
-testRegex "\\X\\X" [ERROR]
-    ["ABC",
-     "A\\x{300}B\\x{300}\\x{301}C ",
-     "A\\x{300}\\x{301}\\x{302}BC ",
-     "*** Failers",
-     "\\x{300}  "]
-    [Just [" 0: AB"],
-     Just [" 0: A\\x{300}B\\x{300}\\x{301}"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 0: **"],
-     Nothing]
-,
-testRegex "^\\pL+" [ERROR]
-    ["abcd",
-     "a ",
-     "*** Failers "]
-    [Just [" 0: abcd"],
-     Just [" 1: abc"],
-     Just [" 2: ab"],
-     Just [" 3: a"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "^\\PL+" [ERROR]
-    ["1234",
-     "= ",
-     "*** Failers ",
-     "abcd "]
-    [Just [" 0: 1234"],
-     Just [" 1: 123"],
-     Just [" 2: 12"],
-     Just [" 3: 1"],
-     Just [" 0: ="],
-     Just [" 0: *** "],
-     Just [" 1: ***"],
-     Just [" 2: **"],
-     Just [" 3: *"],
-     Nothing]
-,
-testRegex "^\\X+" [ERROR]
-    ["abcdA\\x{300}\\x{301}\\x{302}",
-     "A\\x{300}\\x{301}\\x{302}",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}",
-     "a ",
-     "*** Failers ",
-     "\\x{300}\\x{301}\\x{302}"]
-    [Just [" 0: abcdA\\x{300}\\x{301}\\x{302}"],
-     Just [" 1: abcd"],
-     Just [" 2: abc"],
-     Just [" 3: ab"],
-     Just [" 4: a"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}"],
-     Just [" 0: a"],
-     Just [" 0: *** Failers"],
-     Just [" 1: *** Failer"],
-     Just [" 2: *** Faile"],
-     Just [" 3: *** Fail"],
-     Just [" 4: *** Fai"],
-     Just [" 5: *** Fa"],
-     Just [" 6: *** F"],
-     Just [" 7: *** "],
-     Just [" 8: ***"],
-     Just [" 9: **"],
-     Just ["10: *"],
-     Nothing]
-,
-testRegex "\\X?abc" [ERROR]
-    ["abc",
-     "A\\x{300}abc",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz",
-     "\\x{300}abc  ",
-     "*** Failers"]
-    [Just [" 0: abc"],
-     Just [" 0: A\\x{300}abc"],
-     Just [" 0: A\\x{300}abc"],
-     Just [" 0: abc"],
-     Nothing]
-,
-testRegex "^\\X?abc" [ERROR]
-    ["abc",
-     "A\\x{300}abc",
-     "*** Failers",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz",
-     "\\x{300}abc  "]
-    [Just [" 0: abc"],
-     Just [" 0: A\\x{300}abc"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\X*abc" [ERROR]
-    ["abc",
-     "A\\x{300}abc",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz",
-     "\\x{300}abc  ",
-     "*** Failers"]
-    [Just [" 0: abc"],
-     Just [" 0: A\\x{300}abc"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abc"],
-     Just [" 0: abc"],
-     Nothing]
-,
-testRegex "^\\X*abc" [ERROR]
-    ["abc",
-     "A\\x{300}abc",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abcxyz",
-     "*** Failers",
-     "\\x{300}abc  "]
-    [Just [" 0: abc"],
-     Just [" 0: A\\x{300}abc"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}A\\x{300}A\\x{300}A\\x{300}abc"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\pL?=." [ERROR]
-    ["A=b",
-     "=c ",
-     "*** Failers",
-     "1=2 ",
-     "AAAA=b  "]
-    [Just [" 0: A=b"],
-     Just [" 0: =c"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\pL*=." [ERROR]
-    ["AAAA=b",
-     "=c ",
-     "*** Failers",
-     "1=2  "]
-    [Just [" 0: AAAA=b"],
-     Just [" 0: =c"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\X{2,3}X" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X ",
-     "*** Failers",
-     "X",
-     "A\\x{300}\\x{301}\\x{302}X",
-     "A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X"]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}A\\x{300}\\x{301}\\x{302}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\pC\\pL\\pM\\pN\\pP\\pS\\pZ<" [ERROR]
-    ["\\x7f\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<",
-     "\\np\\x{300}9!\\$ < ",
-     "** Failers ",
-     "ap\\x{300}9!\\$ < ",
-     "",
-     "/^\\PC/8",
-     "X",
-     "** Failers ",
-     "\\x7f",
-     "",
-     "/^\\PL/8",
-     "9",
-     "** Failers ",
-     "\\x{c0}",
-     "",
-     "/^\\PM/8",
-     "X",
-     "** Failers ",
-     "\\x{30f}",
-     "",
-     "/^\\PN/8",
-     "X",
-     "** Failers ",
-     "\\x{660}",
-     "",
-     "/^\\PP/8",
-     "X",
-     "** Failers ",
-     "\\x{66c}",
-     "",
-     "/^\\PS/8",
-     "X",
-     "** Failers ",
-     "\\x{f01}",
-     "",
-     "/^\\PZ/8",
-     "X",
-     "** Failers ",
-     "\\x{1680}",
-     "",
-     "/^\\p{Cc}/8",
-     "\\x{017}",
-     "\\x{09f} ",
-     "** Failers",
-     "\\x{0600} ",
-     "",
-     "/^\\p{Cf}/8",
-     "\\x{601}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Cn}/8",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Co}/8",
-     "\\x{f8ff}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Cs}/8",
-     "\\?\\x{dfff}",
-     "** Failers",
-     "\\x{09f} ",
-     "",
-     "/^\\p{Ll}/8",
-     "a",
-     "** Failers ",
-     "Z",
-     "\\x{e000}  ",
-     "",
-     "/^\\p{Lm}/8",
-     "\\x{2b0}",
-     "** Failers",
-     "a ",
-     "",
-     "/^\\p{Lo}/8",
-     "\\x{1bb}",
-     "** Failers",
-     "a ",
-     "\\x{2b0}",
-     "",
-     "/^\\p{Lt}/8",
-     "\\x{1c5}",
-     "** Failers",
-     "a ",
-     "\\x{2b0}",
-     "",
-     "/^\\p{Lu}/8",
-     "A",
-     "** Failers",
-     "\\x{2b0}",
-     "",
-     "/^\\p{Mc}/8",
-     "\\x{903}",
-     "** Failers",
-     "X",
-     "\\x{300}",
-     "",
-     "/^\\p{Me}/8",
-     "\\x{488}",
-     "** Failers",
-     "X",
-     "\\x{903}",
-     "\\x{300}",
-     "",
-     "/^\\p{Mn}/8",
-     "\\x{300}",
-     "** Failers",
-     "X",
-     "\\x{903}",
-     "",
-     "/^\\p{Nd}+/8",
-     "0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}\\x{66a}",
-     "\\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}\\x{6fa}",
-     "\\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}\\x{970}",
-     "** Failers",
-     "X",
-     "",
-     "/^\\p{Nl}/8",
-     "\\x{16ee}",
-     "** Failers",
-     "X",
-     "\\x{966}",
-     "",
-     "/^\\p{No}/8",
-     "\\x{b2}",
-     "\\x{b3}",
-     "** Failers",
-     "X",
-     "\\x{16ee}",
-     "",
-     "/^\\p{Pc}/8",
-     "\\x5f",
-     "\\x{203f}",
-     "** Failers",
-     "X",
-     "-",
-     "\\x{58a}",
-     "",
-     "/^\\p{Pd}/8",
-     "-",
-     "\\x{58a}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Pe}/8",
-     ")",
-     "]",
-     "}",
-     "\\x{f3b}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "(",
-     "[",
-     "{",
-     "\\x{f3c}",
-     "",
-     "/^\\p{Pf}/8",
-     "\\x{bb}",
-     "\\x{2019}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Pi}/8",
-     "\\x{ab}",
-     "\\x{2018}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Po}/8",
-     "!",
-     "\\x{37e}",
-     "** Failers",
-     "X",
-     "\\x{203f}",
-     "",
-     "/^\\p{Ps}/8",
-     "(",
-     "[",
-     "{",
-     "\\x{f3c}",
-     "** Failers",
-     "X",
-     ")",
-     "]",
-     "}",
-     "\\x{f3b}",
-     "",
-     "/^\\p{Sc}+/8",
-     "$\\x{a2}\\x{a3}\\x{a4}\\x{a5}\\x{a6}",
-     "\\x{9f2}",
-     "** Failers",
-     "X",
-     "\\x{2c2}",
-     "",
-     "/^\\p{Sk}/8",
-     "\\x{2c2}",
-     "** Failers",
-     "X",
-     "\\x{9f2}",
-     "",
-     "/^\\p{Sm}+/8",
-     "+<|~\\x{ac}\\x{2044}",
-     "** Failers",
-     "X",
-     "\\x{9f2}",
-     "",
-     "/^\\p{So}/8",
-     "\\x{a6}",
-     "\\x{482} ",
-     "** Failers",
-     "X",
-     "\\x{9f2}",
-     "",
-     "/^\\p{Zl}/8",
-     "\\x{2028}",
-     "** Failers",
-     "X",
-     "\\x{2029}",
-     "",
-     "/^\\p{Zp}/8",
-     "\\x{2029}",
-     "** Failers",
-     "X",
-     "\\x{2028}",
-     "",
-     "/^\\p{Zs}/8",
-     "\\ \\",
-     "\\x{a0}",
-     "\\x{1680}",
-     "\\x{180e}",
-     "\\x{2000}",
-     "\\x{2001}     ",
-     "** Failers",
-     "\\x{2028}",
-     "\\x{200d} ",
-     "",
-     "/\\p{Nd}+(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}+?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,}(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,}?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2}(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,3}(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}{2,3}?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}?(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}??(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*+(..)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*+(...)/8",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Nd}*+(....)/8",
-     "** Failers",
-     "\\x{660}\\x{661}\\x{662}ABC",
-     "",
-     "/\\p{Lu}/8i",
-     "A",
-     "a\\x{10a0}B ",
-     "** Failers ",
-     "a",
-     "\\x{1d00}  "]
-    [Just [" 0: \\x{7f}\\x{c0}\\x{30f}\\x{660}\\x{66c}\\x{f01}\\x{1680}<"],
-     Just [" 0: \\x{0a}p\\x{300}9!$ <"],
-     Nothing,
-     Nothing,
-     Just ["/^\\PC/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PL/8"],
-     Just [" 0: 9"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PM/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PN/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PP/8"],
-     Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Just ["/^\\PS/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\PZ/8"],
-     Just [" 0: X"],
-     Just [" 0: *"],
-     Nothing,
-     Just ["/^\\p{Cc}/8"],
-     Just [" 0: \\x{17}"],
-     Just [" 0: \\x{9f}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Cf}/8"],
-     Just [" 0: \\x{601}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Cn}/8"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Co}/8"],
-     Just [" 0: \\x{f8ff}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Cs}/8"],
-     Just [" 0: \\x{dfff}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Ll}/8"],
-     Just [" 0: a"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lm}/8"],
-     Just [" 0: \\x{2b0}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lo}/8"],
-     Just [" 0: \\x{1bb}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lt}/8"],
-     Just [" 0: \\x{1c5}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Lu}/8"],
-     Just [" 0: A"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Mc}/8"],
-     Just [" 0: \\x{903}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Me}/8"],
-     Just [" 0: \\x{488}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Mn}/8"],
-     Just [" 0: \\x{300}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Nd}+/8"],
-     Just [" 0: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}\\x{669}"],
-     Just [" 1: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}\\x{668}"],
-     Just [" 2: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}\\x{667}"],
-     Just [" 3: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}\\x{666}"],
-     Just [" 4: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}\\x{665}"],
-     Just [" 5: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}\\x{664}"],
-     Just [" 6: 0123456789\\x{660}\\x{661}\\x{662}\\x{663}"],
-     Just [" 7: 0123456789\\x{660}\\x{661}\\x{662}"],
-     Just [" 8: 0123456789\\x{660}\\x{661}"],
-     Just [" 9: 0123456789\\x{660}"],
-     Just ["10: 0123456789"],
-     Just ["11: 012345678"],
-     Just ["12: 01234567"],
-     Just ["13: 0123456"],
-     Just ["14: 012345"],
-     Just ["15: 01234"],
-     Just ["16: 0123"],
-     Just ["17: 012"],
-     Just ["18: 01"],
-     Just ["19: 0"],
-     Just [" 0: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}\\x{6f9}"],
-     Just [" 1: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}\\x{6f8}"],
-     Just [" 2: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}\\x{6f7}"],
-     Just [" 3: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}\\x{6f6}"],
-     Just [" 4: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}\\x{6f5}"],
-     Just [" 5: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}\\x{6f4}"],
-     Just [" 6: \\x{6f0}\\x{6f1}\\x{6f2}\\x{6f3}"],
-     Just [" 7: \\x{6f0}\\x{6f1}\\x{6f2}"],
-     Just [" 8: \\x{6f0}\\x{6f1}"],
-     Just [" 9: \\x{6f0}"],
-     Just [" 0: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}\\x{96f}"],
-     Just [" 1: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}\\x{96e}"],
-     Just [" 2: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}\\x{96d}"],
-     Just [" 3: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}\\x{96c}"],
-     Just [" 4: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}\\x{96b}"],
-     Just [" 5: \\x{966}\\x{967}\\x{968}\\x{969}\\x{96a}"],
-     Just [" 6: \\x{966}\\x{967}\\x{968}\\x{969}"],
-     Just [" 7: \\x{966}\\x{967}\\x{968}"],
-     Just [" 8: \\x{966}\\x{967}"],
-     Just [" 9: \\x{966}"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Nl}/8"],
-     Just [" 0: \\x{16ee}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{No}/8"],
-     Just [" 0: \\x{b2}"],
-     Just [" 0: \\x{b3}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pc}/8"],
-     Just [" 0: _"],
-     Just [" 0: \\x{203f}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pd}/8"],
-     Just [" 0: -"],
-     Just [" 0: \\x{58a}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pe}/8"],
-     Just [" 0: )"],
-     Just [" 0: ]"],
-     Just [" 0: }"],
-     Just [" 0: \\x{f3b}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pf}/8"],
-     Just [" 0: \\x{bb}"],
-     Just [" 0: \\x{2019}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Pi}/8"],
-     Just [" 0: \\x{ab}"],
-     Just [" 0: \\x{2018}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Po}/8"],
-     Just [" 0: !"],
-     Just [" 0: \\x{37e}"],
-     Just [" 0: *"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Ps}/8"],
-     Just [" 0: ("],
-     Just [" 0: ["],
-     Just [" 0: {"],
-     Just [" 0: \\x{f3c}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Sc}+/8"],
-     Just [" 0: $\\x{a2}\\x{a3}\\x{a4}\\x{a5}"],
-     Just [" 1: $\\x{a2}\\x{a3}\\x{a4}"],
-     Just [" 2: $\\x{a2}\\x{a3}"],
-     Just [" 3: $\\x{a2}"],
-     Just [" 4: $"],
-     Just [" 0: \\x{9f2}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Sk}/8"],
-     Just [" 0: \\x{2c2}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Sm}+/8"],
-     Just [" 0: +<|~\\x{ac}\\x{2044}"],
-     Just [" 1: +<|~\\x{ac}"],
-     Just [" 2: +<|~"],
-     Just [" 3: +<|"],
-     Just [" 4: +<"],
-     Just [" 5: +"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{So}/8"],
-     Just [" 0: \\x{a6}"],
-     Just [" 0: \\x{482}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Zl}/8"],
-     Just [" 0: \\x{2028}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Zp}/8"],
-     Just [" 0: \\x{2029}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Zs}/8"],
-     Just [" 0:  "],
-     Just [" 0: \\x{a0}"],
-     Just [" 0: \\x{1680}"],
-     Just [" 0: \\x{180e}"],
-     Just [" 0: \\x{2000}"],
-     Just [" 0: \\x{2001}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/\\p{Nd}+(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 2: \\x{660}\\x{661}\\x{662}"],
-     Just ["/\\p{Nd}+?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 2: \\x{660}\\x{661}\\x{662}"],
-     Just ["/\\p{Nd}{2,}(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just ["/\\p{Nd}{2,}?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just ["/\\p{Nd}*(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 2: \\x{660}\\x{661}\\x{662}"],
-     Just [" 3: \\x{660}\\x{661}"],
-     Just ["/\\p{Nd}*?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just [" 2: \\x{660}\\x{661}\\x{662}"],
-     Just [" 3: \\x{660}\\x{661}"],
-     Just ["/\\p{Nd}{2}(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}A"],
-     Just ["/\\p{Nd}{2,3}(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just ["/\\p{Nd}{2,3}?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just [" 1: \\x{660}\\x{661}\\x{662}A"],
-     Just ["/\\p{Nd}?(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}"],
-     Just [" 1: \\x{660}\\x{661}"],
-     Just ["/\\p{Nd}??(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}"],
-     Just [" 1: \\x{660}\\x{661}"],
-     Just ["/\\p{Nd}*+(..)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}AB"],
-     Just ["/\\p{Nd}*+(...)/8"],
-     Just [" 0: \\x{660}\\x{661}\\x{662}ABC"],
-     Just ["/\\p{Nd}*+(....)/8"],
-     Just [" 0: ** F"],
-     Nothing,
-     Just ["/\\p{Lu}/8i"],
-     Just [" 0: A"],
-     Just [" 0: \\x{10a0}"],
-     Just [" 0: F"],
-     Nothing,
-     Nothing]
-,
-testRegex "\\p{^Lu}" [caseless]
-    ["1234",
-     "** Failers",
-     "ABC "]
-    [Just [" 0: 1"],
-     Just [" 0: *"],
-     Nothing]
-,
-testRegex "\\P{Lu}" [caseless]
-    ["1234",
-     "** Failers",
-     "ABC "]
-    [Just [" 0: 1"],
-     Just [" 0: *"],
-     Nothing]
-,
-testRegex "(?<=A\\p{Nd})XYZ" [ERROR]
-    ["A2XYZ",
-     "123A5XYZPQR",
-     "ABA\\x{660}XYZpqr",
-     "** Failers",
-     "AXYZ",
-     "XYZ     ",
-     "",
-     "/(?<!\\pL)XYZ/8",
-     "1XYZ",
-     "AB=XYZ.. ",
-     "XYZ ",
-     "** Failers",
-     "WXYZ "]
-    [Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/(?<!\\pL)XYZ/8"],
-     Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Just [" 0: XYZ"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\p{Nd}]" [ERROR]
-    ["1234"]
-    [Just [" 0: 1"]]
-,
-testRegex "[\\p{Nd}+-]+" [ERROR]
-    ["1234",
-     "12-34",
-     "12+\\x{661}-34  ",
-     "** Failers",
-     "abcd  "]
-    [Just [" 0: 1234"],
-     Just [" 1: 123"],
-     Just [" 2: 12"],
-     Just [" 3: 1"],
-     Just [" 0: 12-34"],
-     Just [" 1: 12-3"],
-     Just [" 2: 12-"],
-     Just [" 3: 12"],
-     Just [" 4: 1"],
-     Just [" 0: 12+\\x{661}-34"],
-     Just [" 1: 12+\\x{661}-3"],
-     Just [" 2: 12+\\x{661}-"],
-     Just [" 3: 12+\\x{661}"],
-     Just [" 4: 12+"],
-     Just [" 5: 12"],
-     Just [" 6: 1"],
-     Nothing,
-     Nothing]
-,
-testRegex "[\\P{Nd}]+" [ERROR]
-    ["abcd",
-     "** Failers",
-     "1234"]
-    [Just [" 0: abcd"],
-     Just [" 1: abc"],
-     Just [" 2: ab"],
-     Just [" 3: a"],
-     Just [" 0: ** Failers"],
-     Just [" 1: ** Failer"],
-     Just [" 2: ** Faile"],
-     Just [" 3: ** Fail"],
-     Just [" 4: ** Fai"],
-     Just [" 5: ** Fa"],
-     Just [" 6: ** F"],
-     Just [" 7: ** "],
-     Just [" 8: **"],
-     Just [" 9: *"],
-     Nothing]
-,
-testRegex "\\D+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-     "",
-     "/\\P{Nd}+/8",
-     "11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["/\\P{Nd}+/8"],
-     Nothing,
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "[\\D]+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "[\\P{Nd}]+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "[\\D\\P{Nd}]+" [ERROR]
-    ["11111111111111111111111111111111111111111111111111111111111111111111111",
-     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
-    [Nothing,
-     Just ["Matched, but too many subsidiary matches"],
-     Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just [" 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
-     Just ["21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]]
-,
-testRegex "\\pL" [ERROR]
-    ["a",
-     "A "]
-    [Just [" 0: a"],
-     Just [" 0: A"]]
-,
-testRegex "\\pL" [caseless]
-    ["a",
-     "A ",
-     "",
-     "/\\p{Lu}/8 ",
-     "A",
-     "aZ",
-     "** Failers",
-     "abc   "]
-    [Just [" 0: a"],
-     Just [" 0: A"],
-     Just ["/\\p{Lu}/8 "],
-     Just [" 0: A"],
-     Just [" 0: Z"],
-     Just [" 0: F"],
-     Nothing]
-,
-testRegex "\\p{Lu}" [caseless]
-    ["A",
-     "aZ",
-     "** Failers",
-     "abc   "]
-    [Just [" 0: A"],
-     Just [" 0: Z"],
-     Just [" 0: F"],
-     Nothing]
-,
-testRegex "\\p{Ll}" [ERROR]
-    ["a",
-     "Az",
-     "** Failers",
-     "ABC   "]
-    [Just [" 0: a"],
-     Just [" 0: z"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "\\p{Ll}" [ERROR]
-    ["a",
-     "Az",
-     "** Failers",
-     "ABC   "]
-    [Just [" 0: a"],
-     Just [" 0: z"],
-     Just [" 0: a"],
-     Nothing]
-,
-testRegex "^\\x{c0}$" [caseless]
-    ["\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"]]
-,
-testRegex "^\\x{e0}$" [caseless]
-    ["\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"]]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [ERROR]
-    ["A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "** Failers",
-     "a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}   ",
-     "A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}"]
-    [Just [" 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}" [caseless]
-    ["A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}   ",
-     "A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{1044F}\\x{ff3a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}",
-     "A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}"]
-    [Just [" 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: a\\x{391}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: A\\x{3b1}\\x{10427}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: A\\x{391}\\x{1044f}\\x{ff3a}\\x{1fb0}"],
-     Just [" 0: A\\x{391}\\x{10427}\\x{ff5a}\\x{1fb0}"],
-     Just [" 0: A\\x{391}\\x{10427}\\x{ff3a}\\x{1fb8}"]]
-,
-testRegex "\\x{391}+" [caseless]
-    ["\\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}"]
-    [Just [" 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}"],
-     Just [" 1: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}"],
-     Just [" 2: \\x{391}\\x{3b1}\\x{3b1}"],
-     Just [" 3: \\x{391}\\x{3b1}"],
-     Just [" 4: \\x{391}"]]
-,
-testRegex "\\x{391}{3,5}(.)" [caseless]
-    ["\\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"]
-    [Just [" 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"],
-     Just [" 1: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}"],
-     Just [" 2: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}"]]
-,
-testRegex "\\x{391}{3,5}?(.)" [caseless]
-    ["\\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"]
-    [Just [" 0: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}X"],
-     Just [" 1: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}\\x{391}"],
-     Just [" 2: \\x{391}\\x{3b1}\\x{3b1}\\x{3b1}"]]
-,
-testRegex "[\\x{391}\\x{ff3a}]" [caseless]
-    ["\\x{391}",
-     "\\x{ff3a}",
-     "\\x{3b1}",
-     "\\x{ff5a}   ",
-     "",
-     "/[\\x{c0}\\x{391}]/8i",
-     "\\x{c0}",
-     "\\x{e0} "]
-    [Just [" 0: \\x{391}"],
-     Just [" 0: \\x{ff3a}"],
-     Just [" 0: \\x{3b1}"],
-     Just [" 0: \\x{ff5a}"],
-     Just ["/[\\x{c0}\\x{391}]/8i"],
-     Just [" 0: \\x{c0}"],
-     Just [" 0: \\x{e0}"]]
-,
-testRegex "[\\x{105}-\\x{109}]" [caseless]
-    ["\\x{104}",
-     "\\x{105}",
-     "\\x{109}  ",
-     "** Failers",
-     "\\x{100}",
-     "\\x{10a} ",
-     "",
-     "/[z-\\x{100}]/8i ",
-     "Z",
-     "z",
-     "\\x{39c}",
-     "\\x{178}",
-     "|",
-     "\\x{80}",
-     "\\x{ff}",
-     "\\x{100}",
-     "\\x{101} ",
-     "** Failers",
-     "\\x{102}",
-     "Y",
-     "y           "]
-    [Just [" 0: \\x{104}"],
-     Just [" 0: \\x{105}"],
-     Just [" 0: \\x{109}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Just ["/[z-\\x{100}]/8i "],
-     Just [" 0: Z"],
-     Just [" 0: z"],
-     Just [" 0: \\x{39c}"],
-     Just [" 0: \\x{178}"],
-     Just [" 0: |"],
-     Just [" 0: \\x{80}"],
-     Just [" 0: \\x{ff}"],
-     Just [" 0: \\x{100}"],
-     Just [" 0: \\x{101}"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "[z-\\x{100}]" [caseless]
-    []
-    []
-,
-testRegex "^\\X" [ERROR]
-    ["A",
-     "A\\x{300}BC ",
-     "A\\x{300}\\x{301}\\x{302}BC ",
-     "*** Failers",
-     "\\x{300}  "]
-    [Just [" 0: A"],
-     Just [" 0: A\\x{300}"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}"],
-     Just [" 0: *"],
-     Nothing]
-,
-testRegex "^[\\X]" [ERROR]
-    ["X123",
-     "*** Failers",
-     "AXYZ"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^(\\X*)C" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BC"]]
-,
-testRegex "^(\\X*?)C" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BC"]]
-,
-testRegex "^(\\X*)(.)" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BCA"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 2: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 3: A"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BCA"],
-     Just [" 2: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 3: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 4: A"]]
-,
-testRegex "^(\\X*?)(.)" [ERROR]
-    ["A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301} ",
-     "A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C "]
-    [Just [" 0: A\\x{300}\\x{301}\\x{302}BCA"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 2: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 3: A"],
-     Just [" 0: A\\x{300}\\x{301}\\x{302}BCA\\x{300}\\x{301}C"],
-     Just [" 1: A\\x{300}\\x{301}\\x{302}BCA"],
-     Just [" 2: A\\x{300}\\x{301}\\x{302}BC"],
-     Just [" 3: A\\x{300}\\x{301}\\x{302}B"],
-     Just [" 4: A"]]
-,
-testRegex "^\\X(.)" [ERROR]
-    ["*** Failers",
-     "A\\x{300}\\x{301}\\x{302}"]
-    [Just [" 0: **"],
-     Nothing]
-,
-testRegex "^\\X{2,3}(.)" [ERROR]
-    ["A\\x{300}\\x{301}B\\x{300}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X",
-     "",
-     "/^\\X{2,3}?(.)/8",
-     "A\\x{300}\\x{301}B\\x{300}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X",
-     "A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}DA\\x{300}X"]
-    [Just [" 0: A\\x{300}\\x{301}B\\x{300}X"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X"],
-     Just [" 1: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}D"],
-     Just [" 1: A\\x{300}\\x{301}B\\x{300}C"],
-     Just ["/^\\X{2,3}?(.)/8"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}X"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}X"],
-     Just [" 1: A\\x{300}\\x{301}B\\x{300}C"],
-     Just [" 0: A\\x{300}\\x{301}B\\x{300}C\\x{300}\\x{301}D"],
-     Just [" 1: A\\x{300}\\x{301}B\\x{300}C"]]
-,
-testRegex "^\\pN{2,3}X" []
-    ["12X",
-     "123X",
-     "*** Failers",
-     "X",
-     "1X",
-     "1234X     "]
-    [Just [" 0: 12X"],
-     Just [" 0: 123X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "\\x{100}" [ERROR]
-    ["\\x{100}   ",
-     "\\x{101} ",
-     "",
-     "/^\\p{Han}+/8",
-     "\\x{2e81}\\x{3007}\\x{2f804}\\x{31a0}",
-     "** Failers",
-     "\\x{2e7f}  "]
-    [Just [" 0: \\x{100}"],
-     Just [" 0: \\x{101}"],
-     Just ["/^\\p{Han}+/8"],
-     Just [" 0: \\x{2e81}\\x{3007}\\x{2f804}"],
-     Just [" 1: \\x{2e81}\\x{3007}"],
-     Just [" 2: \\x{2e81}"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{Katakana}+" [ERROR]
-    ["\\x{3105}",
-     "** Failers",
-     "\\x{30ff}  "]
-    [Just [" 0: \\x{3105}"],
-     Just [" 0: ** Failers"],
-     Just [" 1: ** Failer"],
-     Just [" 2: ** Faile"],
-     Just [" 3: ** Fail"],
-     Just [" 4: ** Fai"],
-     Just [" 5: ** Fa"],
-     Just [" 6: ** F"],
-     Just [" 7: ** "],
-     Just [" 8: **"],
-     Just [" 9: *"],
-     Nothing]
-,
-testRegex "^[\\p{Arabic}]" [ERROR]
-    ["\\x{06e9}",
-     "\\x{060b}",
-     "** Failers",
-     "X\\x{06e9}   "]
-    [Just [" 0: \\x{6e9}"],
-     Just [" 0: \\x{60b}"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{Yi}]" [ERROR]
-    ["\\x{2f800}",
-     "** Failers",
-     "\\x{a014}",
-     "\\x{a4c6}   "]
-    [Just [" 0: \\x{2f800}"],
-     Just [" 0: *"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "X  ",
-     "",
-     "/^\\P{Any}X/8",
-     "** Failers",
-     "AX",
-     "",
-     "/^\\p{Any}?X/8",
-     "XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "ABXYZ   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing,
-     Just ["/^\\P{Any}X/8"],
-     Nothing,
-     Nothing,
-     Just ["/^\\p{Any}?X/8"],
-     Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{Any}?X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "ABXYZ   "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}+X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers",
-     "XYZ"]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{Any}+X" [ERROR]
-    ["** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "XYZ"]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}*X" [ERROR]
-    ["XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers"]
-    [Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing]
-,
-testRegex "^\\P{Any}*X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{Any}]X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "X  ",
-     "",
-     "/^[\\P{Any}]X/8",
-     "** Failers",
-     "AX",
-     "",
-     "/^[\\p{Any}]?X/8",
-     "XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "** Failers",
-     "ABXYZ   "]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing,
-     Just ["/^[\\P{Any}]X/8"],
-     Nothing,
-     Nothing,
-     Just ["/^[\\p{Any}]?X/8"],
-     Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{Any}]?X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ ",
-     "ABXYZ   "]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{Any}]+X" [ERROR]
-    ["AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers",
-     "XYZ"]
-    [Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{Any}]+X" [ERROR]
-    ["** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "XYZ"]
-    [Nothing,
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{Any}]*X" [ERROR]
-    ["XYZ",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ",
-     "** Failers"]
-    [Just [" 0: X"],
-     Just [" 0: AX"],
-     Just [" 0: \\x{1234}X"],
-     Just [" 0: A\\x{1234}X"],
-     Nothing]
-,
-testRegex "^[\\P{Any}]*X" [ERROR]
-    ["XYZ",
-     "** Failers",
-     "AXYZ",
-     "\\x{1234}XYZ",
-     "A\\x{1234}XYZ"]
-    [Just [" 0: X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{Any}{3,5}?" [ERROR]
-    ["abcdefgh",
-     "\\x{1234}\\n\\r\\x{3456}xyz "]
-    [Just [" 0: abcde"],
-     Just [" 1: abcd"],
-     Just [" 2: abc"],
-     Just [" 0: \\x{1234}\\x{0a}\\x{0d}\\x{3456}x"],
-     Just [" 1: \\x{1234}\\x{0a}\\x{0d}\\x{3456}"],
-     Just [" 2: \\x{1234}\\x{0a}\\x{0d}"]]
-,
-testRegex "^\\p{Any}{3,5}" [ERROR]
-    ["abcdefgh",
-     "\\x{1234}\\n\\r\\x{3456}xyz "]
-    [Just [" 0: abcde"],
-     Just [" 1: abcd"],
-     Just [" 2: abc"],
-     Just [" 0: \\x{1234}\\x{0a}\\x{0d}\\x{3456}x"],
-     Just [" 1: \\x{1234}\\x{0a}\\x{0d}\\x{3456}"],
-     Just [" 2: \\x{1234}\\x{0a}\\x{0d}"]]
-,
-testRegex "^\\P{Any}{3,5}?" [ERROR]
-    ["** Failers",
-     "abcdefgh",
-     "\\x{1234}\\n\\r\\x{3456}xyz "]
-    [Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{L&}X" [ERROR]
-    ["AXY",
-     "aXY",
-     "\\x{1c5}XY",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: \\x{1c5}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{L&}]X" [ERROR]
-    ["AXY",
-     "aXY",
-     "\\x{1c5}XY",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: \\x{1c5}X"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{L&}+X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEXypqreX"],
-     Just [" 1: abcDEX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{L&}]+X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEXypqreX"],
-     Just [" 1: abcDEX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\p{L&}+?X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEXypqreX"],
-     Just [" 1: abcDEX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\p{L&}]+?X" [ERROR]
-    ["AXY",
-     "aXY",
-     "AbcdeXyz ",
-     "\\x{1c5}AbXY",
-     "abcDEXypqreXlmn ",
-     "** Failers",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "!XY      "]
-    [Just [" 0: AX"],
-     Just [" 0: aX"],
-     Just [" 0: AbcdeX"],
-     Just [" 0: \\x{1c5}AbX"],
-     Just [" 0: abcDEXypqreX"],
-     Just [" 1: abcDEX"],
-     Nothing,
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\P{L&}X" [ERROR]
-    ["!XY",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "** Failers",
-     "\\x{1c5}XY",
-     "AXY      "]
-    [Just [" 0: !X"],
-     Just [" 0: \\x{1bb}X"],
-     Just [" 0: \\x{2b0}X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^[\\P{L&}]X" [ERROR]
-    ["!XY",
-     "\\x{1bb}XY",
-     "\\x{2b0}XY",
-     "** Failers",
-     "\\x{1c5}XY",
-     "AXY      "]
-    [Just [" 0: !X"],
-     Just [" 0: \\x{1bb}X"],
-     Just [" 0: \\x{2b0}X"],
-     Nothing,
-     Nothing,
-     Nothing]
-,
-testRegex "^\\x{023a}+?(\\x{0130}+)" [caseless]
-    ["\\x{023a}\\x{2c65}\\x{0130}",
-     "",
-     "/^\\x{023a}+([^X])/8i",
-     "\\x{023a}\\x{2c65}X",
-     "",
-     "/Check property support in non-UTF-8 mode/",
-     "",
-     "/\\p{L}{4}/",
-     "123abcdefg",
-     "123abc\\xc4\\xc5zz"]
-    [Just [" 0: \\x{23a}\\x{2c65}\\x{130}"],
-     Just ["/^\\x{023a}+([^X])/8i"],
-     Just [" 0: \\x{23a}\\x{2c65}"],
-     Just ["/Check property support in non-UTF-8 mode/"],
-     Just ["/\\p{L}{4}/"],
-     Just [" 0: abcd"],
-     Just [" 0: abc\\xc4"]]
-,
-testRegex " End " [ERROR]
-    []
-    []
