The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use t::std;
my $xism = qr/x/=~/\(\?\^/ ? "^" : "-xism";
{
	my $str = "ferg";
	my $re = qr/$str/;
	check_test(
		sub {
			cmp_deeply("fergal", re($re));
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"re eq"
	);

	check_test(
		sub {
			cmp_deeply("fergal", regexponly($re));
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"regexponly eq"
	);

	check_test(
		sub {
			cmp_deeply("feargal", re($re));
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Using Regexp on \$data
   got : 'feargal'
expect : $re
EOM
		},
		"re not eq"
	);

	check_test(
		sub {
			cmp_deeply("feargal", regexponly($re));
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Using Regexp on \$data
   got : 'feargal'
expect : $re
EOM
		},
		"regexponly not eq"
	);


	check_test(
		sub {
			cmp_deeply("fergal", re($str));
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"string re eq"
	);

	check_test(
		sub {
			cmp_deeply("feargal", re($str));
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Using Regexp on \$data
   got : 'feargal'
expect : $re
EOM
		},
		"string runre not eq"
	);
}
{
	my $re = qr/([ac])/;
	check_test(
		sub {
			cmp_deeply("abc", re($re, [qw( a )]));
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"matches re eq"
	);

	check_test(
		sub {
			cmp_deeply("abc", re($re, [qw( a c )], "g"));
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"matches global re eq"
	);

	check_test(
		sub {
			cmp_deeply("abc", re($re, [qw( a b )], "g"));
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Compared [\$data =~ (?$xism:([ac]))]->[1]
   got : 'c'
expect : 'b'
EOM
		},
		"matches global not eq"
	);

}

{
	my $re = qr/(..)/;
	check_test(
		sub {
			cmp_deeply("abababcdcdefef", re($re, set(qw( ab cd ef )), "g"));
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"matches re and set eq"
	);

	check_test(
		sub {
			cmp_deeply("cat=2,dog=67,sheep=3,goat=2,dog=5",
					re(qr/(\D+)=\d+,?/, set(qw( cat sheep dog )), "g"))
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Comparing [\$data =~ (?$xism:(\\D+)=\\d+,?)] as a Set
Extra: 'goat'
EOM
		},
		"string runre not eq"
	);

}