use Perl6::Rules;
use Test::Simple 'no_plan';

$var = rx/a+b/;

# BUG: Not happy with rx's for some reason...
# @var = (rx/a/, rx/b/, rx/c/, rx/\w/);
  @var = (qr/a/, qr/b/, qr/c/, qr/\w/);

%var = (a=>rx:w/ 4/, b=>rx:w/ cos/, c=>rx:w/ \d+/);


# SCALARS

ok( "a+b" !~ m/<$::var>/, "Simple scalar match");
ok( "zzzzzza+bzzzzzz" !~ m/<$::var>/, "Nested scalar match");
ok( "aaaaab" =~ m/<$::var>/, "Rulish scalar match");


# ARRAYS

ok( "a" =~ m/<@::var>/, "Simple array match (a)");
ok( "b" =~ m/<@::var>/, "Simple array match (b)");
ok( "c" =~ m/<@::var>/, "Simple array match (c)");
ok( "d" =~ m/<@::var>/, "Simple array match (d)");
ok( "!" !~ m/<@::var>/, "Simple array match (!)");
ok( "!!!!a!!!!!" =~ m/<@::var>/, "Nested array match (a)");
ok( "!!!!e!!!!!" =~ m/<@::var>/, "Nested array match (e)");

{
  no warnings 'regexp';

  ok( "abca" =~ m/^<@::var>+$/, "Multiple array matching");
  ok( "abca!" !~ m/^<@::var>+$/, "Multiple array non-matching");
}


# HASHES

ok( "a 4" =~ m/<%::var>/, "Simple hash interpolation (a)");
ok( "b cos" =~ m/<%::var>/, "Simple hash interpolation (b)");
ok( "c 1234" =~ m/<%::var>/, "Simple hash interpolation (c)");
ok( "d" !~ m/<%::var>/, "Simple hash interpolation (d)");
ok( "====a 4=====" =~ m/<%::var>/, "Nested hash interpolation (a)");
ok( "abca" !~ m/^<%::var>$/, "Simple hash non-matching");

{
  no warnings 'regexp';

  ok( "a 4 b cos c 99  a 4" =~ m:w/^[ <%::var>]+$/, "Simple hash repeated matching");
}