# ============================================================================
# corpus-fast-glob.txt — is_match test cases imported from fast-glob
# Source: https://github.com/oxc-project/fast-glob
#   tests/test.rs (original ~1300+ assert!(glob_match(...)) lines)
# Format: PATTERN<TAB>PATH<TAB>EXPECTED
# EXPECTED: match | no-match
# Default flags: dot=true (library default), case sensitive.
# Escape rules: \\ (literal \), \t (tab), \n (newline)
# Each group below mirrors a test fn name from the upstream source.
# ============================================================================

## fast_glob.generic_input
**/*	foo	match

## fast_glob.webpack
**/*	foo	match
**/f*	foo	match
**/*o	foo	match
**/f*uck	firetruck	match
**/uc	firetruck	no-match
**/f*uck	fuck	match
**/*.min.js	some/jquery.min.js	match
**/*.min.*	some/jquery.min.js	match
*/js/*.js	some/js/jquery.min.js	match
# Row removed — pattern contains `[]` which our parser rejects (POSIX first-`]`).
# Divergence documented in corpus-err.txt and corpus-fast-glob-diff.txt.
**/.min.	some/jquery.min.js	no-match
**/min.js	some/jquery.min.js	no-match
**/min	some/jquery.min.js	no-match
/js/	some/js/jquery.min.js	no-match
/js*jq*.js	some/js/jquery.min.js	no-match
**/f?o	foo	match
**/f?o	fooo	no-match
**/f?oo	foo	no-match
**/f?o?	fooo	match
**/?fo	fooo	no-match
**/foo?	foo	no-match
**/fo[oz]	foo	match
**/fo[oz]	foz	match
**/fo[oz]	fog	no-match
**/foo{bar,baaz}	foobaaz	match
**/foo{bar,baaz}	foobar	match
**/foo{bar,baaz}	foobuzz	no-match
**/foo{bar,b*z}	foobuzz	match
?o[oz].b*z.com/{*.js,*.html}	foo.baaz.com/jquery.min.js	match
?o[oz].b*z.com/{*.js,*.html}	moz.buzz.com/index.html	match
?o[oz].b*z.com/{*.js,*.html}	moz.buzz.com/index.htm	no-match
?o[oz].b*z.com/{*.js,*.html}	moz.bar.com/index.html	no-match
?o[oz].b*z.com/{*.js,*.html}	flozz.buzz.com/index.html	no-match
some/**/{*.js,*.html}	some/bar/jquery.min.js	match
some/**/{*.js,*.html}	some/bar/baz/jquery.min.js	match
some/**	some/bar/baz/jquery.min.js	match
\\\\/$^+.()=!|,.*	\\/$^+.()=!|,.*	match
/foo/*	/foo/bar.txt	match
/foo/**	/foo/baz.txt	match
/foo/**	/foo/bar/baz.txt	match
/foo/*/*.txt	/foo/bar/baz.txt	match
/foo/**/*.txt	/foo/bar/baz.txt	match
/foo/**/*.txt	/foo/bar/baz/qux.txt	match
/foo/**/bar.txt	/foo/bar.txt	match
/foo/**/**/bar.txt	/foo/bar.txt	match
/foo/**/*/baz.txt	/foo/bar/baz.txt	match
/foo/**/*.txt	/foo/bar.txt	match
/foo/**/**/*.txt	/foo/bar.txt	match
/foo/**/*/*.txt	/foo/bar/baz.txt	match
**/*.txt	/foo/bar/baz/qux.txt	match
**/foo.txt	foo.txt	match
**/*.txt	foo.txt	match
/foo/*	/foo/bar/baz.txt	no-match
/foo/*.txt	/foo/bar/baz.txt	no-match
/foo/*/*.txt	/foo/bar/baz/qux.txt	no-match
/foo/*/bar.txt	/foo/bar.txt	no-match
/foo/*/*/baz.txt	/foo/bar/baz.txt	no-match
/foo/**.txt	/foo/bar/baz/qux.txt	no-match
/foo/bar**/*.txt	/foo/bar/baz/qux.txt	no-match
/foo/bar**	/foo/bar/baz.txt	no-match
**/.txt	/foo/bar/baz/qux.txt	no-match
*/*.txt	/foo/bar/baz/qux.txt	no-match
*/*.txt	foo.txt	no-match
some/*	some/bar/baz/jquery.min.js	no-match
some/*/*/jquery.min.js	some/bar/baz/jquery.min.js	match
some/**/jquery.min.js	some/bar/baz/jquery.min.js	match
some/*/jquery.min.js	some/bar/baz/jquery.min.js	no-match

## fast_glob.basic
abc	abc	match
*	abc	match
*c	abc	match
*b	abc	no-match
a*	abc	match
b*	abc	no-match
a*	a	match
*a	a	match
a*b*c*d*e*	axbxcxdxe	match
a*b*c*d*e*	axbxcxdxexxx	match
a*b?c*x	abxbbxdbxebxczzx	match
a*b?c*x	abxbbxdbxebxczzy	no-match
a/*/test	a/foo/test	match
a/*/test	a/foo/bar/test	no-match
a/**/test	a/foo/test	match
a/**/test	a/foo/bar/test	match
a/**/b/c	a/foo/bar/b/c	match
a\\*b	a*b	match
a\\*b	axb	no-match
x[abc]x	xax	match
x[abc]x	xbx	match
x[abc]x	xcx	match
x[abc]x	xdx	no-match
x[abc]x	xay	no-match
[?]	?	match
[?]	a	no-match
[*]	*	match
[*]	a	no-match
[a-cx]	a	match
[a-cx]	b	match
[a-cx]	c	match
[a-cx]	d	no-match
[a-cx]	x	match
[^abc]	b	no-match
[^abc]	c	no-match
[!abc]	c	no-match
[\\!]	!	match
a*b*[cy]*d*e*	axbxcxdxexxx	match
a*b*[cy]*d*e*	axbxyxdxexxx	match
a*b*[cy]*d*e*	axbxxxyxdxexxx	match
test.{j*g,p*g}	test.jpg	match
test.{j*g,p*g}	test.jpxxxg	match
test.{j*g,p*g}	test.jxg	match
test.{j*g,p*g}	test.jnt	no-match
test.{j*g,j*c}	test.jnc	match
test.{jpg,p*g}	test.png	match
test.{jpg,p*g}	test.pxg	match
test.{jpg,p*g}	test.pnt	no-match
test.{jpeg,png}	test.jpeg	match
test.{jpeg,png}	test.jpg	no-match
test.{jpeg,png}	test.png	match
test.{jp\\,g,png}	test.jp,g	match
test.{jp\\,g,png}	test.jxg	no-match
test/{foo,bar}/baz	test/foo/baz	match
test/{foo,bar}/baz	test/bar/baz	match
test/{foo,bar}/baz	test/baz/baz	no-match
test/{foo*,bar*}/baz	test/foooooo/baz	match
test/{foo*,bar*}/baz	test/barrrrr/baz	match
test/{*foo,*bar}/baz	test/xxxxfoo/baz	match
test/{*foo,*bar}/baz	test/xxxxbar/baz	match
test/{foo/**,bar}/baz	test/bar/baz	match
test/{foo/**,bar}/baz	test/bar/test/baz	no-match
*.txt	some/big/path/to/the/needle.txt	no-match
some/**/needle.{js,tsx,mdx,ts,jsx,txt}	some/a/bigger/path/to/the/crazy/needle.txt	match
some/**/{a,b,c}/**/needle.txt	some/foo/a/bigger/path/to/the/crazy/needle.txt	match
some/**/{a,b,c}/**/needle.txt	some/foo/d/bigger/path/to/the/crazy/needle.txt	no-match
a/{a{a,b},b}	a/aa	match
a/{a{a,b},b}	a/ab	match
a/{a{a,b},b}	a/ac	no-match
a/{a{a,b},b}	a/b	match
a/{a{a,b},b}	a/c	no-match
a/{b,c[}]*}	a/b	match
a/{b,c[}]*}	a/c}xx	match
/**/*a	/a/a	match
**/*.js	a/b.c/c.js	match
**/**/*.js	a/b.c/c.js	match
a/**/*.d	a/b/c.d	match
a/**/*.d	a/.b/c.d	match
**/*/**	a/b/c	match
**/*/c.js	a/b/c.js	match

## fast_glob.bash
a*	*	no-match
a*	**	no-match
a*	\\*	no-match
a*	a/*	no-match
a*	b	no-match
a*	bc	no-match
a*	bcd	no-match
a*	bdir/	no-match
a*	Beware	no-match
a*	a	match
a*	ab	match
a*	abc	match
\\a*	*	no-match
\\a*	**	no-match
\\a*	\\*	no-match
\\a*	a	match
\\a*	a/*	no-match
\\a*	abc	match
\\a*	abd	match
\\a*	abe	match
\\a*	b	no-match
\\a*	bb	no-match
\\a*	bcd	no-match
\\a*	bdir/	no-match
\\a*	Beware	no-match
\\a*	c	no-match
\\a*	ca	no-match
\\a*	cb	no-match
\\a*	d	no-match
\\a*	dd	no-match
\\a*	de	no-match

## fast_glob.bash_directories
b*/	*	no-match
b*/	**	no-match
b*/	\\*	no-match
b*/	a	no-match
b*/	a/*	no-match
b*/	abc	no-match
b*/	abd	no-match
b*/	abe	no-match
b*/	b	no-match
b*/	bb	no-match
b*/	bcd	no-match
b*/	bdir/	match
b*/	Beware	no-match
b*/	c	no-match
b*/	ca	no-match
b*/	cb	no-match
b*/	d	no-match
b*/	dd	no-match
b*/	de	no-match

## fast_glob.bash_escaping
\\^	*	no-match
\\^	**	no-match
\\^	\\*	no-match
\\^	a	no-match
\\^	a/*	no-match
\\^	abc	no-match
\\^	abd	no-match
\\^	abe	no-match
\\^	b	no-match
\\^	bb	no-match
\\^	bcd	no-match
\\^	bdir/	no-match
\\^	Beware	no-match
\\^	c	no-match
\\^	ca	no-match
\\^	cb	no-match
\\^	d	no-match
\\^	dd	no-match
\\^	de	no-match
\\*	**	no-match
\\*	a/*	no-match
\\*	abc	no-match
\\*	abd	no-match
\\*	abe	no-match
\\*	b	no-match
\\*	bb	no-match
\\*	bcd	no-match
\\*	bdir/	no-match
\\*	Beware	no-match
\\*	c	no-match
\\*	ca	no-match
\\*	cb	no-match
\\*	d	no-match
\\*	dd	no-match
\\*	de	no-match
a\\*	*	no-match
a\\*	**	no-match
a\\*	\\*	no-match
a\\*	a	no-match
a\\*	a/*	no-match
a\\*	abc	no-match
a\\*	abd	no-match
a\\*	abe	no-match
a\\*	b	no-match
a\\*	bb	no-match
a\\*	bcd	no-match
a\\*	bdir/	no-match
a\\*	Beware	no-match
a\\*	c	no-match
a\\*	ca	no-match
a\\*	cb	no-match
a\\*	d	no-match
a\\*	dd	no-match
a\\*	de	no-match
*q*	aqa	match
*q*	aaqaa	match
*q*	*	no-match
*q*	**	no-match
*q*	\\*	no-match
*q*	a	no-match
*q*	a/*	no-match
*q*	abc	no-match
*q*	abd	no-match
*q*	abe	no-match
*q*	b	no-match
*q*	bb	no-match
*q*	bcd	no-match
*q*	bdir/	no-match
*q*	Beware	no-match
*q*	c	no-match
*q*	ca	no-match
*q*	cb	no-match
*q*	d	no-match
*q*	dd	no-match
*q*	de	no-match
\\**	*	match
\\**	**	match
\\**	\\*	no-match
\\**	a	no-match
\\**	a/*	no-match
\\**	abc	no-match
\\**	abd	no-match
\\**	abe	no-match
\\**	b	no-match
\\**	bb	no-match
\\**	bcd	no-match
\\**	bdir/	no-match
\\**	Beware	no-match
\\**	c	no-match
\\**	ca	no-match
\\**	cb	no-match
\\**	d	no-match
\\**	dd	no-match
\\**	de	no-match

## fast_glob.bash_classes
a*[^c]	*	no-match
a*[^c]	**	no-match
a*[^c]	\\*	no-match
a*[^c]	a	no-match
a*[^c]	a/*	no-match
a*[^c]	abc	no-match
a*[^c]	abd	match
a*[^c]	abe	match
a*[^c]	b	no-match
a*[^c]	bb	no-match
a*[^c]	bcd	no-match
a*[^c]	bdir/	no-match
a*[^c]	Beware	no-match
a*[^c]	c	no-match
a*[^c]	ca	no-match
a*[^c]	cb	no-match
a*[^c]	d	no-match
a*[^c]	dd	no-match
a*[^c]	de	no-match
a*[^c]	baz	no-match
a*[^c]	bzz	no-match
a*[^c]	BZZ	no-match
a*[^c]	beware	no-match
a*[^c]	BewAre	no-match
a[X-]b	a-b	match
a[X-]b	aXb	match
[a-y]*[^c]	*	no-match
[a-y]*[^c]	a*	match
[a-y]*[^c]	**	no-match
[a-y]*[^c]	\\*	no-match
[a-y]*[^c]	a	no-match
[a-y]*[^c]	a123b	match
[a-y]*[^c]	a123c	no-match
[a-y]*[^c]	ab	match
[a-y]*[^c]	a/*	no-match
[a-y]*[^c]	abc	no-match
[a-y]*[^c]	abd	match
[a-y]*[^c]	abe	match
[a-y]*[^c]	b	no-match
[a-y]*[^c]	bd	match
[a-y]*[^c]	bb	match
[a-y]*[^c]	bcd	match
# Row removed — fast-glob allows `/` to match `[^c]`, we don't (class is
# segment-local per §6.2). Divergence in corpus-fast-glob-diff.txt.
[a-y]*[^c]	Beware	no-match
[a-y]*[^c]	c	no-match
[a-y]*[^c]	ca	match
[a-y]*[^c]	cb	match
[a-y]*[^c]	d	no-match
[a-y]*[^c]	dd	match
[a-y]*[^c]	de	match
[a-y]*[^c]	baz	match
[a-y]*[^c]	bzz	match
[a-y]*[^c]	BZZ	no-match
[a-y]*[^c]	beware	match
[a-y]*[^c]	BewAre	no-match
a\\*b/*	a*b/ooo	match
a\\*?/*	a*b/ooo	match
a[b]c	*	no-match
a[b]c	**	no-match
a[b]c	\\*	no-match
a[b]c	a	no-match
a[b]c	a/*	no-match
a[b]c	abc	match
a[b]c	abd	no-match
a[b]c	abe	no-match
a[b]c	b	no-match
a[b]c	bb	no-match
a[b]c	bcd	no-match
a[b]c	bdir/	no-match
a[b]c	Beware	no-match
a[b]c	c	no-match
a[b]c	ca	no-match
a[b]c	cb	no-match
a[b]c	d	no-match
a[b]c	dd	no-match
a[b]c	de	no-match
a[b]c	baz	no-match
a[b]c	bzz	no-match
a[b]c	BZZ	no-match
a[b]c	beware	no-match
a[b]c	BewAre	no-match
a["b"]c	*	no-match
a["b"]c	**	no-match
a["b"]c	\\*	no-match
a["b"]c	a	no-match
a["b"]c	a/*	no-match
a["b"]c	abc	match
a["b"]c	abd	no-match
a["b"]c	abe	no-match
a["b"]c	b	no-match
a["b"]c	bb	no-match
a["b"]c	bcd	no-match
a["b"]c	bdir/	no-match
a["b"]c	Beware	no-match
a["b"]c	c	no-match
a["b"]c	ca	no-match
a["b"]c	cb	no-match
a["b"]c	d	no-match
a["b"]c	dd	no-match
a["b"]c	de	no-match
a["b"]c	baz	no-match
a["b"]c	bzz	no-match
a["b"]c	BZZ	no-match
a["b"]c	beware	no-match
a["b"]c	BewAre	no-match
a[\\\\b]c	*	no-match
a[\\\\b]c	**	no-match
a[\\\\b]c	\\*	no-match
a[\\\\b]c	a	no-match
a[\\\\b]c	a/*	no-match
a[\\\\b]c	abc	match
a[\\\\b]c	abd	no-match
a[\\\\b]c	abe	no-match
a[\\\\b]c	b	no-match
a[\\\\b]c	bb	no-match
a[\\\\b]c	bcd	no-match
a[\\\\b]c	bdir/	no-match
a[\\\\b]c	Beware	no-match
a[\\\\b]c	c	no-match
a[\\\\b]c	ca	no-match
a[\\\\b]c	cb	no-match
a[\\\\b]c	d	no-match
a[\\\\b]c	dd	no-match
a[\\\\b]c	de	no-match
a[\\\\b]c	baz	no-match
a[\\\\b]c	bzz	no-match
a[\\\\b]c	BZZ	no-match
a[\\\\b]c	beware	no-match
a[\\\\b]c	BewAre	no-match
a[\\b]c	*	no-match
a[\\b]c	**	no-match
a[\\b]c	\\*	no-match
a[\\b]c	a	no-match
a[\\b]c	a/*	no-match
# Row removed — fast-glob interprets `\b` as ASCII backspace (0x08); we
# use lenient escape (§6.3) so `\b` = literal `b`, hence `a[\b]c` matches
# `abc`. Divergence in corpus-fast-glob-diff.txt.
a[\\b]c	abd	no-match
a[\\b]c	abe	no-match
a[\\b]c	b	no-match
a[\\b]c	bb	no-match
a[\\b]c	bcd	no-match
a[\\b]c	bdir/	no-match
a[\\b]c	Beware	no-match
a[\\b]c	c	no-match
a[\\b]c	ca	no-match
a[\\b]c	cb	no-match
a[\\b]c	d	no-match
a[\\b]c	dd	no-match
a[\\b]c	de	no-match
a[\\b]c	baz	no-match
a[\\b]c	bzz	no-match
a[\\b]c	BZZ	no-match
a[\\b]c	beware	no-match
a[\\b]c	BewAre	no-match
a[b-d]c	*	no-match
a[b-d]c	**	no-match
a[b-d]c	\\*	no-match
a[b-d]c	a	no-match
a[b-d]c	a/*	no-match
a[b-d]c	abc	match
a[b-d]c	abd	no-match
a[b-d]c	abe	no-match
a[b-d]c	b	no-match
a[b-d]c	bb	no-match
a[b-d]c	bcd	no-match
a[b-d]c	bdir/	no-match
a[b-d]c	Beware	no-match
a[b-d]c	c	no-match
a[b-d]c	ca	no-match
a[b-d]c	cb	no-match
a[b-d]c	d	no-match
a[b-d]c	dd	no-match
a[b-d]c	de	no-match
a[b-d]c	baz	no-match
a[b-d]c	bzz	no-match
a[b-d]c	BZZ	no-match
a[b-d]c	beware	no-match
a[b-d]c	BewAre	no-match
a?c	*	no-match
a?c	**	no-match
a?c	\\*	no-match
a?c	a	no-match
a?c	a/*	no-match
a?c	abd	no-match
a?c	abe	no-match
a?c	b	no-match
a?c	bb	no-match
a?c	bcd	no-match
a?c	bdir/	no-match
a?c	Beware	no-match
a?c	c	no-match
a?c	ca	no-match
a?c	cb	no-match
a?c	d	no-match
a?c	dd	no-match
a?c	de	no-match
a?c	baz	no-match
a?c	bzz	no-match
a?c	BZZ	no-match
a?c	beware	no-match
a?c	BewAre	no-match
*/man*/bash.*	man/man1/bash.1	match
[^a-c]*	*	match
[^a-c]*	**	match
[^a-c]*	a	no-match
[^a-c]*	a/*	no-match
[^a-c]*	abc	no-match
[^a-c]*	abd	no-match
[^a-c]*	abe	no-match
[^a-c]*	b	no-match
[^a-c]*	bb	no-match
[^a-c]*	bcd	no-match
[^a-c]*	bdir/	no-match
[^a-c]*	Beware	match
[^a-c]*	c	no-match
[^a-c]*	ca	no-match
[^a-c]*	cb	no-match
[^a-c]*	d	match
[^a-c]*	dd	match
[^a-c]*	de	match
[^a-c]*	baz	no-match
[^a-c]*	bzz	no-match
[^a-c]*	BZZ	match
[^a-c]*	beware	no-match
[^a-c]*	BewAre	match

## fast_glob.bash_wildmatch
a[]-]b	aab	no-match
[ten]	ten	no-match
]	]	match
a[]-]b	a-b	match
a[]-]b	a]b	match
a[]]b	a]b	match
a[\\]a\\-]b	aab	match
t[a-g]n	ten	match
t[^a-g]n	ton	match

## fast_glob.bash_slashmatch
# Row removed — `foo[/]bar`: fast-glob treats `[/]` as matching `/`, we
# reject at parse time (class is segment-local, §6.2). Divergence in
# corpus-err.txt.
f[^eiu][^eiu][^eiu][^eiu][^eiu]r	foo-bar	match

## fast_glob.bash_extra_stars
a**c	bbc	no-match
a**c	abc	match
a**c	bbd	no-match
a***c	bbc	no-match
a***c	abc	match
a***c	bbd	no-match
a*****?c	bbc	no-match
a*****?c	abc	match
?*****??	bbc	match
?*****??	abc	match
*****??	bbc	match
*****??	abc	match
?*****?c	bbc	match
?*****?c	abc	match
?***?****c	bbc	match
?***?****c	abc	match
?***?****c	bbd	no-match
?***?****?	bbc	match
?***?****?	abc	match
?***?****	bbc	match
?***?****	abc	match
*******c	bbc	match
*******c	abc	match
*******?	bbc	match
*******?	abc	match
a*cd**?**??k	abcdecdhjk	match
a**?**cd**?**??k	abcdecdhjk	match
a**?**cd**?**??k***	abcdecdhjk	match
a**?**cd**?**??***k	abcdecdhjk	match
a**?**cd**?**??***k**	abcdecdhjk	match
a****c**?**??*****	abcdecdhjk	match

## fast_glob.stars
*.js	a/b/c/z.js	no-match
*.js	a/b/z.js	no-match
*.js	a/z.js	no-match
*.js	z.js	match
z*.js	z.js	match
*/*	a/z	match
*/z*.js	a/z.js	match
a/z*.js	a/z.js	match
*	abc	match
f*	bar	no-match
*r	foo	no-match
b*	foo	no-match
*	foo/bar	no-match
*c	abc	match
a*	abc	match
a*c	abc	match
*r	bar	match
b*	bar	match
f*	foo	match
*abc*	one abc two	match
a*b	a         b	match
*a*	foo	no-match
*a*	bar	match
*abc*	oneabctwo	match
*-bc-*	a-b.c-d	no-match
*-*.*-*	a-b.c-d	match
*-b*c-*	a-b.c-d	match
*-b.c-*	a-b.c-d	match
*.*	a-b.c-d	match
*.*-*	a-b.c-d	match
*.*-d	a-b.c-d	match
*.c-*	a-b.c-d	match
*b.*d	a-b.c-d	match
a*.c*	a-b.c-d	match
a-*.*-d	a-b.c-d	match
*.*	a.b	match
*.b	a.b	match
a.*	a.b	match
a.b	a.b	match
**-bc-**	a-b.c-d	no-match
**-**.**-**	a-b.c-d	match
**-b**c-**	a-b.c-d	match
**-b.c-**	a-b.c-d	match
**.**	a-b.c-d	match
**.**-**	a-b.c-d	match
**.**-d	a-b.c-d	match
**.c-**	a-b.c-d	match
**b.**d	a-b.c-d	match
a**.c**	a-b.c-d	match
a-**.**-d	a-b.c-d	match
**.**	a.b	match
**.b	a.b	match
a.**	a.b	match
*/*	/ab	match
.	.	match
a/	a/.b	no-match
/*	/ab	match
/??	/ab	match
/?b	/ab	match
/*	/cd	match
a/.*	a/.b	match
?/?	a/b	match
a/**/j/**/z/*.md	a/b/c/d/e/j/n/p/o/z/c.md	match
a/**/z/*.md	a/b/c/d/e/z/c.md	match
a/b/c/*.md	a/b/c/xyz.md	match
a/*/z/.a	a/b/z/.a	match
bz	a/b/z/.a	no-match
a/**/c/*.md	a/bb.bb/aa/b.b/aa/c/xyz.md	match
a/**/c/*.md	a/bb.bb/aa/bb/aa/c/xyz.md	match
a/*/c/*.md	a/bb.bb/c/xyz.md	match
a/*/c/*.md	a/bb/c/xyz.md	match
a/*/c/*.md	a/bbbb/c/xyz.md	match
*	aaa	match
ab	ab	match
*/*/*	aaa	no-match
*/*/*	aaa/bb/aa/rr	no-match
aaa*	aaa/bba/ccc	no-match
aaa/*	aaa/bba/ccc	no-match
aaa/*ccc	aaa/bba/ccc	no-match
aaa/*z	aaa/bba/ccc	no-match
*/*/*	aaa/bbb	no-match
*/*jk*/*i	ab/zzz/ejkl/hi	no-match
*/*/*	aaa/bba/ccc	match
aaa/**	aaa/bba/ccc	match
aaa/*	aaa/bbb	match
*/*z*/*/*i	ab/zzz/ejkl/hi	match
*j*i	abzzzejklhi	match
*	b	match
*	a/a	no-match
*	a/a/a	no-match
*	a/a/b	no-match
*	a/a/a/a	no-match
*	a/a/a/a/a	no-match
*/*	a	no-match
*/*	a/a	match
*/*	a/a/a	no-match
*/*/*	a	no-match
*/*/*	a/a	no-match
*/*/*	a/a/a	match
*/*/*	a/a/a/a	no-match
*/*/*/*	a	no-match
*/*/*/*	a/a	no-match
*/*/*/*	a/a/a	no-match
*/*/*/*	a/a/a/a	match
*/*/*/*	a/a/a/a/a	no-match
*/*/*/*/*	a	no-match
*/*/*/*/*	a/a	no-match
*/*/*/*/*	a/a/a	no-match
*/*/*/*/*	a/a/b	no-match
*/*/*/*/*	a/a/a/a	no-match
*/*/*/*/*	a/a/a/a/a	match
*/*/*/*/*	a/a/a/a/a/a	no-match
a/*	a	no-match
a/*	a/a	match
a/*	a/a/a	no-match
a/*	a/a/a/a	no-match
a/*	a/a/a/a/a	no-match
a/*/*	a	no-match
a/*/*	a/a	no-match
a/*/*	a/a/a	match
a/*/*	b/a/a	no-match
a/*/*	a/a/a/a	no-match
a/*/*	a/a/a/a/a	no-match
a/*/*/*	a	no-match
a/*/*/*	a/a	no-match
a/*/*/*	a/a/a	no-match
a/*/*/*	a/a/a/a	match
a/*/*/*	a/a/a/a/a	no-match
a/*/*/*/*	a	no-match
a/*/*/*/*	a/a	no-match
a/*/*/*/*	a/a/a	no-match
a/*/*/*/*	a/a/b	no-match
a/*/*/*/*	a/a/a/a	no-match
a/*/*/*/*	a/a/a/a/a	match
a/*/a	a	no-match
a/*/a	a/a	no-match
a/*/a	a/a/a	match
a/*/a	a/a/b	no-match
a/*/a	a/a/a/a	no-match
a/*/a	a/a/a/a/a	no-match
a/*/b	a	no-match
a/*/b	a/a	no-match
a/*/b	a/a/a	no-match
a/*/b	a/a/b	match
a/*/b	a/a/a/a	no-match
a/*/b	a/a/a/a/a	no-match
*/**/a	a	no-match
*/**/a	a/a/b	no-match
*/**/a	a/a	match
*/**/a	a/a/a	match
*/**/a	a/a/a/a	match
*/**/a	a/a/a/a/a	match
*/	a	no-match
*/	a/a	no-match
*/	a/x/y	no-match
*/*	a/x/y	no-match
a/*	a/x/y	no-match
*/	a/	match
*{,/}	a/	match
a/**/*.txt	a.txt	no-match
a/**/*.txt	a/x/y.txt	match
a/**/*.txt	a/x/y/z	no-match
a/*.txt	a.txt	no-match
a/*.txt	a/b.txt	match
a/*.txt	a/x/y.txt	no-match
a/*.txt	a/x/y/z	no-match
a*.txt	a.txt	match
a*.txt	a/b.txt	no-match
a*.txt	a/x/y.txt	no-match
a*.txt	a/x/y/z	no-match
*.txt	a/x/y.txt	no-match
*.txt	a/x/y/z	no-match
a*	a/b	no-match
a/**/b	a/a/bb	no-match
a/**/b	a/bb	no-match
*/**	foo	no-match
**/	foo/bar	no-match
**/*/	foo/bar	no-match
*/*/	foo/bar	no-match
**/..	/home/foo/..	match
**/a	a	match
**	a/a	match
a/**	a/a	match
**/	a/a	no-match
*/**	foo/	match
**/*	foo/bar	match
*/*	foo/bar	match
*/**	foo/bar	match
**/	foo/bar/	match
**/*/	foo/bar/	match
*/**	foo/bar/	match
*/*/	foo/bar/	match
*/foo	bar/baz/foo	no-match
**/bar/*	deep/foo/bar	no-match
*/bar/**	deep/foo/bar/baz/x	no-match
/*	ef	no-match
foo?bar	foo/bar	no-match
**/bar*	foo/bar/baz	no-match
foo**bar	foo/baz/bar	no-match
foo*bar	foo/baz/bar	no-match
/*	/ef	match
a/**/j/**/z/*.md	a/b/j/c/z/x.md	match
a/**/j/**/z/*.md	a/j/z/x.md	match
**/foo	bar/baz/foo	match
**/bar/*	deep/foo/bar/baz	match
**/bar/**	deep/foo/bar/baz/	match
**/bar/*/*	deep/foo/bar/baz/x	match
foo/**/**/bar	foo/b/a/z/bar	match
foo/**/bar	foo/b/a/z/bar	match
foo/**/**/bar	foo/bar	match
foo/**/bar	foo/bar	match
*/bar/**	foo/bar/baz/x	match
foo/**/**/bar	foo/baz/bar	match
foo/**/bar	foo/baz/bar	match
**/foo	XXX/foo	match

## fast_glob.globstars
**/*.js	a/b/c/d.js	match
**/*.js	a/b/c.js	match
**/*.js	a/b.js	match
a/b/**/*.js	a/b/c/d/e/f.js	match
a/b/**/*.js	a/b/c/d/e.js	match
a/b/c/**/*.js	a/b/c/d.js	match
a/b/**/*.js	a/b/c/d.js	match
a/b/**/*.js	a/b/d.js	match
a/b/**/*.js	a/d.js	no-match
a/b/**/*.js	d.js	no-match
**c	a/b/c	no-match
a/**c	a/b/c	no-match
a/**z	a/b/c	no-match
a/**b**/c	a/b/c/b/c	no-match
a/b/c**/*.js	a/b/c/d/e.js	no-match
a/**/b/**/c	a/b/c/b/c	match
a/**b**/c	a/aba/c	match
a/**b**/c	a/b/c	match
a/b/c**/*.js	a/b/c/d.js	match
a/**/*	a	no-match
a/**/**/*	a	no-match
a/**/**/**/*	a	no-match
**/a	a/	no-match
a/**/*	a/	match
a/**/**/*	a/	match
a/**/**/**/*	a/	match
**/a	a/b	no-match
a/**/j/**/z/*.md	a/b/c/j/e/z/c.txt	no-match
a/**/b	a/bb	no-match
**/a	a/c	no-match
**/a	a/x/y	no-match
**/a	a/b/c/d	no-match
**/a	a	match
**	a/	match
**/a/**	a/	match
a/**/**	a/	match
**/a	a/a	match
*/*	a/b	match
a/**/*	a/b	match
a/**/**/*	a/b	match
a/**/**/**/*	a/b	match
**/*	a/b/c	match
**/**	a/b/c	match
*/**	a/b/c	match
a/**/*	a/b/c	match
a/**/**/*	a/b/c	match
a/**/**/**/*	a/b/c	match
**	a/b/c/d	match
a/**/*	a/b/c/d	match
a/**/**/*	a/b/c/d	match
a/**/**/**/*	a/b/c/d	match
a/b/**/c/**/*.*	a/b/c/d.e	match
a/**/f/*.md	a/b/c/d/e/f/g.md	match
a/**/f/**/k/*.md	a/b/c/d/e/f/g/h/i/j/k/l.md	match
a/b/c/*.md	a/b/c/def.md	match
a/*/c/*.md	a/bb.bb/c/ddd.md	match
a/**/f/*.md	a/bb.bb/cc/d.d/ee/f/ggg.md	match
a/**/f/*.md	a/bb.bb/cc/dd/ee/f/ggg.md	match
a/*/c/*.md	a/bb/c/ddd.md	match
a/*/c/*.md	a/bbbb/c/ddd.md	match
foo/bar/**/one/**/*.*	foo/bar/baz/one/image.png	match
foo/bar/**/one/**/*.*	foo/bar/baz/one/two/image.png	match
foo/bar/**/one/**/*.*	foo/bar/baz/one/two/three/image.png	match
a/b/**/f	a/b/c/d/	no-match
**	a/b/c/d/	match
**/**	a/b/c/d/	match
**/b/**	a/b/c/d/	match
a/b/**	a/b/c/d/	match
a/b/**/	a/b/c/d/	match
a/b/**/c/**/	a/b/c/d/	match
a/b/**/c/**/d/	a/b/c/d/	match
a/b/**/**/*.*	a/b/c/d/e.f	match
a/b/**/*.*	a/b/c/d/e.f	match
a/b/**/c/**/d/*.*	a/b/c/d/e.f	match
a/b/**/d/**/*.*	a/b/c/d/e.f	match
a/b/**/d/**/*.*	a/b/c/d/g/e.f	match
a/b/**/d/**/*.*	a/b/c/d/g/g/e.f	match
a/b-*/**/z.js	a/b-c/z.js	match
a/b-*/**/z.js	a/b-c/d/e/z.js	match
a/b/c/*.md	a/b/c/xyz.md	match
a/*/c/*.md	a/bb.bb/c/xyz.md	match
a/*/c/*.md	a/bb/c/xyz.md	match
a/*/c/*.md	a/bbbb/c/xyz.md	match
a/**/j/**/z/*.md	a/b/c/d/e/j/n/p/o/z/c.md	match
a/**/z/*.md	a/b/c/d/e/z/c.md	match
a/**/c/*.md	a/bb.bb/aa/b.b/aa/c/xyz.md	match
a/**/c/*.md	a/bb.bb/aa/bb/aa/c/xyz.md	match
a/b/**/c{d,e}/**/xyz.md	a/b/c/xyz.md	no-match
a/b/**/c{d,e}/**/xyz.md	a/b/d/xyz.md	no-match
a/**/	a/b	no-match
a/**/	a/b/c/d	no-match
a/**/	a/bb	no-match
a/**/	a/cb	no-match
/**	/a/b	match
**/*	a.b	match
**/*	a.js	match
**/*.js	a.js	match
**/*.js	a/a.js	match
**/*.js	a/a/b.js	match
**/*.md	a/b.md	match
**/*	a/b/c.js	match
**/*	a/b/c.txt	match
a/**/	a/b/c/d/	match
**/*	a/b/c/d/a.js	match
a/b/**/*.js	a/b/c/z.js	match
a/b/**/*.js	a/b/z.js	match
**/*	ab	match
**/*	ab/c	match
**/*	ab/c/d	match
**/*	abc.js	match
**/	a	no-match
**/a/*	a	no-match
**/a/*/*	a	no-match
*/a/**	a	no-match
**/	a/b	no-match
**/b/*	a/b	no-match
**/b/*/*	a/b	no-match
b/**	a/b	no-match
**/	a/b/c	no-match
**/**/b	a/b/c	no-match
**/b	a/b/c	no-match
**/b/*/*	a/b/c	no-match
b/**	a/b/c	no-match
**/	a/b/c/d	no-match
**/d/*	a/b/c/d	no-match
b/**	a/b/c/d	no-match
**/**/*	a	match
**/**/a	a	match
**/**/*	a/b	match
**/**/b	a/b	match
**/b	a/b	match
**/**/*	a/b/c	match
**/b/*	a/b/c	match
**/b/**	a/b/c	match
*/b/**	a/b/c	match
**/**	a/b/c/d	match
**/**/*	a/b/c/d	match
**/**/d	a/b/c/d	match
**/b/**	a/b/c/d	match
**/b/*/*	a/b/c/d	match
**/d	a/b/c/d	match
*/b/**	a/b/c/d	match
**/**.txt.js	/foo/bar.txt.js	match

## fast_glob.utf8
ã*/**/*	ãã©ã«ã/aaa.js	match
ãã©*/**/*	ãã©ã«ã/aaa.js	match
ãã©ã«*/**/*	ãã©ã«ã/aaa.js	match
ã*ã«*/**/*	ãã©ã«ã/aaa.js	match
ãã©ã«ã/**/*	ãã©ã«ã/aaa.js	match

## fast_glob.negation
!*	abc	no-match
!abc	abc	no-match
*!.md	bar.md	no-match
foo!.md	bar.md	no-match
\\!*!*.md	foo!.md	no-match
\\!*!*.md	foo!bar.md	no-match
*!*.md	!foo!.md	match
\\!*!*.md	!foo!.md	match
!*foo	abc	match
!foo*	abc	match
!xyz	abc	match
*!*.*	ba!r.js	match
*.md	bar.md	match
*!*.*	foo!.md	match
*!*.md	foo!.md	match
*!.md	foo!.md	match
*.md	foo!.md	match
foo!.md	foo!.md	match
*!*.md	foo!bar.md	match
*b*.md	foobar.md	match
a!!b	a	no-match
a!!b	aa	no-match
a!!b	a/b	no-match
a!!b	a!b	no-match
a!!b	a!!b	match
a!!b	a/!!/b	no-match
!a/b	a/b	no-match
!a/b	a	match
!a/b	a.b	match
!a/b	a/a	match
!a/b	a/c	match
!a/b	b/a	match
!a/b	b/b	match
!a/b	b/c	match
!!abc	abc	match
!!!abc	abc	no-match
!!!!abc	abc	match
!!!!!abc	abc	no-match
!!!!!!abc	abc	match
!!!!!!!abc	abc	no-match
!!!!!!!!abc	abc	match
!*	a	no-match
!*	a.b	no-match
!*/*	a/a	no-match
!*/*	a/b	no-match
!*/*	a/c	no-match
!*/*	b/a	no-match
!*/*	b/b	no-match
!*/*	b/c	no-match
!*/b	a/b	no-match
!*/b	b/b	no-match
!*/c	a/c	no-match
!*/c	b/c	no-match
!*a*	bar	no-match
!*a*	fab	no-match
!a/*	a/a	no-match
!a/*	a/b	no-match
!a/*	a/c	no-match
!f*b	fab	no-match
!*	a/a	match
!*	a/b	match
!*	a/c	match
!*	b/a	match
!*	b/b	match
!*	b/c	match
!*/*	a	match
!*/*	a.b	match
!*/b	a	match
!*/b	a.b	match
!*/b	a/a	match
!*/b	a/c	match
!*/b	b/a	match
!*/b	b/c	match
!*/c	a	match
!*/c	a.b	match
!*/c	a/a	match
!*/c	a/b	match
!*/c	b/a	match
!*/c	b/b	match
!*a*	foo	match
!a/*	a	match
!a/*	a.b	match
!a/*	b/a	match
!a/*	b/b	match
!a/*	b/c	match
!f*b	bar	match
!f*b	foo	match
!.md	.md	no-match
!**/*.md	a.js	match
!**/*.md	c.txt	match
!*.md	a.js	match
!*.md	b.md	no-match
!*.md	c.txt	match
!*.md	abc.md	no-match
!*.md	abc.txt	match
!*.md	foo.md	no-match
!.md	foo.md	match
!*.md	b.txt	match
!*.md	c.md	no-match
!a/*/a.js	a/a/a.js	no-match
!a/*/a.js	a/b/a.js	no-match
!a/*/a.js	a/c/a.js	no-match
!a/*/*/a.js	a/a/a/a.js	no-match
!a/*/*/a.js	b/a/b/a.js	match
!a/*/*/a.js	c/a/c/a.js	match
!a/a*.txt	a/a.txt	no-match
!a/a*.txt	a/b.txt	match
!a/a*.txt	a/c.txt	match
!a.a*.txt	a.a.txt	no-match
!a.a*.txt	a.b.txt	match
!a.a*.txt	a.c.txt	match
!a/*.txt	a/a.txt	no-match
!a/*.txt	a/b.txt	no-match
!a/*.txt	a/c.txt	no-match
!**/a.js	a/a/b.js	match
!a/**/a.js	a/a/a/a.js	no-match
!a/**/a.js	b/a/b/a.js	match
!a/**/a.js	c/a/c/a.js	match
!**/*.md	a/b.js	match
!**/*.md	a/b.md	no-match
**/*.md	a/b.js	no-match
**/*.md	a.js	no-match
**/*.md	a/b.md	match
**/*.md	a.md	match
!*.md	a/b.js	match
!*.md	a/b.md	match
!*.md	a.md	no-match

## fast_glob.question_mark
?	aa	no-match
?	aaa	no-match
?	abcdefg	no-match
??	a	no-match
??	aa	match
??	ab	match
??	aaa	no-match
??	abcdefg	no-match
???	a	no-match
???	aa	no-match
???	aaa	match
???	abcdefg	no-match
a?c	aaa	no-match
a?c	aac	match
ab?	a	no-match
ab?	aa	no-match
ab?	ab	no-match
ab?	ac	no-match
ab?	abcd	no-match
ab?	abbb	no-match
a?b	acb	match
a/?/c/?/e.md	a/bb/c/dd/e.md	no-match
a/??/c/??/e.md	a/bb/c/dd/e.md	match
a/??/c.md	a/bbb/c.md	no-match
a/?/c.md	a/b/c.md	match
a/?/c/?/e.md	a/b/c/d/e.md	match
a/?/c/???/e.md	a/b/c/d/e.md	no-match
a/?/c/???/e.md	a/b/c/zzz/e.md	match
a/?/c.md	a/bb/c.md	no-match
a/??/c.md	a/bb/c.md	match
a/???/c.md	a/bbb/c.md	match
a/????/c.md	a/bbbb/c.md	match

## fast_glob.braces
{a,b,c}	aa	no-match
{a,b,c}	bb	no-match
{a,b,c}	cc	no-match
a/{a,b}	a/a	match
a/{a,b}	a/b	match
a/{a,b}	a/c	no-match
a/{a,b}	b/b	no-match
a/{a,b,c}	b/b	no-match
a/{a,b,c}	a/c	match
a{b,bc}.txt	abc.txt	match
foo[{a,b}]baz	foo{baz	match
a{,b}.txt	abc.txt	no-match
a{a,b,}.txt	abc.txt	no-match
a{b,}.txt	abc.txt	no-match
a{,b}.txt	a.txt	match
a{b,}.txt	a.txt	match
a{a,b,}.txt	aa.txt	match
a{,b}.txt	ab.txt	match
a{b,}.txt	ab.txt	match
a{a,b/}*.txt	aa.txt	match
a{a,b/}*.txt	ab/.txt	match
a{a,b/}*.txt	ab/a.txt	match
{a/,}a/**	a/a/	match
{a/,}a/**	a/a/a	match
{a/,}a/**	a/a/a/	match
{a/,}b/**	a/b/a/	match
{a/,}b/**	b/a/	match
a{,/}*.txt	a.txt	match
a{,/}*.txt	ab.txt	match
a{,/}*.txt	a/b.txt	match
a{,/}*.txt	a/ab.txt	match
a{,.*{foo,db},\\(bar\\)}.txt	a.txt	match
a{,.*{foo,db},\\(bar\\)}.txt	adb.txt	no-match
a{,.*{foo,db},\\(bar\\)}.txt	a.db.txt	match
a{,*.{foo,db},\\(bar\\)}.txt	a.txt	match
a{,*.{foo,db},\\(bar\\)}.txt	adb.txt	no-match
a{,*.{foo,db},\\(bar\\)}.txt	a.db.txt	match
a{,.*{foo,db},\\(bar\\)}	adb	no-match
a{,.*{foo,db},\\(bar\\)}	a.db	match
a{,*.{foo,db},\\(bar\\)}	adb	no-match
a{,*.{foo,db},\\(bar\\)}	a.db	match
{,.*{foo,db},\\(bar\\)}	a	no-match
{,.*{foo,db},\\(bar\\)}	adb	no-match
{,.*{foo,db},\\(bar\\)}	a.db	no-match
{,.*{foo,db},\\(bar\\)}	.db	match
{,*.{foo,db},\\(bar\\)}	a	no-match
{*,*.{foo,db},\\(bar\\)}	a	match
{,*.{foo,db},\\(bar\\)}	adb	no-match
{,*.{foo,db},\\(bar\\)}	a.db	match
a/b/**/c{d,e}/**/xyz.md	a/b/c/xyz.md	no-match
a/b/**/c{d,e}/**/xyz.md	a/b/d/xyz.md	no-match
a/b/**/c{d,e}/**/xyz.md	a/b/cd/xyz.md	match
a/b/**/{c,d,e}/**/xyz.md	a/b/c/xyz.md	match
a/b/**/{c,d,e}/**/xyz.md	a/b/d/xyz.md	match
a/b/**/{c,d,e}/**/xyz.md	a/b/e/xyz.md	match
*{a,b}*	xax	match
*{a,b}*	xxax	match
*{a,b}*	xbx	match
*{*a,b}	xba	match
*{*a,b}	xb	match
*??	a	no-match
*???	aa	no-match
*???	aaa	match
*****??	a	no-match
*****???	aa	no-match
*****???	aaa	match
a*?c	aaa	no-match
a*?c	aac	match
a*?c	abc	match
a**?c	abc	match
a**?c	abb	no-match
a**?c	acc	match
a*****?c	abc	match
*****?	a	match
*****?	aa	match
*****?	abc	match
*****?	zzz	match
*****?	bbb	match
*****?	aaaa	match
*****??	aa	match
*****??	abc	match
*****??	zzz	match
*****??	bbb	match
*****??	aaaa	match
?*****??	a	no-match
?*****??	aa	no-match
?*****??	abc	match
?*****??	zzz	match
?*****??	bbb	match
?*****??	aaaa	match
?*****?c	abc	match
?*****?c	abb	no-match
?*****?c	zzz	no-match
?***?****c	abc	match
?***?****c	bbb	no-match
?***?****c	zzz	no-match
?***?****?	abc	match
?***?****?	bbb	match
?***?****?	zzz	match
?***?****	abc	match
*******c	abc	match
*******?	abc	match
a*cd**?**??k	abcdecdhjk	match
a**?**cd**?**??k	abcdecdhjk	match
a**?**cd**?**??k***	abcdecdhjk	match
a**?**cd**?**??***k	abcdecdhjk	match
a**?**cd**?**??***k**	abcdecdhjk	match
a****c**?**??*****	abcdecdhjk	match
a/?/c/?/*/e.md	a/b/c/d/e.md	no-match
a/?/c/?/*/e.md	a/b/c/d/e/e.md	match
a/?/c/?/*/e.md	a/b/c/d/efghijk/e.md	match
a/?/**/e.md	a/b/c/d/efghijk/e.md	match
a/?/e.md	a/bb/e.md	no-match
a/??/e.md	a/bb/e.md	match
a/?/**/e.md	a/bb/e.md	no-match
a/?/**/e.md	a/b/ccc/e.md	match
a/*/?/**/e.md	a/b/c/d/efghijk/e.md	match
a/*/?/**/e.md	a/b/c/d/efgh.ijk/e.md	match
a/*/?/**/e.md	a/b.bb/c/d/efgh.ijk/e.md	match
a/*/?/**/e.md	a/bbb/c/d/efgh.ijk/e.md	match
a/*/ab??.md	a/bbb/abcd.md	match
a/bbb/ab??.md	a/bbb/abcd.md	match
a/bbb/ab???md	a/bbb/abcd.md	match
{a,b}/c/{d,e}/**/*.ts	a/c/d/one/two/three.test.ts	match
{a,{d,e}b}/c	a/c	match
{**/a,**/b}	b	match

## fast_glob.not_paired_braces
{a,}}	a	no-match
{a,}}	a}	match
# `{a,b` / `!{a,b` rows removed — fast-glob tolerates unterminated braces
# as literal text; we reject at parse time. Divergence in corpus-err.txt
# and corpus-fast-glob-diff.txt.
