Mercurial > projects > ldc
changeset 1264:7ffac0079d08
Add (currently failing) test for correct virtual call resolution.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sun, 26 Apr 2009 10:29:39 +0200 |
parents | 4fc43e173a0f |
children | bbe6d2b87842 |
files | tests/mini/virtcall2.d |
diffstat | 1 files changed, 78 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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); + } +}