Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

153 lines (120 sloc) 3.777 kb
use v6;
use Test;
plan 41;
=begin pod
This tests the smartmatch operator, defined in L<S03/"Smart matching">
=end pod
sub eval_elsewhere($code){ eval($code) }
#L<S03/Smart matching/Any undef undefined not .defined>
{
ok("foo" ~~ .defined, "foo is ~~ .defined");
#?pugs todo
nok "foo" !~~ .defined, 'not foo !~~ .defined';
nok((Mu ~~ .defined), "Mu is not .defined");
}
# TODO:
# Set Set
# Hash Set
# Any Set
# Set Array
# Set Hash
# Any Hash
# Regex tests are in spec/S05-*
#L<S03/"Smart matching"/in range>
{
# more range tests in t/spec/S03-operators/range.t
#?pugs todo
ok((5 ~~ 1 .. 10), "5 is in 1 .. 10");
ok(!(10 ~~ 1 .. 5), "10 is not in 1 .. 5");
ok(!(1 ~~ 5 .. 10), "1 is not i n 5 .. 10");
ok(!(5 ~~ 5 ^..^ 10), "5 is not in 5 .. 10, exclusive");
};
# TODO:
# Signature Signature
# Callable Signature
# Capture Signature
# Any Signature
# Signature Capture
# reviewed by moritz on 2009-07-07 up to here.
=begin Explanation
You may be wondering what the heck is with all these try blocks.
Prior to r12503, this test caused a horrible death of Pugs which
magically went away when used inside an eval. So the try blocks
caught that case.
=end Explanation
{
my $result = 0;
my $parsed = 0;
my @x = 1..20;
try {
$result = all(@x) ~~ { $_ < 21 };
$parsed = 1;
};
ok $parsed, 'C<all(@x) ~~ { ... }> parses';
ok ?$result, 'C<all(@x) ~~ { ... } when true for all';
$result = 0;
try {
$result = !(all(@x) ~~ { $_ < 20 });
};
#?pugs todo
ok $result,
'C<all(@x) ~~ {...} when true for one';
$result = 0;
try {
$result = !(all(@x) ~~ { $_ < 12 });
};
#?pugs todo
ok $result, 'C<all(@x) ~~ {...} when true for most';
$result = 0;
try {
$result = !(all(@x) ~~ { $_ < 1 });
};
ok $result, 'C<all(@x) ~~ {...} when true for one';
};
# need to test in eval() since class definitions happen at compile time,
# ie before the plan is set up.
eval_lives_ok 'class A { method foo { return "" ~~ * } }; A.new.foo',
'smartmatch in a class lives (RT 62196)';
# RT #69762
#?pugs skip 'Callable'
{
ok sub {} ~~ Callable, '~~ Callable (true)';
nok 68762 ~~ Callable, '~~ Callable (false)';
ok 69762 !~~ Callable, '!~~ Callable (true)';
nok sub {} !~~ Callable, '!~~ Callable (false)';
ok sub {} ~~ Routine, '~~ Routine (true)';
nok 68762 ~~ Routine, '~~ Routine (false)';
ok 69762 !~~ Routine, '!~~ Routine (true)';
nok sub {} !~~ Routine, '!~~ Routine (false)';
ok sub {} ~~ Sub, '~~ Sub (true)';
nok 68762 ~~ Sub, '~~ Sub (false)';
ok 69762 !~~ Sub, '!~~ Sub (true)';
nok sub {} !~~ Sub, '!~~ Sub (false)';
ok sub {} ~~ Block, '~~ Block (true)';
nok 68762 ~~ Block, '~~ Block (false)';
ok 69762 !~~ Block, '!~~ Block (true)';
nok sub {} !~~ Block, '!~~ Block (false)';
ok sub {} ~~ Code, '~~ Code (true)';
nok 68762 ~~ Code, '~~ Code (false)';
ok 69762 !~~ Code, '!~~ Code (true)';
nok sub {} !~~ Code, '!~~ Code (false)';
}
{
class RT68762 { our method rt68762 {} };
ok &RT68762::rt68762 ~~ Method, '~~ Method (true)';
nok 68762 ~~ Method, '~~ Method (false)';
ok 69762 !~~ Method, '!~~ Method (true)';
nok &RT68762::rt68762 !~~ Method, '!~~ Method (false)';
}
# RT 72048
{
role RT72048_role {}
class RT72048_class does RT72048_role {}
ok RT72048_class.new ~~ RT72048_role, 'class instance matches role';
nok RT72048_class.new !~~ RT72048_role, 'class instance !!matches role';
}
#?pugs todo
ok "foo" ~~ *, 'thing ~~ * is true';
ok ("foo" ~~ *) ~~ Bool, 'thing ~~ * is a boolean';
done();
# vim: ft=perl6
Jump to Line
Something went wrong with that request. Please try again.