# HG changeset patch # User Christian Kamm # Date 1240734579 -7200 # Node ID 7ffac0079d08d80edaef33a98e40e94bb113de2f # Parent 4fc43e173a0f8586ee85b051719b4f7d5ecf646c Add (currently failing) test for correct virtual call resolution. diff -r 4fc43e173a0f -r 7ffac0079d08 tests/mini/virtcall2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/mini/virtcall2.d Sun Apr 26 10:29:39 2009 +0200 @@ -0,0 +1,78 @@ +enum { + COMMON, + INPUT, + OUTPUT, + CONDUIT, + OTHER +} + +interface Common +{ int common(); } + +interface Input : Common +{ int input(); } + +interface Output : Common +{ int output(); } + +interface Conduit : Input, Output +{ abstract int conduit(); } + +class Abstract : Conduit +{ + abstract int conduit(); + abstract int output(); + abstract int input(); + int common() { return COMMON; } +} + +interface Other +{ int other(); } + +class Impl : Abstract, Other +{ + int conduit() { return CONDUIT; } + int output() { return OUTPUT; } + int other() { return OTHER; } + int input() { return INPUT; } +} + +void main() +{ + auto impl = new Impl; + + { + auto i = impl; + assert(i.common() == COMMON); + assert(i.input() == INPUT); + assert(i.output() == OUTPUT); + assert(i.conduit() == CONDUIT); + assert(i.other() == OTHER); + } + + { + Abstract i = impl; + assert(i.common() == COMMON); + assert(i.input() == INPUT); + assert(i.output() == OUTPUT); + assert(i.conduit() == CONDUIT); + } + + { + Conduit i = impl; + assert(i.common() == COMMON); + assert(i.input() == INPUT); + assert(i.output() == OUTPUT); + assert(i.conduit() == CONDUIT); + } + + { + Output i = impl; + assert(i.output() == OUTPUT); + } + + { + Common i = impl; + assert(i.common() == COMMON); + } +}