471 lines
8.9 KiB
Plaintext
471 lines
8.9 KiB
Plaintext
#
|
|
# Copyright (c) 2002 by The XFree86 Project, Inc.
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
# copy of this software and associated documentation files (the "Software"),
|
|
# to deal in the Software without restriction, including without limitation
|
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
# and/or sell copies of the Software, and to permit persons to whom the
|
|
# Software is furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
# THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
|
# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
#
|
|
# Except as contained in this notice, the name of the XFree86 Project shall
|
|
# not be used in advertising or otherwise to promote the sale, use or other
|
|
# dealings in this Software without prior written authorization from the
|
|
# XFree86 Project.
|
|
#
|
|
# Author: Paulo César Pereira de Andrade
|
|
#
|
|
#
|
|
# $XFree86: xc/programs/xedit/lisp/re/tests.txt,v 1.1 2002/09/08 02:29:50 paulo Exp $
|
|
|
|
# Some tests for the library:
|
|
# lines starting with # are comments
|
|
# lines starting with / are a regular expression pattern
|
|
# The pattern must end with / and may be followed by:
|
|
# i -> ignore case
|
|
# n -> create newline sensitive regex
|
|
# lines starting with > are a string input to the last pattern
|
|
# To test newline sensitive matching, add \n to the string.
|
|
# lines starting with a number are the expected result
|
|
# If more than one line, every subsequent line is the
|
|
# value of an "subresult".
|
|
# :NOMATCH means that the string input should not match
|
|
|
|
# Simple string
|
|
/abc/
|
|
>abc
|
|
0,3: abc
|
|
>aaaaaaaaaaaaaaabc
|
|
14,17: abc
|
|
>xxxxxxxxxxxxxxaaaaaaaaaaaaaaaaabcxx
|
|
30,33: abc
|
|
|
|
# String list
|
|
/abc|bcd|cde/
|
|
>abc
|
|
0,3: abc
|
|
>aabc
|
|
1,4: abc
|
|
>xxxbcdef
|
|
3,6: bcd
|
|
>abdzzzcdabcde
|
|
8,11: abc
|
|
>xxxxabdecdabdcde
|
|
13,16: cde
|
|
|
|
# Complex string
|
|
/a?bc|ab?c|abc?/
|
|
>abc
|
|
0,3: abc
|
|
>xxxb
|
|
:NOMATCH
|
|
>xxxbc
|
|
3,5: bc
|
|
>sssssab
|
|
5,7: ab
|
|
|
|
# Another complex string
|
|
/a*bc|ab*c|abc*/
|
|
>aaaaaaabc
|
|
0,9: aaaaaaabc
|
|
>xaaaaaaabc
|
|
1,10: aaaaaaabc
|
|
>xyzaaaaaaabc
|
|
3,12: aaaaaaabc
|
|
>abbc
|
|
0,4: abbc
|
|
>xxabbbbbc
|
|
2,9: abbbbbc
|
|
>abcccccccccc
|
|
0,12: abcccccccccc
|
|
>abccccccccccd
|
|
0,12: abcccccccccc
|
|
>xxxxxxxaaaaaaaaaabbbbbbbbbbbccccccccccc
|
|
16,29: abbbbbbbbbbbc
|
|
>xxxbbbbbbbbbc
|
|
11,13: bc
|
|
|
|
# Another complex string
|
|
/a+bc|ab+c|abc+/
|
|
>xxxbc
|
|
:NOMATCH
|
|
>xaaabc
|
|
1,6: aaabc
|
|
>zzzzaaaaabbc
|
|
8,12: abbc
|
|
>zzzzaaaabbbbbbcccc
|
|
7,15: abbbbbbc
|
|
|
|
# Simple pattern
|
|
/a.c/
|
|
>abc
|
|
0,3: abc
|
|
>aaac
|
|
1,4: aac
|
|
>xac
|
|
:NOMATCH
|
|
>xaac
|
|
1,4: aac
|
|
>xxabc
|
|
2,5: abc
|
|
>xxxaxc
|
|
3,6: axc
|
|
|
|
# Another simple pattern
|
|
/a*c/
|
|
>c
|
|
0,1: c
|
|
>xxxxxxxxc
|
|
8,9: c
|
|
>xxxxxxxcc
|
|
7,8: c
|
|
>ac
|
|
0,2: ac
|
|
>aaaac
|
|
0,5: aaaac
|
|
>xac
|
|
1,3: ac
|
|
>xxxaac
|
|
3,6: aac
|
|
>xxac
|
|
2,4: ac
|
|
>xxxxac
|
|
4,6: ac
|
|
|
|
# Another simple pattern
|
|
/a+c/
|
|
>xxaac
|
|
2,5: aac
|
|
>xxxaaaac
|
|
3,8: aaaac
|
|
>xaaaabac
|
|
6,8: ac
|
|
>xxxc
|
|
:NOMATCH
|
|
>xxxxaaaaccc
|
|
4,9: aaaac
|
|
|
|
# Another simple pattern
|
|
/a{4}b/
|
|
>xabxxaabxxxaaabxxxxaaaab
|
|
19,24: aaaab
|
|
>aaabaaaab
|
|
4,9: aaaab
|
|
|
|
# Another simple pattern
|
|
/a{4,}b/
|
|
>xxxaaaab
|
|
3,8: aaaab
|
|
>zaaabzzzaaaaaaaaaaaaaaaab
|
|
8,25: aaaaaaaaaaaaaaaab
|
|
|
|
# Another simple pattern
|
|
/a{,4}b/
|
|
>b
|
|
0,1: b
|
|
>xxxxxxxxb
|
|
8,9: b
|
|
>xaaaaaaaaab
|
|
6,11: aaaab
|
|
>xxxab
|
|
3,5: ab
|
|
>aaaaaxaaab
|
|
6,10: aaab
|
|
|
|
# Another simple pattern
|
|
/a{2,4}b/
|
|
>xab
|
|
:NOMATCH
|
|
>xaab
|
|
1,4: aab
|
|
>xaaab
|
|
1,5: aaab
|
|
>xxaaaab
|
|
2,7: aaaab
|
|
>xxxaaaaab
|
|
4,9: aaaab
|
|
|
|
# Some simple grouping tests
|
|
/foo(bar|baz)fee/
|
|
>feebarbazfoobarfee
|
|
9,18: foobarfee
|
|
12,15: bar
|
|
>foofooobazfeefoobazfee
|
|
13,22: foobazfee
|
|
/f(oo|ee)ba[rz]/
|
|
>barfoebaz
|
|
:NOMATCH
|
|
>bazfoobar
|
|
3,9: foobar
|
|
4,6: oo
|
|
>barfeebaz
|
|
3,9: feebaz
|
|
4,6: ee
|
|
/\<(int|char)\>/
|
|
>aint character int foo
|
|
15,18: int
|
|
15,18: int
|
|
|
|
# Some complex repetitions
|
|
/foo.*bar/
|
|
>barfoblaboofoobarfoobarfoobar
|
|
11,17: foobar
|
|
/foo.+bar/
|
|
>foobar
|
|
:NOMATCH
|
|
>fobbarfooxbarfooybar
|
|
6,13: fooxbar
|
|
/foo.?bar/
|
|
>xfoobar
|
|
1,7: foobar
|
|
>xxfooxxbar
|
|
:NOMATCH
|
|
>yyyfootbar
|
|
3,10: footbar
|
|
|
|
# Some nested complex repetitions
|
|
/a.*b.*c/
|
|
>abc
|
|
0,3: abc
|
|
>xxxxxxxxxabbbbbbbccaaaaabbbc
|
|
9,18: abbbbbbbc
|
|
/a.+b.*c/
|
|
>xxxabc
|
|
:NOMATCH
|
|
>xxaxbbc
|
|
2,7: axbbc
|
|
/a.+b.?c/
|
|
>xaabc
|
|
1,5: aabc
|
|
>xxaabbc
|
|
2,7: aabbc
|
|
|
|
# Very complex repetitions
|
|
/(foo.*|bar)fee/
|
|
# XXX NOTE
|
|
# This pattern does not return the correct offset for the group.
|
|
# Support for this may and may not be added.
|
|
|
|
>barfoofee
|
|
3,9: foofee
|
|
>foobarfee
|
|
0,9: foobarfee
|
|
>xxfobarfee
|
|
4,10: barfee
|
|
>barfooooooobarfee
|
|
3,17: fooooooobarfee
|
|
>xxfobarfeefoobar
|
|
4,10: barfee
|
|
/(foo.+|bar)fee/
|
|
>barfoofee
|
|
:NOMATCH
|
|
>barfooxfee
|
|
3,10: fooxfee
|
|
/(foo.?|bar)fee/
|
|
>foobar
|
|
:NOMATCH
|
|
>bafoofee
|
|
2,8:foofee
|
|
>bafooofeebarfee
|
|
2,9: fooofee
|
|
>bafoofeebarfee
|
|
2,8: foofee
|
|
|
|
# Simple backreference
|
|
/(a|b|c)\1/
|
|
>aa
|
|
0,2: aa
|
|
0,1: a
|
|
/(a|b|c)(a|b|c)\1\2/
|
|
>acac
|
|
0,4: acac
|
|
0,1: a
|
|
1,2: c
|
|
>xxxxacac
|
|
4,8: acac
|
|
4,5: a
|
|
5,6: c
|
|
>xxacabacbcacbbacbcaaccabcaca
|
|
24,28: caca
|
|
24,25: c
|
|
25,26: a
|
|
>xyabcccc
|
|
4,8: cccc
|
|
4,5: c
|
|
5,6: c
|
|
|
|
# Complex backreference
|
|
/(a*b)\1/
|
|
>xxxaaaaabaaaaab
|
|
3,15: aaaaabaaaaab
|
|
3,9: aaaaab
|
|
/(ab+c)\1/
|
|
>xaaabbbcabbbc
|
|
3,13: abbbcabbbc
|
|
3,8: abbbc
|
|
/(ab?c)\1/
|
|
>abcac
|
|
:NOMATCH
|
|
>abcacabcabc
|
|
5,11: abcabc
|
|
5,8: abc
|
|
>abcacac
|
|
3,7: acac
|
|
3,5: acac
|
|
|
|
# Very complex backreference
|
|
/a(.*)b\1/
|
|
>xxxab
|
|
3,5: ab
|
|
4,4:
|
|
>xxxxazzzbzzz
|
|
4,12: azzzbzzz
|
|
5,8: zzz
|
|
|
|
# Case testing
|
|
/abc/i
|
|
>AbC
|
|
0,3: AbC
|
|
/[0-9][a-z]+/i
|
|
>xxx0aaZxYT9
|
|
3,10: 0aaZxYT
|
|
/a.b/i
|
|
>aaaaaaaaaaaxB
|
|
10,13: axB
|
|
/a.*z/i
|
|
>xxxAaaaaZ
|
|
3,9: AaaaaZ
|
|
>xxaaaZaaa
|
|
2,6: aaaZ
|
|
/\<(lambda|defun|defmacro)\>/i
|
|
> (lambda
|
|
5,11: lambda
|
|
5,11: lambda
|
|
/\<(nil|t)\>/i
|
|
>it Nil
|
|
3,6: Nil
|
|
3,6: Nil
|
|
/\<(begin|end)\>/i
|
|
>beginning the ending EnD
|
|
21,24: EnD
|
|
21,24: EnD
|
|
|
|
# Some newline tests
|
|
/a.*/n
|
|
>a\naaa
|
|
0,1:a
|
|
>xyza\naa
|
|
3,4: a
|
|
/a.+/n
|
|
>a\naaa
|
|
2,5: aaa
|
|
>xyza\naa
|
|
5,7: aa
|
|
/a.?/n
|
|
>a\naaa
|
|
0,1: a
|
|
>xyza\naa
|
|
3,4: a
|
|
|
|
# Newline tests envolving complex patterns
|
|
/a.*b.*c/n
|
|
>xxaa\nzyacb\nabc
|
|
11,14: abc
|
|
>xxxab\nabc\nc
|
|
6,9: abc
|
|
/a.+b.*c/n
|
|
>ab\nbc\nabbc
|
|
6,10: abbc
|
|
/a.?b.*c/n
|
|
>ab\ncabbc\ncc
|
|
4,8: abbc
|
|
/^foo$/n
|
|
>bar\nfoobar\nfoo
|
|
11,14: foo
|
|
|
|
# Not so complex test involving a newline...
|
|
/^\s*#\s*(define|include)\s+.+/n
|
|
>#define\n#include x
|
|
8,18: #include x
|
|
9,16: include
|
|
|
|
# Check if large strings are working
|
|
/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
|
|
>zzzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxzzz
|
|
3,259: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~/
|
|
>String here: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~/
|
|
13,333: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890~
|
|
|
|
|
|
# Some complex repetitions not supported
|
|
# Listed here only to make sure the library is not crashing on these
|
|
# Repetitions that match an empty match, or an empty string cannot follow
|
|
# a complex repetition. A complex repetition is:
|
|
# .* or .+ or .?
|
|
# .{...} is not supported.
|
|
/(.*)(\d*)/
|
|
:BADRPT
|
|
/(.*).(\d*)/
|
|
:BADRPT
|
|
/(.*)\<(\d*)/
|
|
:BADRPT
|
|
/(.*)\s(\d*)/
|
|
:BADRPT
|
|
/(.*)\D(\d*)/
|
|
:BADRPT
|
|
|
|
# This is a more clear pattern and partially works
|
|
/(.*)\D(\d+)/
|
|
>abcW12
|
|
0,6: abcW12
|
|
0,3: abc
|
|
4,6: 12
|
|
>abcW12abcW12
|
|
0,6: abcW12
|
|
0,3: abc
|
|
4,6: 12
|
|
# This wasn't working in the previous version, but now with only minimal
|
|
# matches supported, it works.
|
|
>abcW12abcW12a
|
|
0,6: abcW12
|
|
0,3: abc
|
|
4,6: 12
|
|
|
|
# Note the minimal match
|
|
/.*\d/
|
|
>a1a1a1aaaaaaa
|
|
0,2: a1
|
|
# Check match offsets
|
|
/(.*)\d/
|
|
>a1a1a1aaaaaaa
|
|
0,2: a1
|
|
0,1: a
|
|
/.*(\d)/
|
|
>a1a1a1aaaaaaa
|
|
0,2: a1
|
|
1,2: 1
|
|
|
|
/.*(\d+)/
|
|
:BADRPT
|
|
|
|
# Regression fix, was matching empty string
|
|
/\\\d{3}|\\./
|
|
>\\
|
|
:NOMATCH
|
|
|
|
/\\.|\\\d{3}/
|
|
>\\
|
|
:NOMATCH
|