Created
August 23, 2020 20:17
-
-
Save fecundf/bfc617a2b3bfd2f6096afaf52795eedc to your computer and use it in GitHub Desktop.
Work in progress about Raku traits leaking when more than one applied, maybe.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env raku | |
use v6; | |
use Test; | |
multi trait_mod:<is> (Routine \routine, :$equality-A!) { | |
trait_mod:<is>(routine, :equiv(&infix:<==>)); | |
} | |
multi trait_mod:<is> (Routine \routine, :$equality-B!) { | |
trait_mod:<is>(routine, :equiv(&infix:<==>)); | |
} | |
multi trait_mod:<is> (Routine \routine, :$equality-C!) { | |
trait_mod:<is>(routine, :equiv(&infix:<==>)); | |
} | |
multi trait_mod:<is> (Routine \routine, :$chainable-A!) { | |
trait_mod:<is>(routine, :assoc<chain>); | |
} | |
multi trait_mod:<is> (Routine \routine, :$chainable-B!) { | |
trait_mod:<is>(routine, :assoc<chain>); | |
} | |
multi trait_mod:<is> (Routine \routine, :$chainable-C!) { | |
trait_mod:<is>(routine, :assoc<chain>); | |
} | |
multi trait_mod:<is> (Routine \routine, :$eq-chain-A!) { | |
trait_mod:<is>(routine,:equality-A); | |
trait_mod:<is>(routine,:chainable-A); | |
} | |
# No declaration of eq-chain-B on purpose | |
multi trait_mod:<is> (Routine \routine, :$eq-chain-C!) { | |
trait_mod:<is>(routine,:equality-C); | |
trait_mod:<is>(routine,:chainable-C); | |
} | |
sub is-eq-A is equality-A { ... } | |
sub is-eq-B is equality-B { ... } | |
sub is-eq-C is equality-C { ... } | |
sub chained-A is chainable-A { ... } | |
sub chained-B is chainable-B { ... } | |
sub chained-C is chainable-C { ... } | |
BEGIN my (\orig-eq-A-prec-clone, \orig-chained-A-prec-clone, \orig-eq-A-prec, \orig-chained-A-prec) = | |
&is-eq-A.prec.clone, &chained-A.prec.clone,&is-eq-A.prec, &chained-A.prec; | |
my \postcompiled-eq-A-prec-clone = &is-eq-A.prec.clone; | |
my \postcompiled-chained-A-prec-clone = &chained-A.prec.clone; | |
sub is-eq-is-chained-B is equality-B is chainable-B { ... } | |
sub trait_mod-eq-chain-C is eq-chain-C { ... } | |
plan 15; | |
is-deeply orig-eq-A-prec-clone, postcompiled-eq-A-prec-clone, 'orig-eq-A-prec-clone eqv postcompiled-eq-A-prec-clone'; | |
is-deeply orig-eq-A-prec-clone, orig-eq-A-prec, 'ok $orig-eq-A-prec-clone eqv $orig-eq-A-prec'; | |
is-deeply orig-eq-A-prec-clone, &is-eq-A.prec, '$orig-eq-A-prec eqv &is-eq-A.prec'; | |
is-deeply orig-chained-A-prec-clone, postcompiled-chained-A-prec-clone, 'orig-chained-A-prec-clone chainedv postcompiled-chained-A-prec-clone'; | |
is-deeply orig-chained-A-prec-clone, orig-chained-A-prec, 'ok $orig-chained-A-prec-clone chainedv $orig-chained-A-prec'; | |
is-deeply orig-chained-A-prec-clone, &chained-A.prec, '$orig-chained-A-prec chainedv &is-chained-A.prec'; | |
is-deeply &is-eq-A.prec, &is-eq-B.prec, '&is-eq-A.prec eqv &is-eq-B.prec'; | |
is-deeply &is-eq-A.prec, &is-eq-C.prec, '&is-eq-A.prec eqv &is-eq-C.prec'; | |
is-deeply &chained-A.prec, &chained-B.prec, '&chained-A.prec eqv &chained-B.prec'; | |
is-deeply &chained-A.prec, &chained-C.prec, '&chained-A.prec eqv &chained-C.prec'; | |
is-deeply &is-eq-is-chained-B.prec, &trait_mod-eq-chain-C.prec, '&is-eq-is-chained-B.prec eqv &trait_mod-eq-chain-C.prec'; | |
ok &is-eq-is-chained-B.prec !eqv &is-eq-B.prec, '&is-eq-is-chained-B.prec !eqv &is-eq-B.prec'; | |
ok &is-eq-is-chained-B.prec !eqv &chained-B.prec, '&is-eq-is-chained-B.prec !eqv &chained-B.prec'; | |
ok &trait_mod-eq-chain-C.prec !eqv &is-eq-C.prec, '&trait_mod-eq-chain-C.prec !eqv &is-eq-C.prec'; | |
ok &trait_mod-eq-chain-C.prec !eqv &chained-C.prec, '&trait_mod-eq-chain-C.prec !eqv &chained-C.prec'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment