blob: 64a6af7ce4e2aaddcfa9e89a49ff6cdbf59d44ab [file] [edit]
# This set of tests exercises the serialization/deserialization and code copy
# functions in the library. The first section requires Unicode support; the
# remaining tests do not use UTF. None of the tests use JIT.
#if unicode
# Six disjoint characters above 255 require character lists. Vary the name
# length to exercise padding between the name table and the aligned lists.
/(?<A>[\x{100}\x{200}\x{300}\x{400}\x{500}\x{600}])/utf,push
/(?<AB>[\x{100}\x{200}\x{300}\x{400}\x{500}\x{600}])/utf,push
/(?<ABC>[\x{100}\x{200}\x{300}\x{400}\x{500}\x{600}])/utf,push
/(?<ABCD>[\x{100}\x{200}\x{300}\x{400}\x{500}\x{600}])/utf,push
#save testsaved1
#load testsaved1
#pop
\x{100}
0: \x{100}
1: \x{100}
\x{600}
0: \x{600}
1: \x{600}
\x{150}
No match
#pop
\x{100}
0: \x{100}
1: \x{100}
\x{600}
0: \x{600}
1: \x{600}
\x{150}
No match
#pop
\x{100}
0: \x{100}
1: \x{100}
\x{600}
0: \x{600}
1: \x{600}
\x{150}
No match
#pop
\x{100}
0: \x{100}
1: \x{100}
\x{600}
0: \x{600}
1: \x{600}
\x{150}
No match
#endif
#forbid_utf
# Compile several patterns, push them onto the stack, and then write them
# all to a file.
#pattern push
/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
(?(DEFINE)
(?<NAME_PAT>[a-z]+)
(?<ADDRESS_PAT>\d+)
)/x
/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
#save testsaved1
# Do it again for some more patterns.
/(*MARK:A)(*SKIP:B)(C|X)/mark
** Ignored when compiled pattern is stacked with 'push': mark
/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
#save testsaved2
#pattern -push
# Reload the patterns, then pop them one by one and check them.
#load testsaved1
#load testsaved2
#pop info
Capture group count = 2
Max back reference = 2
Named capture groups:
n 1
n 2
Options: dupnames
Starting code units: b f
Subject length lower bound = 6
foofoo
0: foofoo
1: foo
barbar
0: barbar
1: <unset>
2: bar
#pop mark
C
0: C
1: C
MK: A
\= Expect no match
D
No match, mark = A
#pop
AmanaplanacanalPanama
0: AmanaplanacanalPanama
1: <unset>
2: <unset>
3: AmanaplanacanalPanama
4: A
#pop info
Capture group count = 4
Named capture groups:
ADDR 2
ADDRESS_PAT 4
NAME 1
NAME_PAT 3
Options: extended
Subject length lower bound = 3
metcalfe 33
0: metcalfe 33
1: metcalfe
2: 33
# Check for an error when different tables are used.
/abc/push,tables=1
/xyz/push,tables=2
#save testsaved1
Serialization failed: error -30: patterns do not all use the same character tables
#pop
xyz
0: xyz
#pop
abc
0: abc
#pop should give an error
** Can't pop off an empty stack
pqr
/abcd/pushcopy
abcd
0: abcd
#pop
abcd
0: abcd
#pop should give an error
** Can't pop off an empty stack
/abcd/push
#popcopy
abcd
0: abcd
#pop
abcd
0: abcd
/abcd/push
#save testsaved1
#pop should give an error
** Can't pop off an empty stack
#load testsaved1
#popcopy
abcd
0: abcd
#pop
abcd
0: abcd
#pop should give an error
** Can't pop off an empty stack
/abcd/pushtablescopy
abcd
0: abcd
#popcopy
abcd
0: abcd
#pop
abcd
0: abcd
# Must only specify one of these
//push,pushcopy
** Not allowed together: push pushcopy
//push,pushtablescopy
** Not allowed together: push pushtablescopy
//pushcopy,pushtablescopy
** Not allowed together: pushcopy pushtablescopy
# End of testinput20