1use Test::More tests => 8; 2 3BEGIN { use_ok('Class::Multimethods::Pure') } 4 5multi foo => (Any) => sub { "ok @_" }; 6 7is(foo(1), "ok 1", "sanity check"); 8is(foo(1,2), "ok 1 2", "can pass additional arguments"); 9ok(!eval { foo(); 1 }, "no arguments dies"); 10 11package Foo; 12sub new { bless {} => shift } 13package Bar; 14sub new { bless {} => shift } 15package main; 16 17multi bar => (Foo) => sub { "one" }; 18multi bar => (Foo, Foo) => sub { "two" }; 19 20is(bar(Foo->new), "one", "single argument"); 21is(bar(Foo->new, Foo->new), "two", "double argument"); 22is(bar(Foo->new, Bar->new), "one", "single argument+extraneous"); 23 24multi qsort => () => sub { () }; 25multi qsort => (Any) => sub { 26 my $x = shift; 27 my @pre = grep { $_ < $x } @_; 28 my @post = grep { $_ >= $x } @_; 29 return qsort(@pre), $x, qsort(@post); 30}; 31 32is_deeply([qsort(5,3,7,1,2,6,4)], [1..7], "quicksort"); 33 34# vim: ft=perl : 35