# Input is in the following format (all items white-space separated):
#
# The first two items are 1 or 0 indicating if the wildmat call is expected to
# succeed and if fnmatch works the same way as wildmat, respectively.  After
# that is a text string for the match, and a pattern string.  Strings can be
# quoted (if desired) in either double or single quotes, as well as backticks.
#
# MATCH FNMATCH_SAME "text to match" 'pattern to use'

# Basic wildmat features
1 1 foo			foo
0 1 foo			bar
1 1 ''			""
1 1 foo			???
0 1 foo			??
1 1 foo			*
1 1 foo			f*
0 1 foo			*f
1 1 foo			*foo*
1 1 foobar		*ob*a*r*
1 1 aaaaaaabababab	*ab
1 1 foo*		foo\*
0 1 foobar		foo\*bar
1 1 f\oo		f\\oo
1 1 ball		*[al]?
0 1 ten			[ten]
1 1 ten			**[!te]
0 1 ten			**[!ten]
1 1 ten			t[a-g]n
0 1 ten			t[!a-g]n
1 1 ton			t[!a-g]n
1 1 ton			t[^a-g]n
1 1 a]b			a[]]b
1 1 a-b			a[]-]b
1 1 a]b			a[]-]b
0 1 aab			a[]-]b
1 1 aab			a[]a-]b
1 1 ]			]

# Extended slash-matching features
0 1 foo/baz/bar		foo*bar
1 1 foo/baz/bar		foo**bar
0 1 foo/bar		foo?bar
0 1 foo/bar		foo[/]bar
0 1 foo/bar		f[^eiu][^eiu][^eiu][^eiu][^eiu]r
1 1 foo-bar		f[^eiu][^eiu][^eiu][^eiu][^eiu]r
0 1 foo			**/foo
1 1 /foo		**/foo
1 1 bar/baz/foo		**/foo
0 1 bar/baz/foo		*/foo
0 0 foo/bar/baz		**/bar*
1 1 deep/foo/bar/baz	**/bar/*
0 1 deep/foo/bar/baz/	**/bar/*
1 1 deep/foo/bar/baz/	**/bar/**
0 1 deep/foo/bar	**/bar/*
1 1 deep/foo/bar/	**/bar/**
1 1 foo/bar/baz		**/bar**
1 1 foo/bar/baz/x	*/bar/**
0 0 deep/foo/bar/baz/x	*/bar/**
1 1 deep/foo/bar/baz/x	**/bar/*/*

# Various additional tests
0 1 acrt		a[c-c]st
1 1 acrt		a[c-c]rt
0 1 ]			[!]-]
1 1 a			[!]-]
0 1 ''			\
0 1 \			\
0 1 /\			*/\
1 1 /\			*/\\
1 1 foo			foo
1 1 @foo		@foo
0 1 foo			@foo
1 1 [ab]		\[ab]
1 1 [ab]		[[]ab]
1 1 [ab]		[[:]ab]
0 1 [ab]		[[::]ab]
1 1 [ab]		[[:digit]ab]
1 1 [ab]		[\[:]ab]
1 1 ?a?b		\??\?b
1 1 abc			\a\b\c
0 1 foo			''
1 1 foo/bar/baz/to	**/t[o]

# Character class tests
1 1 a1B		[[:alpha:]][[:digit:]][[:upper:]]
0 1 a		[[:digit:][:upper:][:space:]]
1 1 A		[[:digit:][:upper:][:space:]]
1 1 1		[[:digit:][:upper:][:space:]]
0 1 1		[[:digit:][:upper:][:spaci:]]
1 1 ' '		[[:digit:][:upper:][:space:]]
0 1 .		[[:digit:][:upper:][:space:]]
1 1 .		[[:digit:][:punct:][:space:]]
1 1 5		[[:xdigit:]]
1 1 f		[[:xdigit:]]
1 1 D		[[:xdigit:]]
1 1 _		[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]
#1 1 …		[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]
1 1 		[^[:alnum:][:alpha:][:blank:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]
1 1 .		[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]
1 1 5		[a-c[:digit:]x-z]
1 1 b		[a-c[:digit:]x-z]
1 1 y		[a-c[:digit:]x-z]
0 1 q		[a-c[:digit:]x-z]

# Additional tests, including some malformed wildmats
1 1 ]		[\\-^]
0 1 [		[\\-^]
1 1 -		[\-_]
1 1 ]		[\]]
0 1 \]		[\]]
0 1 \		[\]]
0 1 ab		a[]b
0 1 a[]b	a[]b
0 1 ab[		ab[
0 1 ab		[!
0 1 ab		[-
1 1 -		[-]
0 1 -		[a-
0 1 -		[!a-
1 1 -		[--A]
1 1 5		[--A]
1 1 ' '		'[ --]'
1 1 $		'[ --]'
1 1 -		'[ --]'
0 1 0		'[ --]'
1 1 -		[---]
1 1 -		[------]
0 1 j		[a-e-n]
1 1 -		[a-e-n]
1 1 a		[!------]
0 1 [		[]-a]
1 1 ^		[]-a]
0 1 ^		[!]-a]
1 1 [		[!]-a]
1 1 ^		[a^bc]
1 1 -b]		[a-]b]
0 1 \		[\]
1 1 \		[\\]
0 1 \		[!\\]
1 1 G		[A-\\]
0 1 aaabbb	b*a
0 1 aabcaa	*ba*
1 1 ,		[,]
1 1 ,		[\\,]
1 1 \		[\\,]
1 1 -		[,-.]
0 1 +		[,-.]
0 1 -.]		[,-.]
1 1 2		[\1-\3]
1 1 3		[\1-\3]
0 1 4		[\1-\3]
1 1 \		[[-\]]
1 1 [		[[-\]]
1 1 ]		[[-\]]
0 1 -		[[-\]]

# Test recursion and the abort code (use "wildtest -i" to see iteration counts)
1 1 -adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1	-*-*-*-*-*-*-12-*-*-*-m-*-*-*
0 1 -adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1	-*-*-*-*-*-*-12-*-*-*-m-*-*-*
0 1 -adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1	-*-*-*-*-*-*-12-*-*-*-m-*-*-*
1 1 /adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1	/*/*/*/*/*/*/12/*/*/*/m/*/*/*
0 1 /adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1	/*/*/*/*/*/*/12/*/*/*/m/*/*/*
1 1 abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt		**/*a*b*g*n*t
0 1 abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz		**/*a*b*g*n*t

# Match consecutive slashes with double star (alip)
1 0 /usr/bin/bash				/usr/**/bin/bash
1 0 /usr/x86_64-pc-linux-musl/bin/bash		/usr/**/bin/bash
1 0 /usr/foo/bar/baz/bin/bash			/usr/**/bin/bash
0 0 /usr/foo/bar/bin/baz/bash			/usr/**/bin/bash
1 0 /usr/foo/bar/bin/baz/bash			/usr/**/bin/**/bash
1 0 /usr/bin/bash				/**/bin/bash
1 0 /usr/x86_64-pc-linux-musl/bin/bash		/**/bin/bash
1 0 /usr/foo/bar/baz/bin/bash			/**/bin/bash
0 0 /usr/foo/bar/bin/baz/bash			/**/bin/bash
1 0 /usr/foo/bar/bin/baz/bash			/**/bin/**/bash
1 0 /foo.txt 					/**/*.txt
0 0 foo.txt					/**/*.txt

# More edge cases (alip)
1 0 /home/syd/.config/htop/htoprc		/home/syd/.config/**
1 0 /home/syd/.config/htop/htoprc		/home/*/.config/**
1 0 /home/syd/.config/htop/htoprc		/home/*/.*/**
1 0 /home/syd/.config/htop/htoprc		/home/*/.*/***
0 0 /home/syd/.bash_history			/home/*/.*/**
0 0 /home/syd/.bash_history			/home/*/.*/***
1 0 /home/syd/.bash_history			/home/syd/.bash_history*
1 0 /home/syd/.bash_history			/home/*/.bash_history*
