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