forked from Raku/roast
-
Notifications
You must be signed in to change notification settings - Fork 0
/
multi-dispatch.t
28 lines (18 loc) · 916 Bytes
/
multi-dispatch.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use v6;
use Test;
# L<S12/Types and Subtypes/>
plan 6;
subset Even of Int where { $_ % 2 == 0 };
subset Odd of Int where { $_ % 2 == 1 };
multi sub test_subtypes(Even $y){ 'Even' } #OK not used
multi sub test_subtypes(Odd $y){ 'Odd' } #OK not used
is test_subtypes(3), 'Odd', 'mutli dispatch with type mutual exclusive type constaints 1';
is test_subtypes(4), 'Even', 'mutli dispatch with type mutual exclusive type constaints 1';
multi sub mmd(Even $x) { 'Even' } #OK not used
multi sub mmd(Int $x) { 'Odd' } #OK not used
is mmd(3), 'Odd' , 'MMD with subset type multi works';
is mmd(4), 'Even', 'subset multi is narrower than the general type';
multi foo ($foo where { $_ eq "foo"}) { $foo }
is foo("foo"), "foo", "when we have a single candidate with a constraint, it's enforced";
dies_ok { foo("bar") }, "value that doesn't meet single constraint causes failed dispatch";
# vim: ft=perl6